首页 > 其他分享 >阶乘后K个零

阶乘后K个零

时间:2023-07-28 15:11:39浏览次数:36  
标签:tmp LL 个数 因子 ans 阶乘

 

思路: 首先X阶乘后0的个数等于1-x 中包含2,5质因子的个数.  其中2的质因子个数小于5的个数,  所以 求0的个数就等于求出质因子5的个数

设f(x) 为 x阶乘后0的个数, 则 f(x) = x/5 + x/5^2 + ...+ x/5^k  (此处必然存在一个k 使得 x < 5^k)  且 f(x) 单调不减

本题目是求阶乘后k个0的数的个数   由于f(x)单调不减的特性, 我们可以用二分求出阶乘后不大于k个0的最大x

则阶乘后k个0的数的个数  就等于阶乘后不大于k个0的最大x - 阶乘后不大于k-1个0的最大x

class Solution {
public:
    typedef long long LL;
    LL Ans(LL n)
    {
        LL l = -1;
        LL r = 1e18;
        while(l < r)
        {
            LL mid = (l+r+1)>>1;
            LL ans = 0;
            LL tmp = mid;
            while(tmp)
            {
                ans += tmp/5;
                tmp /= 5;
            }
            if(ans<=n)l = mid;
            else r = mid - 1;
        }
        return l;
    }
    int preimageSizeFZF(int k) {
        return (Ans(k) - Ans(k-1));
    }
};
View Code

 

标签:tmp,LL,个数,因子,ans,阶乘
From: https://www.cnblogs.com/wangrunhu/p/17587664.html

相关文章

  • 数组计算阶乘
    voidfactoral(intN){intarr[5120]={};intmax=0;arr[0]=1;for(inti=0;i<N;i++){for(intj=0;j<5120;j++)arr[j]*=(i+1);for(intj=0;j<5120;j++){if(0<......
  • C语言 【阶乘】
    原#include<stdio.h>intmain(){intn;intsum=1;printf("输入数字:");scanf("%d",&n);for(inti=1;i<=n;i++){sum*=i;}printf("%d的阶乘为%d\n",n,sum);return0;......
  • Python+tensorflow计算整数阶乘的方法与局限性
    本文代码主要演示tensorflow的基本用法。importtensorflowas#创建变量,保存计算结果start=tf.Variable(1,dtype=tf.int64)#初始化变量的opinit_op=tf.global_variables_initializer()#启用默认图withtf.Session()assess:#初始化变量sess.run(ini......
  • 1000的阶乘
    #defineNUM3000#include<stdio.h>intmain(){ intnNum=0; //存储1000阶乘数据: intaryBuff[NUM]={0}; //初始化最数组为下标为0,为1: aryBuff[0]=1; printf("请输入阶乘:\n"); scanf_s("%d",&nNum); //遍历1-nNum的因子: for(inti=2;i<=nNum;i++)......
  • java 阶乘实现
    importjava.text.SimpleDateFormat;importjava.util.Date;publicclassImoocStudent{publicstaticvoidmain(String[]args)throwsException{for(intcounter=0;counter<=10;counter++){//这里写法:把counter,factorial()对应放到......
  • 图解LeetCode——793. 阶乘函数后 K 个零(难度:困难)
    一、题目 f(x) 是 x! 末尾是0的数量。回想一下 x!=1*2*3*...*x,且0!=1 。例如, f(3)=0 ,因为3!=6的末尾没有0;而f(11)=2 ,因为11!=39916800末端有2个0。给定 k,找出返回能满足f(x)=k 的非负整数x 的数量。二、示例2.1>示例1:【输入......
  • 题目26:利用递归方法求 5的阶乘
    题目:利用递归方法求 5! 。deffactorial_fun(integer):ifinteger-1==0:return1returninteger*factorial_fun(integer-1)print(f'5!={factorial_fun(5)}')https://blog.csdn.net/run_noob_vip/category_11598442.html题目26+......
  • Asia Dhaka Regional Contest C (阶乘分解)
    原题点这前置知识点:阶乘分解可看这篇博客题意:给出\(n\),问\(n!\)的因子的因子的个数和。思路:学会上面的阶乘分解之后,我们能一眼看出来这道题也一定跟它有关系,所以我们按照惯例先对\(n!\)进行质因数分解。n!=\({p_1}^{a_1}\times\)\({p_2}^{a_2}\)\(\times\)\({p......
  • 计算100的阶乘
    计算100的阶乘<script>letproduct=1;for(letnum=1;num<=100;num++){product*=num; //累乘100次}console.log(product);</script>计算1!+2!+3!+…+20!<script>letsu......
  • 阶乘 reduce函数 operator模块
       fromfunctoolsimportreducefromoperatorimportmuldeffact(n):#使用reduce和operator.mul函数计算阶乘returnreduce(mul,range(1,n+1))#使用reduce函数和一个匿名函数计算阶乘#returnreduce(lambdaa,b:a*b,range(1,n+1)) ......