UVA 10780-Again Prime? No Time.

来源:互联网 发布:网络招聘公司 编辑:程序博客网 时间:2024/06/06 12:30

这里写图片描述
题目链接

题目解析

题意

输入数据组数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;}
0 0
原创粉丝点击