首页 > 其他 > 详细

UVa 10780 - Again Prime? No Time.(唯一分解)

时间:2015-08-29 20:14:58      阅读:129      评论:0      收藏:0      [点我收藏+]

输入nm,求最大k使(mk)%n=0。首先筛选出所有素数,然后求出所有n,唯一分解的结果。对于m进行分解,对于每一个在m中的素数p[i]的指数e[i]k=min(e[i])

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10010;
int p[maxn],pnum,en[maxn][1250],em[maxn];
bool np[maxn]={1,1};
void init(){
    for(int i=2;i<maxn;++i)
        if(!np[i]){
            p[pnum++]=i;
            for(int j=i*i;j<maxn;j+=i)
                np[j]=true;
        }
    for(int i=2;i<maxn;++i){
        int k=i;
        for(int j=0;j<pnum;++j){
            while(k%p[j]==0) k/=p[j],++en[i][j];
            en[i][j]+=en[i-1][j];
        }
    }
    return;
}
int main(){
    init();
    int t,tt=0;scanf("%d",&t);
    while(t--){
        memset(em,0,sizeof em);
        int m,n;scanf("%d%d",&m,&n);
        int ans=0x3f3f3f3f;
        for(int i=0;i<pnum;++i){
            while(m%p[i]==0) m/=p[i],++em[i];
            if(em[i]) ans=min(en[n][i]/em[i],ans);
        }
        printf("Case %d:\n",++tt);
        if(ans) printf("%d\n",ans);
        else puts("Impossible to divide");
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

UVa 10780 - Again Prime? No Time.(唯一分解)

原文:http://blog.csdn.net/wcr1996/article/details/48090225

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!