题目解析
题意
输入数据组数t,每组数据包含2个整数m和n,若m^k能被n!整除,输出最大的K,否则输出”Impossible to divide”。
思路
将m分解质因数,求出每个质因数的个数p[i],在n!中相对应m中质因数的个数为q[i],q[i]÷p[i]的最小值即为所求的K的值。
如何求m和n!的质因数见代码
代码
#include<stdio.h>
#include<algorithm>//min头文件
using namespace std;
#define inf 0x3f3f3f//定义的一个比较大的常数
int main(){
int t,n,m,cas=1;
scanf("%d",&t);
while(t--){
scanf("%d%d",&m,&n);
int i=2,ans=inf;
while(m!=1){
int p=0;
while(m%i==0){
m/=i;
p++;//m中质因数i的个数
}
if(p){
int num=n,tmp=0;
while(num){
tmp+=num/i;//n!中质因数i的个数
num/=i;
}
ans=min(ans,tmp/p);
}
i++;
}
printf("Case %d:\n",cas++);
if(ans)
printf("%d\n",ans);
else printf("Impossible to divide\n");
}
return 0;
}