题意就是让我们找一个数只能有三个约数,很明显素数有两个,那么容易找到规律,这个数只能有着三个约数。1和自己还有sqrt(n)。sqrt(n)自然要是素数。 #include<bits/stdc++.h> using namespace std; const int maxn=400; const int max1=100000+10; bool vis[maxn]; int a[max1]; int main() { int t; scanf("%d",&t); int ca=1; memset(vis,false,sizeof(vis)); vis[0]=vis[1]=true; for(int i=2;i<=maxn;i++) if(!vis[i]){ for(int j=i*i;j<=maxn;j+=i) vis[j]=true; } while(t--) { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) { if(i==0)printf("Case #%d:\n",ca++); int y=sqrt(a[i]); if(a[i]!=1&&y*y==a[i]&&!vis[y])printf("YES\n"); else printf("NO\n"); } } }