用打表的方法来做,原理类似素数筛
单次运行时间复杂度较高,但查询次数越多平均效率越高
#include<iostream>
#include<map>
using namespace std;
int main(){
int n;
map<int,bool> record;
for(int i=2;i<10000;i++){
record[i] = false;
}
for(int k=2;k<100;k++){
int d = k*k;
for(int i=1;d*i<10000;i++){
record[d*i] = true;
}
}
while(cin>>n){
if(n==0) break;
if(record[n]){
cout<<"Yes"<<endl;
} else {
cout<<"No"<<endl;
}
}
return 0;
}

京公网安备 11010502036488号