1.要用long long型。
2.用埃式筛法,只能筛10的6次方,后面的数采用开平方检验。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
using namespace std;
#define MAX 1000001
#define LL long long
LL prime[MAX];
int visprime[MAX];
LL n,k;
void isprime()
{
for(int i=0;i<MAX;i++)
{
visprime[i]=1;
prime[i]=0;
}
k=-1;
for(int i=2;i*i<MAX;i++)
{
if(visprime[i])
{
for(int j=2*i;j<MAX;j=j+i)
{
visprime[j]=0;
}
}
}
for(int i=2;i<MAX;i++)
{
if(visprime[i])
{
//cout<<i<<" ";
prime[++k]=i;
}
}
}
int finsh()
{
for(int i=0;i<k;i++)
{
if(n%prime[i]==0)
{
n=n/prime[i];
if(n%prime[i]==0)
{
return 0;
}
}
}
return 1;
}
int main()
{
isprime();
int t,flag,t1=1;
cin>>t;
while(t--)
{
cin>>n;
flag=finsh();
if(flag&&n>=MAX)
{
LL s = (LL)(sqrt((double)n));
if(s*s==n)
{
flag=0;
}
}
printf("Case %d: ",t1++);
if(flag)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}