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

本文共 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

你可能感兴趣的文章
一个简单的web服务器
查看>>
Python rich comparisons 自定义对象比较过程和返回值
查看>>
动态数据与后台交互的两种方式
查看>>
用C++实现一个Brainfuck解释器
查看>>
苹果中毒员工称症状复发:入住当地医院遭拒
查看>>
年礼成快递企业不再接件主因:苹果产品最疯狂
查看>>
[转载] 七龙珠第一部——第101话 武道会结束
查看>>
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?...
查看>>
【转自论坛】如何增加表空间的大小
查看>>
【总结整理】《人人都是产品经理》---读后感
查看>>
session与cookie的区别
查看>>
java 获取IP地址
查看>>
框框下面的小箭头的实现
查看>>
android studio解决微信登录,百度地图等调试问题
查看>>
ural 1109,NYOJ 239,匈牙利算法邻接表
查看>>
P147、面试题26:复杂链表的复制
查看>>
文件及IO操作(三)
查看>>
割点与桥
查看>>
51.字符串操作函数
查看>>
ASP.NET MVC5中View显示Html
查看>>