您的位置:首页 > 大数据 > 人工智能

UVA 10780-Again Prime? No Time.

2016-07-19 23:26 525 查看


题目链接

题目解析

题意

输入数据组数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: