求x!在k进制下后缀和的个数

20分:
    求十进制下的x!后缀和的个数

40分:

高精求阶乘,直接模拟过程 (我不管反正我不打,本蒟蒻最讨厌高精了)

60分
   
利用一个定理(网上有求x!在10进制、2进制下后缀和的个数的题,原理一样)

 证明:(转自http://www.cnblogs.com/dolphin0520/

求n的阶乘某个因子a的个数,如果n比较小,可以直接算出来,但是如果n很大,此时n!超出了数据的表示范围,这种直接求的方法肯定行不通。其实n!可以表示成统一的方式。

    n!=(k^m)*(m!)*a   其中k是该因子,m=n/k,a是不含因子k的数的乘积

    下面推导这个公式

    n!=n*(n-1)*(n-2)*......3*2*1

    =(k*2k*3k.....*mk)*a      a是不含因子k的数的乘积,显然m=n/k;

    =(k^m)*(1*2*3...*m)*a

    =k^m*m!*a

    接下来按照相同的方法可以求出m!中含有因子k的个数。

    因此就可以求除n!中因子k的个数

上代码:

 long long fac(long long x,long long y)
{
if (x<y)
return ;
else
return x/y+fac(x/y,y);
}

比如样例:求10!在40进制下后缀和的个数

X!转40进制只需不停地除以40,所以后缀零的个数等于x!能整除40 的个数。那么决定x!能整除多少个40的原因在于40的质因子(40=2*2*2*5=2^3+5^1),所以只要求在x!中40的某一质因子出现的次数,最后求出最少出现次数就行。根据质因子分解计算k的质因子p在x!中出现的次数:

可分解为x!=x*p^e的形式,e=x/p + x/p^2 + x/p^3+ ……,根据这个公式就能写出以下函数

再上个代码:

 #include<iostream>
#include<cstdio>
#include<cmath>
#define N 3000001
using namespace std;
long long a[N],b[N];//a数组存k的质因子,b数组存k的某质因子的个数
long long sum;
long long n,k;
long long ans=0x7fffffffffffffff,temp;
void fenjie(long long s) //求质因子及个数 (大概不需要解释了吧。。。)
{
long long i,j=;
for (i=;i*i<=s;i++)
if (s%i==)
{
long long count=;
a[j]=i;
while (s%i==)
{
count++;
s/=i;
}
b[j++]=count;
}
if (s>)
{
a[j]=s;
b[j++]=;
} //可能容易遗漏,即k本身是质数
sum=j;
} long long fac(long long x,long long y)
{
if (x<y)
return ; //判断x是否小于y,若小于,结束统计(否则会一直做下去)
else
return x/y+fac(x/y,y); //统计n!中a[i]出现的次数
} int main()
{
while (scanf("%lld%lld",&n,&k)==) //多组数据嘿嘿嘿(反正有人因为这个没分)
{
fenjie(k);
for(int i=;i<sum;i++)
{
temp=fac(n,a[i]);
temp/=b[i]; //注意,k可以分解为多个a[i],所以temp还要再除以a[i]的个数
ans=ans>temp?temp:ans;
}
printf("%lld\n",ans);
}
return ;
}

100分:

洛谷给出的终极巨无霸正解要用到Pollard rho算法来求k的质因子及其个数(反正我不会,而且代码超级长),我直接用了博客上的模板提交,发现确实不超时了,但莫名奇妙地wa了三个点。。。反正赛后改了数据还是ac了。

 

求x!在k进制下后缀零的个数(洛谷月赛T1)的更多相关文章

  1. (找到最大的整数k使得n! % s^k ==0) (求n!在b进制下末尾0的个数) (区间满足个数)

    题目:https://codeforces.com/contest/1114/problem/C 将b分解为若干素数乘积,记录每个素数含多少次方 b = p1^y1·p2^y2·...·pm^ym. ...

  2. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其 ...

  3. n!在k进制下的后缀0

    问n! 转化成k进制后的位数和尾数的0的个数.[UVA 10061 How many zeros and how many digits?] Given a decimal integer numbe ...

  4. bzoj 3000 Big Number 估算n!在k进制下的位数 斯特林公式

    题目大意 求n!在k进制下的位数 2≤N≤2^31, 2≤K≤200 分析 作为数学没学好的傻嗨,我们先回顾一下log函数 \(\log_a(b)=\frac 1 {log_b(a)}\) \(\lo ...

  5. 51 Nod 1116 K进制下的大数

    1116 K进制下的大数  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数 ...

  6. SDUT 3503 有两个正整数,求N!的K进制的位数

    有两个正整数,求N!的K进制的位数 题目链接:action=showproblem&problemid=3503">http://sdutacm.org/sdutoj/prob ...

  7. 求一个数的阶乘在 m 进制下末尾 0 的个数

    题意 : 求一个数 n 的阶层在 m 进制下末尾 0 的个数 思路分析 : 如果是 10 进制地话我们是很容易知道怎么做的,数一下其对 5 约数地个数即可,但是换成 m 进制的话就需要先将 m 分解质 ...

  8. 陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物【数学/k进制下x^n的位数/log】

    链接:https://www.nowcoder.com/acm/contest/121/F来源:牛客网 题目描述 WWX的女朋友送给了他一个礼物,可是礼物却被一把K进制密码锁锁住了.在礼物盒上还有一张 ...

  9. 数位DP 求K进制下0~N的每个数每位上出现的数的总和

    好久没写博客了,因为感觉时间比较紧,另一方面没有心思,做的题目比较浅也是另一方面. 热身赛第二场被血虐了好不好,于是决定看看数位DP吧. 进入正题: 如题是一道经(简)典(单)的数位dp. 第一步,对 ...

随机推荐

  1. centos7.5安装公版mysql5.7.25

    ######### 卸载原来系统安装的包 # yum remove -y java cvs libselinux-devel postgresql mysql ecj jna sinjdoc 依赖包安 ...

  2. parameter–precharge, tRCD and tRAS

    以下描述来自wikipeida : https://en.wikipedia.org/wiki/Synchronous_dynamic_random-access_memory 几点总结: (1) 每 ...

  3. WIN32_FIND_DATA 详细结构(附循环读取文件代码)

    //去除路径最后多余的斜杠和反斜杠 std::string TrimPath(std::string path) { //string test3("内容"); 使用引用字符数组作 ...

  4. extern “C”的用法

    引言 由于不同的代码互相调用起来很容易出错,甚至同一种代码但由不同的编译器编译,为实现C++代码调用其他C语言代码,会在C语言代码的部分加上extern "C",表明这段代码需要按 ...

  5. python 日记 day4

    1.为何数据要分类 数据是用来表示状态的,不同的状态应该用不同类型的数据来表示. 2.数据类型 数字 字符串 列表 元组 字典 集合 列表:列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大 ...

  6. Chapter 1 线性表

    Preface: 这部分主要是我考研之前的总结,留作以后用到时再翻出来看看.都是基础的知识点,望各(Da)位(Lao)不喜勿喷,欢迎指正. 适用人群:考研复习过一遍数据结构的,可以看看,查漏补缺(顺便 ...

  7. webservice作用(优,缺点;作用)

    1其实我们平时的应用,有一方面考虑是部署方便,维护容易~!如果是DLL,部署,更新需要每个应用了这个DLL的应用程序都作相应的引用更新...而如果用了Ws,则不用,因为它通过网络部署,通过网络引用,基 ...

  8. Luogu P1979 华容道(bfs+最短路)

    P1979 华容道 题意 题目描述 小B最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成, 最少需要多少时间. ...

  9. Ubuntu中安装gdal python版本

    安装过程: python包是从C++包中编译出来的,所以需要将源码下载进行编译安装 1.GDAL中的矢量数据处理OGR依赖于Geos,在安装GDAL之前要安装Geos Geos的下载地址:http:/ ...

  10. poj 2349 Arctic Network 最小生成树,求第k大条边

    题目抽象出来就是有一些告诉坐标的通信站,还有一些卫星,这些站点需要互相通信,其中拥有卫星的任意两个站可以不用发射器沟通,而所有站点的发射器要都相同,但发射距离越大成本越高. 输入的数据意思: 实例个数 ...