//给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
//消去共有因子,避免大数预算
/*对每个形如 (A*a+ B)* a^k的数,前面的A 没有意义的,只有B 才有可能继续被用来作为未来的因子,所以每次只需要保留比a 小的B 就够了*/
#include<iostream>
#include<stdio.h>
//#include<cmath>
using namespace std;
int main(){
int n,a;
while(scanf("%d%d",&n,&a)!=EOF){
int k = 0;
int mu = 1;
for(int i = 2;i<=n;i++)
{
mu = mu*i;
while(mu%a==0)
{
k++;
mu=mu/a;
}
mu = mu%a;//去掉可以把a整除的部分,留下余数即可
}
printf("%d\n",k);
}
return 0;
}
交大1104,整除问题
最新推荐文章于 2021-01-27 10:07:34 发布