日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[学习笔记]Pollard-Rho

發(fā)布時(shí)間:2025/3/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [学习笔记]Pollard-Rho 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前學(xué)的都是假的

%%zzt

Miller_Rabin:Miller-Rabin與二次探測(cè)

?

大質(zhì)數(shù)分解:

找到所有質(zhì)因子,再logn搞出質(zhì)因子的次數(shù)

方法:不斷找到一個(gè)約數(shù)d,遞歸d,n/d進(jìn)行分解,直到n是質(zhì)數(shù)

?

?

快速冪快速乘:

ll qk(ll a,ll b,ll m){ll d=((long double)a/m*b);ll r=a*b-d*m;return ((ull)r+m)%m; } ll qm(ll x,ll y,ll mod){ll ret=1;while(y){if(y&1) ret=qk(ret,x,mod);x=qk(x,x,mod);y>>=1;}return ret; }

注意快速乘:((ull)r+m)%m由于r可能<0或者>m,這一步是必須的

?

Miller-Rabin:

bool M_R(ll p){if(p==1) return false;if(p==2||p==3||p==5||p==7||p==11||p==61) return true;if(p%2==0||p%3==0||p%5==0||p%7==0) return false;int s=ctz(p-1);for(reg i=0;i<6;++i){int a=pri[i];ll k=(p-1)>>s;k=qm(a,k,p);if(k==1) continue;ll las=k;for(reg j=1;j<=s;++j){k=qk(k,k,p);if(k==1&&las!=p-1&&las!=1) return false;las=k;}if(k!=1) return false;}return true; }

?

?

二進(jìn)制gcd

ll gcd(ll a,ll b) {if(!a||!b) return a|b;#define ctz __builtin_ctzllint shift=ctz(a|b);b>>=shift;while(a){a>>=ctz(a);if(a<b)swap(a,b);a-=b;}return b<<shift;#undef ctz }

就是高精gcd才用的更相減損術(shù)

?

Pollard-Rho

主體1

ll P_R(ll p,ll c){ll x=0,y=0,d;int k=2,has=1;ll tmp=1;while(1){++has;x=ad(qk(x,x,p),c,p);tmp=qk(tmp,abs(y-x),p);if(x==y) return p;if(k==has){k<<=1;y=x;d=gcd(tmp,p);tmp=1;if(d>1) return d;}} }

注意tmp,把所有的abs(y-x)乘在一起,gcd顯然不變,并且減少了求gcd次數(shù)

?

主體2

void fin(ll p,int cnt){if(p==1||p<=ans) return;if(M_R(p)) {ans=max(ans,p);return;}ll d=P_R(p,cnt);while(d==p) --cnt,d=P_R(p,cnt);while(p%d==0) p/=d;fin(p,cnt);fin(d,cnt); }

如果要求質(zhì)因子,開個(gè)vector,最后去重即可

?

?

模板:

【模板】Pollard-Rho算法?

// luogu-judger-enable-o2 #include<bits/stdc++.h> #define reg register int #define il inline #define fi first #define se second #define mk(a,b) make_pair(a,b) #define numb (ch^'0') #define pb push_back #define solid const auto & #define enter cout<<endl #define pii pair<int,int> using namespace std; typedef long long ll; template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);} template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');} template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');} template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Modulo{ const int mod=998244353; int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;} void inc(int &x,int y){x=ad(x,y);} int mul(int x,int y){return (ll)x*y%mod;} void inc2(int &x,int y){x=mul(x,y);} int qm(int x,int y=mod-2){int ret=1;while(y){if(y&1) ret=mul(x,ret);x=mul(x,x);y>>=1;}return ret;} } //using namespace Modulo; namespace Miracle{ ll ans; ll qk(ll x,ll y,ll mod){ll d=((long double)x*y/mod);ll r=x*y-mod*d;return r<0?r+mod:(r>=mod?r-mod:r); } ll qm(ll x,ll y,ll mod){ll ret=1;while(y){if(y&1) ret=qk(ret,x,mod);x=qk(x,x,mod);y>>=1;}return ret; } ll ad(ll x,ll y,ll mod){return (x+y)>=mod?x+y-mod:x+y; } ll gcd(ll a,ll b){if(!a||!b) return a+b;#define ctz __builtin_ctzllint tmp=ctz(a|b);b>>=ctz(b);while(a){a>>=ctz(a);if(a<b) swap(a,b);a-=b;}return b<<tmp; } int pri[6]={2,3,5,7,11,61}; bool M_R(ll p){// cout<<"M_R "<<p<<endl;if(p==1) return false;if(p==2||p==3||p==5||p==7||p==11||p==61) return true;if(p%2==0||p%3==0||p%5==0||p%7==0) return false;int s=ctz(p-1);for(reg i=0;i<6;++i){ll a=pri[i];ll tmp=(p-1)>>s;ll now=qm(a,tmp,p);if(now==1||now==p-1) continue;for(reg j=1;j<=s;++j){ll las=now;now=qk(now,now,p);if(now==1&&las!=p-1&&las!=1) return false;}if(now!=1) return false;}return true; } ll P_R(ll p,ll c){// cout<<" P_R "<<p<<" "<<c<<endl; ll x,y,d;ll tmp=1,has=1,k=2;x=y=0;while(1){++has;x=ad(qk(x,x,p),c,p);tmp=qk(tmp,abs(y-x),p);if(x==y) return p;if(has==k){k<<=1;d=gcd(tmp,p);if(d>1) {// cout<<" ret "<<d<<endl;return d;}tmp=1;y=x;}} } void sol(ll n,int c){if(n==1||n<=ans) return;if(M_R(n)){ans=max(ans,n);return;}ll d=P_R(n,c);while(d==n) --c,d=P_R(n,c);while(n%d==0) n/=d;sol(n,c);sol(d,c); } int main(){int t;rd(t);srand(19260817);while(t--){ans=0;ll n;rd(n);sol(n,19260817);if(ans!=n) printf("%lld\n",ans);else printf("Prime\n");}return 0; }} signed main(){Miracle::main();return 0; }/*Author: *Miracle* */ View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/Miracevin/p/10858196.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的[学习笔记]Pollard-Rho的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美97| jzjzjz欧美丰满少妇 | 一区自拍| 一个人看的www视频在线观看 | 日本在线有码 | 国产精品久久婷婷六月丁香 | 淫五月天 | 日韩激情视频网站 | 一区二区三区四区精品 | 又黄又爽的视频在线观看 | 致命弯道8在线观看免费高清完整 | 男人天堂网站 | 国产成人精品网站 | 欧美精品亚洲精品 | 欧美精品二区三区四区免费看视频 | 国产又大又黄的视频 | 中文字幕av无码一区二区三区 | jizz中国少妇 | 91视频 - 88av | free女性xx性老大太 | 亚洲成人av一区二区 | 麻豆精品一区二区三区 | 亚洲色图二区 | 国产粉嫩呻吟一区二区三区 | 影音先锋亚洲一区 | 93久久精品日日躁夜夜躁欧美 | 中文字幕日产乱码中 | 欧美伦理一区 | 91系列在线观看 | 日本不卡一二 | 性色av蜜臀av浪潮av老女人 | 久久精品观看 | 在线免费h| 无码人妻精品一区二区蜜桃网站 | 免费成人在线播放 | 亚洲图片在线视频 | 日韩精品一区二区视频 | 国产欧美一区二区三区免费看 | www.av72| 思思99精品视频在线观看 | 久久久久久成人精品 | 成年人看的毛片 | 欧美日韩国产高清 | 久伊人网| 毛片视频免费观看 | 欧美不卡在线 | 尤物视频免费观看 | 少妇xxxxxx| 欧美色射 | 欧美激情性生活 | 亚洲欧美精品一区二区三区 | 亚洲综合激情另类小说区 | 日日狠狠久久 | 国产成人三级 | 在线看亚洲 | 国产毛片久久久久久 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 91官网入口 | 中文字幕一区二区三区四区欧美 | 秋霞在线一区二区 | 日韩黄色av | 国产视频第一区 | 午夜在线观看免费视频 | 色一情一伦一子一伦一区 | 丰满人妻一区二区三区在线 | 中文字幕乱码中文字幕 | 日韩v在线 | 欧洲亚洲视频 | 久久久久久久久蜜桃 | 国产一区二区色 | 久久久久亚洲av成人无码电影 | 色噜噜色综合 | 99热热| 国产午夜电影 | 亚洲色图日韩 | 国产一区色 | 日本三级吃奶头添泬无码苍井空 | 免费网站91| 韩国主播青草55部完整 | 国产男男gay体育生白袜 | 99久久精品国产成人一区二区 | 牛牛热在线视频 | 女人下边被添全过视频 | 日韩高清在线观看 | 7色av | 一色桃子juy758在线播放 | av黄色小说 | 免费成人深夜在线观看 | 黄网在线免费看 | 精品一区国产 | 九七影院在线观看免费观看电视 | 国产精品va | 欧美性色网站 | 亚洲视频黄色 | 韩日成人 | 图书馆的女友动漫在线观看 | 精品国产视频一区二区 | 综合亚洲色图 | 男人和女人日批视频 |