1. 程式人生 > >整數因子分解的Pollard-rho方法

整數因子分解的Pollard-rho方法

(defun pollard-rho (n)
  (let ((a (random n))
    (x (random n))
    (y 0))
    (setf y (mod (+ (expt x 2) a) n))
    (loop for i from 1 do
      (if (and (/= 1 (gcd (- y x) n)) (/= n (gcd (- y x) n)))
          (return))
      (setf x (mod (+ (expt x 2) a) n))
      (setf y (mod (+ (expt (mod (+ (expt y 2) a) n) 2) a) n)))
    (gcd (- y x) n)))

相關推薦

整數因子分解Pollard-rho方法

(defun pollard-rho (n)   (let ((a (random n))     (x (random n))     (y 0))     (setf y (mod (+ (expt x 2) a) n))     (loop for i from 1 do       (if (and

大數因數分解pollard rho

快速乘&快速冪 費馬小定理 二次探測定理 pollor rho miller rabin 在介紹pollard rho演算法之前,先普及一下快速乘法及快速冪,因為大數的乘法之類的可能會爆long long; #include<cstdi

Lenstra因子分解橢圓曲線方法

(defvar *prime-list* (make-list 0)) (defvar *B* 12000) (defun initial (N)   (setf *B* N)) (defun generate ()      ;;;生成*B*以下的素數列表   (loop while (pop *prime

整數因子分解問題

題目描述 大於1 的正整數n可以分解為:n=x1*x2*…*xm。 例如,當n=12 時,共有8 種不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 對於給定的正整數

C++實現的大整數分解Pollard's rho演算法程式

C++語言程式程式碼如下: /* C++ program to find a prime factor of composite using Pollard's Rho algorithm */ #include<bits/stdc++.h> usin

Pollardrho啟發式因子分解演算法 & [CodeVS 4939] 尤拉函式:Miller-Rabin + Pollard-rho 質因數分解

Pollard的rho啟發式因子分解演算法用於給出整數的一個因子。在一定的合理假設下,如果n有一個因子p,可在O(p√)的期望時間內可找出n的一個因子p。 關於其複雜度,Wikipedia是這樣敘述的: If the pseudo random num

【模板】Pollard-Rho分解質因數

參考題目:BZOJ3667 解析: 板子題解析看心情更新 BB:在這份板子裡面你看到的所有卡常痕跡都是為了那個毒瘤資料的洛谷版題(雖然最後還是沒有過。。。) UPD: 終於找到洛谷上面過不了的原因了。 新的能過的程式碼放在最下面,大家可以自己找一下不同,主

poj1811(pollard-rho求一個大數(64位)的最小因子)

題意:給定一個64位整數,問是否為質數,如果不是,則輸出其最小因子。 Pollard-rho分解的素數會有重複! 分析: 經典題!! 數學題 miller_rabbin素數判定。若不是,則pollard_rho分解質因子,找到最小即可。 Miller-rabin Mil

Pollard-Rho演算法--大數分解

其實剛開始知道這個演算法時,我以為需要字串操作什麼的,畢竟是大數嘛,可這傢伙只用了個long long,無語了....long long int,能叫大數嗎,連2^100次方都處理不了。說是這樣說,這個演算法已經不錯了,複雜度為O(n^1/4), 貌似目前學界沒有找到特別好的

Miller-rabin素性測試與pollard-rho快速質因數分解

~~~~ Miller-Rabin 可以在O(log n)的時間內檢測一個數是否為質數。 理論上是一個概率演算法,但在一定範圍以內的數經過驗證全部可以判出來。 所以OI範圍內可以視作是一個確定演算法。 費馬小定理 若p是質數,且a<pa

Pollard Rho 大數分解

這裡的a和b就是用函式f=x^2+1生成的,b=a^2+1. 實現程式碼:#include <iostream> #include <cstdio> #include <stdlib.h> #include <cstring> #include <algo

簡述大數分解演算法Pollard RhoPollard p-1

大數分解問題其實至今都是一個世界級難題,最常見的分解法是從2一直找到sqr(N),作為一個密碼學專業的學生,每次看到別人這麼做來進行因子分解,自己都控制不住想要制止他,因為這個演算法的效率簡直太太太太太低了。 於是,簡單介紹一下牛逼哄哄的Pollard演算法,

整數分解費馬方法

寫在前面:   這篇部落格是我在[◹]對 算術基本定理 的研究 中的一部分   整數分解費馬方法   整數分解費馬方法與費馬小定理無關   原理:     任何一個正整數n都能拆成n==2k*a的形式,其中a為一個奇數     我們在a上搞事情:       

算術基本定理------比1大的整數N的素因子分解是唯一的

算術基本定理:每一個比1大的整數N只能有一種方式分解成素數的乘積。(不考慮因子的次序) 這個命題初看起來似乎是很明顯的,但它決不是不證自明的。本篇博文給出兩種證明方法。 證明一:反證

整數因子分解

感謝! 一、相關概念  素數:又叫質數,就是隻能被1和自己整除的整數。例如:2,3,5,7……. 合數:與素數相對,即除了能被1和自己整除還能被其他整數整除的整數。例如:4,6,8,9…… 注意:1就不是素數,也不是合數。 定理:任意一個正整數都能分解成若干個素數乘

質因數分解的一些討論(Pollard-Rho演算法)

一類問題:對於一個整數n,將n進行質因數分解 演算法1: 根據定義直接列舉,直接給出程式碼: void Decom(int n) { int i; vector<in

[ACM] HDU 3398 String (從座標0,0走到m,n且不能與y=x-1相交的方法數,整數唯一分解定理)

String Problem Description Recently, lxhgww received a task : to generate strings contain '0's and '1's only, in which '0' appears exact

Pollard Rho大質數分解學習筆記

href 矛盾 while 是我 ret 假設 itl [] 結束 目錄 問題 流程 代碼 生日悖論 end 問題 給定n,要

每日一小練——因子分解

char num class font col margin 技術 getchar lin 上得廳堂,下得廚房,寫得代碼。翻得圍墻,歡迎來到睿不可擋的每日一小練! 題目:因子分解 內容:編寫一個程序,讀入一個正整數,把它的全部質因子找出來。比如輸入的1

luogu P2043 質因子分解

code turn while 進行 輸入 left bsp sca main 題目描述 對N!進行質因子分解。 輸入輸出格式 輸入格式: 輸入數據僅有一行包含一個正整數N,N<=10000。 輸出格式: 輸出