//对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);
}
Esempio n. 2
0
//对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);
}
Esempio n. 3
0
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;
}