//对n进行素因子分解 void findfac(long long n){ if(Miller_Rabin(n)){//素数 factor[tol++]=n; return; } long long p=n; while(p>=n)p=Pollard_rho(p,rand()%(n-1)+1); findfac(p); findfac(n/p); }
//对n进行素因子分解 void findfac(LL n) { if(Miller_Rabin(n,20)==0)//素数 { factor[tol++]=n; return; } LL p=n; while(p>=n) p=Pollard_rho(p,rand()%(p-1)+1); findfac(p); findfac(n/p); }
int main(int argc, char const *argv[]) { int T; LL n; scanf("%d",&T); while(T--) { scanf("%I64d",&n); if(Miller_Rabin(n,20)==0) { printf("Prime\n"); } else { tol=0; findfac(n); LL ans = factor[0]; //printf("tol=%d\n",tol); //for(int i = 0 ; i < tol ; i++) // printf("%lld", factor[i]); //printf("\n"); for(int i=1;i<tol;i++) if(factor[i]<ans) ans=factor[i]; printf("%I64d\n",ans); } } return 0; }