poj2649 Factovisors 质因数分解

来源:互联网 发布:中国手工艺品出口数据 编辑:程序博客网 时间:2024/04/28 06:30

需注意,判定的时候应该是分解出一个m的质因子就比较一次,而不是分解完后再比较,细节上处理要注意,比如当pr[i]不属于m的质因子时直接跳过,这样当m为一个大质数的时候不至于runtimr error

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define maxn 100001using namespace std;bool valid[maxn];int pr[100001],coun=0,n,m;void Init(){    valid[1]=1;    for(int i=2;i<maxn;i++)    {if(!valid[i])    pr[coun++]=i;for(int j=2;i*j<maxn;j++)    valid[i*j]=1;    }}bool Check(int num,int counter){    int coun=0;    for(int i=num;i<=n;i++){        int a=i;        while(a%num==0){            a/=num;            coun++;        }        if(coun>=counter){            return true;        }    }    return false;}int main(){    Init();    while(~scanf("%d%d",&n,&m)){bool ans=1;int s=m,now=0;if(m==0){    printf("0 does not divide %d!\n",n);    continue;}if(m<=n){    printf("%d divides %d!\n",m,n);    continue;}while(now<coun){    int num=0;    while(s%pr[now]==0){            s/=pr[now];            num++;    }    if(num){            if(!Check(pr[now],num)){                ans=0;                break;            }    }    if(s==1)break;    now++;}if(ans&&s<=n)    printf("%d divides %d!\n",m,n);else    printf("%d does not divide %d!\n",m,n);    }    return 0;}


0 0
原创粉丝点击