描述
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
-
输入
-
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出
- 输出m的个数。 样例输入
-
2 100 5 16 2
样例输出
-
24 15
-
解题思路:
-
刚看到本题时,思维有些偏差,以为通过自定义函数可以先将n的阶乘算出来,再对所得数进行处理,就能得到结果。
-
代码如下:
-
#include<stdio.h> void jiecheng(int n,int *t); bool is_prime(int n); int main() { int t,n,m,i,s=1; scanf("%d",&t);//t控制循环 for(i=1;i<=t;i++) { scanf("%d%d",&n,&m); jiecheng(n,&s); } } void jiecheng(int n,int* s) { int i; for(i=1;i<=n;i++) { (*s)=(*s)*i; } }
但是后来发现,如果m比较大时,就无法操作。后来看了其他人的代码,便得到以下思路
n!=1*2*3*...*n
=m*(2*m)*(3*m)*(n/m*m)*other
=m^(n/m)*(n/m)!*other
此时可以把other舍弃,再把n!分为(m^(n/m))和((n/m)!)两部分来求,其代码如下:
#include<stdio.h>
int main()
{
int s,m,n,count;
scanf("%d",&s);
while(s--)
{
count=0;
scanf("%d%d",&m,&n);
while(m)
{
m=m/n;
count=count+m;
}
printf("%d\n",count);
}
return 0;
}