hdu 4320 Arcane Numbers 1
Arcane Numbers 1
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 871 Accepted Submission(s): 277
For each case, there’s a single line contains A and B.
检查A中的质因子 是否都在 B中被包含。
#include <stdio.h>
#include <string.h>
#include <math.h>
#define maxn 1000009
int p[maxn],a[maxn];
int n,m;
int cnt;
void prime( )
{
int i,j;
cnt=0;
a[0]=a[1]=0;
for( i=2;i<=1000000;i++)
a[i]=1;
for( i=2;i<=1000;i++)
{
if(a[i])
for( j=2;j*i<=1000000;j++)
a[i*j]=0;
}
for( i=2;i<=1000000;i++)
if(a[i]) p[cnt++]=i;
}
int main( )
{
int tests,sign;
__int64 a,b;
int i;
int cases=0; prime( );
scanf("%d",&tests);
while(tests--)
{
sign=1;
scanf("%I64d%I64d",&a,&b);
int LIM=(int)sqrt(double(a));
for( i=0;p[i]<=LIM;i++)
{
if(a%p[i]==0)
{
if(b%p[i]!=0)
{
sign=0;
break;
}
while(a%p[i]==0)
a/=p[i];
}
}
if(a!=1&&(b%a!=0)) {sign=0;}
if(sign==0) printf("Case #%d: NO\n",++cases);
else printf("Case #%d: YES\n",++cases);
}
return 0;
}