Reuleaux triangle: Difference between revisions

From formulasearchengine
Jump to navigation Jump to search
en>Loraof
correcting year in citation
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{about|the integer factorization algorithm|the discrete logarithm algorithm|Pollard's rho algorithm for logarithms}}
Hi there! :) My name is Margareta, I'm a student studying Agriculture and Life Sciences from Mcminnville, United States.<br><br>my site ... bflape.com ([https://www.bflape.com/groups/the-most-effective-anti-aging-cream-from-the-relaxation/ helpful site])
 
'''Pollard's rho algorithm''' is a general-purpose [[integer factorization]] [[algorithm]]. It was invented by [[John Pollard (mathematician)|John Pollard]] in 1975.<ref>{{Citation |last=Pollard |first=J. M. |year=1975 |title=A Monte Carlo method for factorization |journal=BIT Numerical Mathematics |volume=15 |issue=3 |pages=331–334 |url= |issn= }}</ref> It is particularly effective at splitting [[composite numbers]] with small factors.
 
==Core ideas==
The rho algorithm is based on [[Floyd's cycle-finding algorithm]] and on the observation that (as in the [[birthday problem]]) two numbers ''x'' and ''y'' are [[Congruence relation|congruent modulo]] ''p'' with probability 0.5 after <math>1.177\sqrt{p}</math> numbers have been randomly chosen. If ''p'' is a factor of ''n'', the integer we are aiming to factor, then <math>p \le \gcd \left( x-y,n \right) \le n</math> since ''p'' divides both <math>x-y</math> and <math>n</math>.
 
The rho algorithm therefore uses a function modulo ''n'' as a generator of a [[pseudo-random sequence]]. It runs one sequence twice as "fast" as the other; i.e. for every iteration made by one copy of the sequence, the other copy makes two iterations. Let ''x'' be the current state of one sequence and ''y'' be the current state of the other. The [[greatest common divisor|GCD]] of |''x'' &minus; ''y''| and ''n'' is taken at each step. If this GCD ever comes to ''n'', then the algorithm terminates with failure, since this means ''x'' = ''y'' and therefore, by Floyd's cycle-finding algorithm, the sequence has cycled and continuing any further would only be repeating previous work.
 
==Algorithm==
The algorithm takes as its inputs ''n'', the integer to be factored; and ''f'', a function with the property that ''x=y mod p'' implies ''f(x)=f(y) mod p''. In the original algorithm, ''f''(''x'')&nbsp;=&nbsp;''x''<sup>2</sup>&nbsp;&minus;&nbsp;1&nbsp;(mod&nbsp;''n''). The output is either a non-trivial factor of ''n'', or failure. It performs the following steps:<ref>{{citation |last=Cormen |first=Thomas H. |authorlink=Thomas H. Cormen |last2=Leiserson |first2=Charles E. |authorlink2=Charles E. Leiserson |last3=Rivest |first3=Ronald L. |authorlink3=Ronald L. Rivest |last4=Stein |first4=Clifford |authorlink4=Clifford Stein |lastauthoramp=yes |chapter=Section 31.9: Integer factorization |title=[[Introduction to Algorithms]] |year=2001 |edition=Second |publisher=MIT Press |location=Cambridge, MA |isbn=0-262-03293-7 |pages=896–901 }} (this section discusses only Pollard's rho algorithm).</ref>
# ''x'' ← 2, ''y'' ← 2; ''d'' ← 1
# While ''d'' = 1:
## ''x'' ← ''f''(''x'')
## ''y'' ← ''f''(''f''(''y''))
## ''d'' ← GCD(|''x'' &minus; ''y''|, ''n'')
# If ''d'' = ''n'', return failure.
# Else, return ''d''.
 
Note that this algorithm may not find the factors and will return failure for composite ''n''. In that case, use a different ''f''(''x'') and try again. Note, as well, that this algorithm does not work when ''n'' is a prime number, since, in this case, ''d'' will be always 1. The algorithm is so-called because the values of ''f'' enter a period (mod ''d''), resulting in a ρ shape when diagrammed.
 
== Variants ==
In 1980, [[Richard Brent (scientist)|Richard Brent]] published a faster variant of the rho algorithm. He used the same core ideas as Pollard but a different method of cycle detection, replacing [[Floyd's cycle-finding algorithm]] with the related [[Cycle_detection#Brent.27s_algorithm|Brent's cycle finding method]].<ref>{{Citation |last=Brent |first=Richard P. |authorlink=Richard Brent (scientist) |year=1980 |title=An Improved Monte Carlo Factorization Algorithm |journal=BIT |volume=20 |issue= |pages=176–184 |url=http://maths-people.anu.edu.au/~brent/pub/pub051.html |issn= |doi=10.1007/BF01933190}}</ref>
 
A further improvement was made by Pollard and Brent. They observed that if <math>\gcd (a,n) >1</math>, then also <math>\gcd (ab,n)>1</math> for any positive integer ''b''. In particular, instead of computing <math>\gcd (|x-y|,n)</math> at every step, it suffices to define ''z'' as the product of 100 consecutive <math>|x-y|</math> terms modulo ''n'', and then compute a single <math>\gcd (z,n)</math>. A major speed up results as 100 ''gcd'' steps are replaced with 99 multiplications modulo ''n'' and a single ''gcd''. Occasionally it may cause the algorithm to fail by introducing a repeated factor, for instance when ''n'' is a square. But it then suffices to go back to the previous gcd term, where <math>\gcd(z,n)=1</math>, and use the regular Rho algorithm from there.
 
==Application==
The algorithm is very fast for numbers with small factors, but slower in cases where all factors are large. The rho algorithm's most remarkable success has been the factorization of the eighth [[Fermat number]] (''F''<sub>8</sub>) by Pollard and Brent. They used Brent's variant of the algorithm, which found a previously unknown prime factor. The complete factorization of ''F''<sub>8</sub> took, in total, 2 hours on a [[UNIVAC]] [[UNIVAC 1110|1100/42]].
 
==Example factorization==
Let ''n'' = 8051 and ''f''(''x'') = (''x''<sup>2</sup> + 1 ) mod 8051.
{| class="wikitable"
|-
! width=30 | ''i'' || width=60 | ''x''<sub>''i''</sub> || width=60 | ''y''<sub>''i''</sub> || GCD({{abs|''x''<sub>''i''</sub> &minus; ''y''<sub>''i''</sub>}}, 8051)
|-
| 1 || 5 || 26 || 1
|-
| 2 || 26 || 7474 || 1
|-
| 3 || 677 || 871 || 97
|}
 
97 is a non-trivial factor of 8051. Other values of ''c'' may give the cofactor (83) instead of 97.
 
== Complexity ==
 
The algorithm offers a trade-off between its running time and the probability that it finds a factor.
If the squaring function used in the Pollard rho method were replaced by a [[random function]], it would follow that, for all ''n'', running the algorithm for [[Big O notation|O]](n<sup>1/4</sup>) steps would yield a factor with probability at most 1/2. It is believed that the same analysis applies as well to the actual rho algorithm, but this is a heuristic claim, and rigorous analysis of the algorithm remains open.<ref>{{citation|title=Mathematics of Public Key Cryptography|first=Steven D.|last=Galbraith|publisher=Cambridge University Press|year=2012|isbn=9781107013926|contribution=14.2.5 Towards a rigorous analysis of Pollard rho|pages=272–273|url=http://books.google.com/books?id=owd76BElvosC&pg=PA272}}.</ref>
 
== References ==
{{reflist}}
 
==Additional reading==
*{{Citation |last=Katz |first=Jonathan |last2=Lindell |first2=Yehuda |chapter=Chapter 8 |title=Introduction to Modern Cryptography | year=2007 |publisher=CRC Press}}
 
==External links==
* {{MathWorld|title=Pollard rho Factorization Method|id=PollardRhoFactorizationMethod}}
<!-- Dead link: * [http://www.patrickkonsor.com/code/ Java Implementation] -->
* [http://www.cs.princeton.edu/introcs/78crypto/PollardRho.java.html Java Implementation]
 
{{number theoretic algorithms}}
 
{{DEFAULTSORT:Pollard's Rho Algorithm}}
[[Category:Integer factorization algorithms]]

Latest revision as of 03:38, 30 September 2014

Hi there! :) My name is Margareta, I'm a student studying Agriculture and Life Sciences from Mcminnville, United States.

my site ... bflape.com (helpful site)