博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P4718 【模板】Pollard-Rho算法
阅读量:4641 次
发布时间:2019-06-09

本文共 1928 字,大约阅读时间需要 6 分钟。

题面

题解

太神仙了学不来orz

//minamoto#include
#define R register#define ll long long#define dd long double#define fp(i,a,b) for(int i=a,I=b+1;i
I;--i)#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)using namespace std;const int base[]={2,3,7,61,24251};inline ll mul(R ll x,R ll y,R ll P){R ll k=(dd)x*y/P;k=x*y-k*P;return k<0?k+P:k;}ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}inline ll g(R ll x,R ll n,R ll c){x=mul(x,x,n)+c;return x>n?x-n:x;}inline ll Abs(R ll x){return x<0?-x:x;}ll ksm(R ll x,R ll y,R ll P){ R ll res=1; for(;y;y>>=1,x=mul(x,x,P))if(y&1)res=mul(res,x,P); return res;}bool miller(ll x){ if(x<2||x==46856248255981ll)return false; if(x==2||x==3||x==7||x==61||x==24251)return true; if(!(x&1)||!(x%3)||!(x%61)||!(x%24251))return false; ll p=x-1;int t=0,j; while(!(p&1))p>>=1,++t; fp(i,0,4){ if(base[i]>x)break; ll res=ksm(base[i],p,x); if(res==1||res==x-1)continue; for(j=1;j<=t;++j){ res=mul(res,res,x); if(res==x-1)break; } if(j>t)return false; } return true;}const int M=(1<<7)-1;ll rho(ll n){ if(!(n&1))return 2;if(!(n%3))return 3; ll x=0,y=x,t=1,q=1,c=rand()%(n-1)+1; for(R int k=2;;k<<=1,y=x,q=1){ fp(i,1,k){ x=g(x,n,c); q=mul(q,Abs(x-y),n); if(!(i&M)){ t=gcd(q,n); if(t>1)break; } } if(t>1||(t=gcd(q,n))>1)break; } return t;}ll res;void find(ll x){ if(x==1||x<=res)return; if(miller(x))return res=x,void(); ll p=x; while(p==x)p=rho(x); while(x%p==0)x/=p; find(p),find(x);}int main(){ srand(time(0));// freopen("testdata.in","r",stdin); int T;ll n;scanf("%d",&T); while(T--){ scanf("%lld",&n),res=0,find(n); res==n?printf("Prime\n"):printf("%d\n",res); } return 0;}

转载于:https://www.cnblogs.com/bztMinamoto/p/10432661.html

你可能感兴趣的文章
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>
孩子教育
查看>>
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
Java反射中method.isBridge() 桥接方法
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>