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;
}