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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 2429 GCD LCM Inverse ★(pollard-ρ DFS枚举)

發(fā)布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 2429 GCD LCM Inverse ★(pollard-ρ DFS枚举) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接:http://poj.org/problem?id=2429 題目大意:給定gcd(a,b)和lcm(a,b)(<2^63),求a和b,如果有多種情況,輸出和最小的情況. ? 首先gcd(a,b) * lcm(a,b) = a*b,但是如果我們直接從a*b中分解因子的話,a*b是可能超過long long的,這樣就不好處理了. 我們可以先把gcd(a,b)都分給a,b,因為他們的因子中都要有g(shù)cd(a,b).于是現(xiàn)在還剩下lcm(a,b)/gcd(a,b)了,于是我們先用pollard-rho給他分解因子. 那么還有一個問題,能隨便分么?分出來的a,b雖然能保證a*b,但是能保證他們的gcd和lcm都是給定的么?不一定. 所以我們還需要注意分因數(shù)的過程中還要保證gcd和lcm的正確性. 但這個問題其實不難,因為a*b一定是不變的,所以我們只要保證gcd和lcm其中一個不變,另一個也就自然不變了.顯然保證gcd比較簡單. 我們知道lcm/gcd = p1^q1 * p2 ^q2 *……* pn^qn,其中p1,p2,……,pn是因子.我們只要保證某個數(shù)把某個pi全部取走,這樣他們除了先前取走的gcd外再無公因數(shù),則可保gcd正確.這樣的話,2^63內(nèi)的數(shù)所有不同的因子個數(shù)最多也就十幾個,枚舉無壓力. ? #include #include #include using namespace std;//return a * b % m unsigned long long mul_mod(unsigned long long a, unsigned long long b, unsigned long long m){//為了防止long long型a * b溢出,有時需要把乘法變加法//且因為暴力加法會超時要使用二分快速乘法模(模仿二分快速冪模……)unsigned long long res = 0, tmp = a % m;while(b){if (b & 1){res = res + tmp;res = (res >= m ? res - m : res);}b >>= 1;tmp <<= 1;tmp = (tmp >= m ? tmp - m : tmp);}return res; }//return a ^ b % m long long exp_mod(long long a, long long b, long long m){long long res = 1 % m, tmp = a % m;while(b){if (b & 1){//如果m在int范圍內(nèi)直接用下一式乘就可以,否則需要用下二式把乘法化加法,用快速乘法模//res = (res * t) % m;res = mul_mod(res, tmp, m);}//同上//t = t * t % m;tmp = mul_mod(tmp, tmp, m);b >>= 1;}return res; }/*-------------Miller-Rabin 素數(shù)測試 部分(用到上面mul_mod和exp_mod 素數(shù)return true)--------------*/ bool Miller_Rabin(long long n){int a[5] = {2, 3, 7, 61, 24251};//一般Miller_Rabin素數(shù)測試是隨機選擇100個a,這樣的錯誤率為0.25^100//但在OI&&ACM中,可以使用上面一組a,在這組底數(shù)下,10^16內(nèi)唯一的強偽素數(shù)為46,856,248,255,981if (n == 2)return true;if (n == 1 || (n & 1) == 0)return false;long long b = n - 1;for (int i = 0; i < 5; i ++){if (a[i] >= n)break;while((b & 1) == 0) b >>= 1;long long t = exp_mod(a[i], b, n);while(b != n - 1 && t != 1 && t != n - 1){t = mul_mod(t, t, n);b <<= 1;}if (t == n - 1 || (b & 1))continue;elsereturn false;}return true; } /*-------------Miller-Rabin 素數(shù)測試 部分--------------*//*-------------pollard-rho 大整數(shù)n因子分解 部分(用到mul_mod()和Miller-Rabin測試)--------------*/ long long factor[100]; //存n的素因子 long long nfactor, minfactor;long long gcd(long long a, long long b){return b ? gcd(b, a%b) : a; } void Factor(long long n); void pollard_rho(long long n){if (n <= 1)return ;if (Miller_Rabin(n)){factor[nfactor ++] = n;if (n < minfactor)minfactor = n;return ;}long long x = 2 % n, y = x, k = 2, i = 1;long long d = 1;while(true){i ++;x = (mul_mod(x, x, n) + 1) % n;d = gcd((y - x + n) % n, n);if (d > 1 && d < n){pollard_rho(d);pollard_rho(n/d);return ;}if (y == x){Factor(n);return ;}if (i == k){y = x;k <<= 1;}} } void Factor(long long n){//有時候RP不好 or n太小(比如n==4就試不出來……)用下面的pollard_rho沒弄出來,則暴力枚舉特殊處理一下long long d = 2;while(n % d != 0 && d * d <= n)d ++;pollard_rho(d);pollard_rho(n/d); } /*-------------pollard-rho 大整數(shù)n因子分解 部分--------------*/vector > vfac; void find(long long n, long long &a, long long &b){long long sum = (1LL << 62);long long suma;for (int i = 0; i < (1 << vfac.size()); i ++){long long res = 1;for (size_t k = 0; k < vfac.size(); k ++){if (i & (1 << k)){for (int p = 0; p < vfac[k].second; p ++){res *= vfac[k].first;}}}long long remain = n / res;if (res + remain < sum){sum = res + remain;a = suma = res;b = remain;}if (res + remain == sum){if (res < suma){a = suma = res;b = remain;}}}return ; } int main(){long long g, l, n;while(cin >> g >> l){n = l / g;vfac.clear();nfactor = 0;pollard_rho(n);long long tmp = n;for(int i = 0; i < nfactor; i ++){int facnum = 0;while(tmp % factor[i] == 0){tmp /= factor[i];facnum ++;}vfac.push_back(make_pair(factor[i], facnum));}long long a, b;find(n, a, b);cout << a * g << " " << b * g << endl;}return 0; } ?

轉(zhuǎn)載于:https://www.cnblogs.com/AbandonZHANG/archive/2013/01/20/4114201.html

總結(jié)

以上是生活随笔為你收集整理的POJ 2429 GCD LCM Inverse ★(pollard-ρ DFS枚举)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 白嫩初高中害羞小美女 | 中文字幕影片免费在线观看 | 国产情侣自拍小视频 | 日韩淫片 | 国产女人毛片 | 久久夜色精品国产噜噜亚洲av | 神马午夜av | 久久久久亚洲av片无码v | 亚洲黄色自拍 | 日韩中文字幕在线观看视频 | 在线三级av | 国产a视频精品免费观看 | 免费一区视频 | 久草福利在线观看 | 亚洲午夜久久 | 日韩丰满少妇 | 日韩人妻精品中文字幕 | 日韩欧美91 | 亚洲拍拍视频 | 久久精品专区 | 国产一区二区免费 | 久久久久成人精品 | www,四虎| 久久国产精品久久国产精品 | 亚洲成人tv | 中文字幕亚洲一区二区三区五十路 | 伊人久久综合影院 | 免费一级特黄特色大片 | 波多野结衣导航 | 动漫av在线免费观看 | 少妇裸体挤奶汁奶水视频 | 啪网址 | 精品亚洲一区二区三区四区五区 | 国产日日干| 成人xx视频| 色悠久久久| 中文字幕有码在线视频 | 天天碰天天 | 国产黄色在线看 | 性欧美极品另类 | 色妞欧美 | 国产美女激情 | 天堂网亚洲 | 亚洲aa | 午夜一区二区三区在线 | www色综合 | 爱爱小视频网站 | 国产传媒第一页 | 动漫大乳美女 | 91操人| 操色网 | 亚洲人 女学生 打屁股 得到 | www.久久精品 | 无码精品一区二区三区在线播放 | 亚州av成人| 免费av免费看 | 女女同性高清片免费看 | 爱吃波客今天最新视频 | 国产精品99久久久久久大便 | 中文精品无码中文字幕无码专区 | 51免费看成人啪啪片 | 美女三级网站 | 国产小毛片 | 精品999久久久 | 少妇按摩一区二区三区 | 播放黄色一级片 | 青青青国产在线 | 天天色宗合 | 亚洲精品久久夜色撩人男男小说 | 少妇人妻真实偷人精品视频 | 97精品国产97久久久久久春色 | 欧美一区二区日韩 | 伦理片中文字幕 | 三级在线看中文字幕完整版 | 久久好色 | 欧美三p| 国产精品成 | 天堂中文在线网 | 精品爱爱 | 性久久久久久久久 | 亚洲天堂影视 | 日韩黄色影视 | 亚洲精品成人a | 日韩欧美高清片 | 粉色视频免费观看 | 91视频在线观看视频 | 男生操女生网站 | 精品人妻无码一区二区性色 | а√天堂资源在线 | 夜夜天天 | 国产青草视频在线观看 | 国模无码视频一区二区三区 | 97爱爱视频| 亚洲色图久久 | 女人18毛片一区二区三区 | 99热在线这里只有精品 | 国产xxxxx视频 | 97国产成人无码精品久久久 | 99综合色|