http://acm.hdu.edu.cn/showproblem.php?pid=4320
比较大的数字A和B,验证A的因子B是否都有。
他人具体代码:
View Code
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <cmath> #include <queue> #include <vector> #define N 1000000 using namespace std; bool h[1000001]; int rc[100000]; int cnt; void set() { int i,j,k=1; for(i=4;i<N;i+=2) h[i]=1; for(i=3;i<1000;i+=2) if(!h[i]) { for(j=i*i;j<N;j+=i) h[j]=1; } for(i=3;i<N;i+=2) if(!h[i]) rc[k++]=i; rc[0]=2;rc[k]=1000000000; } int main() { set(); int T,t=1; __int64 A,B; int i,k; int c[22]; bool b; scanf("%d",&T); while(T--) { scanf("%I64d%I64d",&A,&B); int temp=sqrt(double(A)); for(b=1,i=0;rc[i]<=temp;i++) { if(A%rc[i]==0) { if(B%rc[i]!=0) { b=0; break; } while(A%rc[i]==0) A/=rc[i]; } } if(A!=1&&(B%A)!=0) b=0; printf("Case #%d: ",t++); if(b) printf("YES\n"); else printf("NO\n"); } return 0; }
