南阳oj 阶乘因式分解(一)
2014-10-17 13:52
246 查看
/*
前提:1 2...n 能被m整除的数有n/m
1*2*3*...n的阶乘一定有k=n/m个m
而且这k个m一定来自
1m 2m ....km(因为m是素数所以不会有两个数相乘后产生m的情况)也就是这些数相乘(1m*2m*3m*...km)有多少个m
我们知道有k个m,所以相乘是就不用把这些m乘进去(即我们算1m*2m*3m....*km==(1*2*3...*k)*(m^k)
时算(1*2*3...*k)有多少个m再加上k=n/m就可以了)
而1*2*3...*k含有多少个m就又转化成了上面的问题
*/
#include<stdio.h>
int main()
{
int t,m,n,sum;
scanf("%d",&t);
while(t--)
{
sum = 0;
scanf("%d%d",&m,&n);
while(m>0)
{
sum = sum + m/n;
m = m/n;
}
printf("%d\n",sum);
}
return 0;
}
前提:1 2...n 能被m整除的数有n/m
1*2*3*...n的阶乘一定有k=n/m个m
而且这k个m一定来自
1m 2m ....km(因为m是素数所以不会有两个数相乘后产生m的情况)也就是这些数相乘(1m*2m*3m*...km)有多少个m
我们知道有k个m,所以相乘是就不用把这些m乘进去(即我们算1m*2m*3m....*km==(1*2*3...*k)*(m^k)
时算(1*2*3...*k)有多少个m再加上k=n/m就可以了)
而1*2*3...*k含有多少个m就又转化成了上面的问题
*/
#include<stdio.h>
int main()
{
int t,m,n,sum;
scanf("%d",&t);
while(t--)
{
sum = 0;
scanf("%d%d",&m,&n);
while(m>0)
{
sum = sum + m/n;
m = m/n;
}
printf("%d\n",sum);
}
return 0;
}
相关文章推荐
- 阶乘因式分解(一)(南阳oj56)
- 阶乘因式分解(一)(南阳oj56)
- 南阳oj 题目56 阶乘因式分解(一)
- 南阳OJ 阶乘因式分解
- [南阳OJ-No.56]阶乘因式分解(一)|给定两个数m,n,其中m是一个素数。 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
- 南阳OJ 题目56-阶乘因式分解(一)
- 阶乘因式分解(二)【南阳oj 题目70】
- 阶乘的0 【南阳 oj 题目84】
- 阶乘之和-南阳OJ-71题
- 另一种阶乘问题(南阳oj65)
- 南阳nyoj 56 阶乘因式分解(一)
- 南阳 70 阶乘因式分解(二)
- 阶乘之和||南阳OJ
- 南阳OJ 题目65:另一种阶乘问题
- 南阳oj 28 大数阶乘
- 南阳oj_(65)另一种阶乘问题
- 南阳oj 题目65 另一种阶乘问题
- 南阳OJ 28:大数阶乘
- 阶乘之和(南阳oj91)(水题)
- 南阳题目56-阶乘因式分解(一)