码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-29 20:17:41      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:uva   唯一分解定理   

输入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.(唯一分解)

标签:uva   唯一分解定理   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!