• UVA 11802 All Your Bases Belong to Us


    题意:这个题题意个人觉得蛮难懂的。。。。意思就是求,把十进制下的n!转化成m进制,末位有且仅有k个连续的0。告诉n和k,求满足题意的m有多少个。

       1<= k <= 10^15,n <= 10^15,保证n / k < 500。

    解法:首先,用f(x,y)表示对于某数i,(x % (i^y)) == 0的i的个数,则题目即是求f(n!, k) - f(n!, k+1)。

       其次,判断数i^k能不能被x整除的方法是,将i因式分解为i = p1^t1 * p2^t2 * P3^t3.....,则对于i的任意一个质因子p_i,x所含有p的次数要大等于t_i。

       最后,求n!含有素数p的次数的方法是,sum = 0, while(n){ n /= p; sum += n;},sum即为所求次数。具体原因是,比如10!的阶乘含2的次数,那么2,4,6,8,10各含一个2,然后4,8各含一个2,然后8含一个2,这样,10!含有2的次数即是5+2+1。

       这样,我们就得到了这道题的如下解法。首先,预处理出n!阶乘中含有次数大等于k的素数,并保存他们的次数。然后,用组合数学的方法求出满足题意的m有多少个。至于第一步为什么不会超时,是因为满足k <= n/i + n/i^2 + n/i^3 + n/i^4... <= n/i + n/i(类比2,发现后面加起来不会超过n/i) < 2*n / i,所以i <= 2*n/k < 1000,所以及时break就行了。

    tag:math, think, good

  • 相关阅读:
    docker基本命令
    vscode 保存提示运行"XXX"的保存参与者: 快速修复
    Vue 2.6 插槽
    代码大全-PartOne-变量命名
    Axure 8.0.1.3388 注册码 授权码 破解
    乱七八糟记一下乱七八糟的碎片化知识
    JavaScript需记的一些细节
    Python3.6问题
    python3.6- shape mismatch: objects cannot be broadcast to a single shape
    Angular+ng-zorro遇坑记
  • 原文地址:https://www.cnblogs.com/plumrain/p/3544996.html
Copyright © 2020-2023  润新知