题目大意:输入一个数(<2^54),判断其是否为质数,如果否,输出其最小质因数。
经过两篇博客详解,相信这道题目完成应该没有问题了。下面附上代码。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL ans;
LL modmul(LL a,LL b,LL mod)
{
LL ret=0;
for(;b;b>>=1,a=(a+a)%mod)
if(b&1)ret=(ret+a)%mod;
return ret;
}
LL qpow(LL x,LL u,LL mod)
{
LL ret=1LL;
for(;u;u>>=1,x=modmul(x,x,mod))
if(u&1)ret=modmul(ret,x,mod);
return ret;
}
LL gcd(LL a,LL b)
{
return b?gcd(b,a%b):a;
}
LL Pollard_Rho(LL n,LL c)
{
LL i=1,j=2,x=rand()%(n-1)+1,y=x;
while(1)
{
i++;
x=(modmul(x,x,n)+c)%n;
LL p=gcd((y-x+n)%n,n);
if(p!=1&&p!=n)return p;
if(y==x)return n;
if(i==j)
{
y=x;
j<<=1;
}
}
}
bool Miller_Rabin(LL n)