用打表的方法来做,原理类似素数筛
单次运行时间复杂度较高,但查询次数越多平均效率越高
#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; }