题目描述:
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
输入:
两个整数n(2<=n<=1000),a(2<=a<=1000)
输出:
一个整数.
样例输入:
6 10
样例输出:
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
输入:
两个整数n(2<=n<=1000),a(2<=a<=1000)
输出:
一个整数.
样例输入:
6 10
样例输出:
1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//得到两个数的最大公约数
int CalGCD(int a,int b)
{
while(a!=0&&b!=0)
{
if(a>b)
a=a%b;
else
b=b%a;
}
if(a==0)
return b;
else
return a;
}
int main()
{
int n,a,k;
int i;
long long int temp_i;//用temp_i存当前的阶乘的乘积
while(scanf("%d %d",&n,&a)!=EOF)
{
k = 0;
temp_i = 1;
for(i = 2;i <= n;i++)
{
temp_i *= i;
while(temp_i % a == 0)
{
k++;//每有一个a被整除,计数器加1
temp_i /= a;
}
temp_i = CalGCD(temp_i,a);
}
printf("%d\n",k);
}
return 0;
}