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

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

虽然很久以前就听说过PR算法,但前几天第一次打。

首先miller rabin判断素数,不在复杂度瓶颈。

pollard rho倍增环长,复杂度是\(O(n^{\frac{1}{4}} log n)\)的。
然而这样复杂度较高,比较难过加强后的数据。

可以考虑每次倍增时把乘积存下来,然后在增加环长时一次gcd,这样应该是\(O(n^{\frac{1}{4}})\)

#pragma GCC optimize(3)#pragma GCC optimize("Ofast")#pragma GCC optimize("inline")#include 
using namespace std;typedef long long i64;typedef unsigned long long u64;typedef vector
vi64;i64 fast_pow(i64 x,i64 y,i64 z){ //cerr<<"fp"<
<<" "<
<<" "<
<
>=1,x=(__int128)x*x%z) if (y&1) ret=(__int128)ret*x%z; return ret;}u64 RAND(){ return ((u64)rand()*rand()+rand());}const int sp[]={2,3,5,7,11,13,17,19,23,29,31,37,43,47};bool is_prime(i64 n){ //cerr<<"is_prime"<
<
>=1; ++b; } for (int i=0; i<12&&sp[i]
>=__builtin_ctzll(b); while (a){ a>>=__builtin_ctzll(a); if (a
1) return tmp; g=(__int128)fix(x-y,n)*g%n; if (i==k){ g=gcd(g,n); if (g>1){ if (g==n){ x=y; while (g==1){ x=((__int128)x*x+c)%n; g=gcd(fix(x-y,n),n); } } return g; } y=x; k<<=1; } }}vi64 v;void fj(i64 n){ if (n==1) return; if (is_prime(n)){ //cerr<<"N"<
<
=n){ p=pollard_rho(n,RAND()%n); } fj(p); fj(n/p);}typedef vector
> vpi64i;vpi64i vv;int k,p;int fp(int x,int y){ int ret=1; for (; y; y>>=1,x=(i64)x*x%p) if (y&1) ret=(i64)ret*x%p; return ret;}int C(int x){ return ((u64)x*(x+1)>>1)%p;}int mul(int x,int y){ return (i64)x*y%p;}int add(int x,int y){ return (x+=y)>=p?x-p:x;}int main(){ int t; cin>>t; while (t--){ i64 n; cin>>n; //FastDiv fd(p); if (n==1){ cout<<1<<'\n'; continue; } v.clear(); fj(n); sort(v.begin(),v.end()); (v.back()==n?cout<<"Prime":cout<
<<'\n'; }}

转载于:https://www.cnblogs.com/Yuhuger/p/10634343.html

你可能感兴趣的文章
tomcat 访问去掉项目名 直接访问 localhsot
查看>>
C#委托的介绍(delegate、Action、Func、predicate)
查看>>
hbase rest api接口链接管理【golang语言版】
查看>>
IOS的七种手势
查看>>
hadoop中map和reduce的数量设置问题
查看>>
剑指offer
查看>>
Mdi悬浮子窗体不超过主窗体边界
查看>>
再论递归
查看>>
[给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...
查看>>
集合框架(一) ----------Map集合遍历的方法
查看>>
2015.5.21 Core Java Volume 1
查看>>
InnoDB还是MyISAM?
查看>>
struts2拦截器详解
查看>>
Mysql常用语句
查看>>
.Net学习笔记----2015-06-30(超市收银系统01-仓库类)
查看>>
累觉不爱
查看>>
Flyweight Design Pattern 共享元设计模式
查看>>
ftp的本地用户搭建
查看>>
Flume环境搭建_五种案例(转)
查看>>
uva11991 Easy Problem from Rujia Liu?
查看>>