#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int llint; #define mp make_pair #define mt make_tuple #define pub push_back #define puf push_front #define pob pop_back #define pof pop_front #define fir first #define sec second #define res resize #define ins insert #define era erase const int mod=1000000007; const llint big=1e18+10; const long double pai=3.141592653589793238462643383279502884197; const long double eps=1e-9; template void mineq(T& a,U b){if(a>b){a=b;}} template void maxeq(T& a,U b){if(a>= 1;b = (b << 1) % m; } return res; } uint64_t bekmod(uint64_t a, uint64_t b, uint64_t m) {//a^bmodm int64_t res=1,gen=a; while (b!=0) { if(b&1){res=mulmod(res,gen,m);} gen=mulmod(gen,gen,m);b>>=1; } return gen; } bool isprime(llint n){ //cout<<"de"<=n){continue;} llint ad=bekmod(a[i],gen,n); if(ad==1){continue;} int r=0; for(r=0;r3 llint bmax=sqrt(n)+10,bmin=2,gen=9999,now=9999; while(bmax-bmin!=1){ gen=(bmax+bmin)/2; now=1; for(int j=0;jn){break;} } if(now==n){break;} if(now>n){bmax=gen;} else{bmin=gen;} } //genがroot(n,i)の候補 //llint gen=root(n,i); if(pow(gen,i)!=n){continue;} if(gen<3){return false;} if(isprime(gen)){return true;} } return false; } void solve(void){ llint n;cin>>n; if(n==2){cout<<"No"<>q; for(int i=0;i