一般思路,遍历1-sqrt(n),当n为2^63次方时,时间复杂度为1e9.
而pollard_rho算法的时间复杂度理论为O(n^1/4),也就是开方再开方
代码:
#include<iostream>
#include<ctime>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f3f3f3f3f
const int Ss=20;
const int maxn=1e3;
int prime[200000+1];
ll m[maxn];
int tol;
void getPrime()
{
prime[0]=prime[1]=true;
for(int i=2; i<200000; ++i)
{
if(!prime[i])
{
if(i>200000/i)
continue;
for(int j=i*i; j<200000; j+=i)
{
prime[j]=true;
}
}
}
}
ll mult_mod(ll a,ll b,ll c)
{
a%=c;
b%=c;
ll ret=0;
ll tmp=a;
while(b)
{
if(b&1)
{
ret+=tmp;
if(ret>c)