फ़र्मेट की गुणनखंडन विधि: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
फ़र्मेट की गुणनखंडन विधि, जिसका नाम [[पियरे डी फ़र्मेट]] के नाम पर रखा गया है, दो वर्गों के अंतर के रूप में एक सम और विषम संख्या [[पूर्णांक]] के प्रतिनिधित्व पर आधारित होती है: | फ़र्मेट की गुणनखंडन विधि, जिसका नाम [[पियरे डी फ़र्मेट]] के नाम पर रखा गया है, दो वर्गों के अंतर के रूप में एक सम और विषम संख्या [[पूर्णांक]] के प्रतिनिधित्व पर आधारित होती है: | ||
:<math>N = a^2 - b^2.</math> | :<math>N = a^2 - b^2.</math> | ||
वह अंतर [[बीजगणित|बीजगणितीय]] रूप से गुणनखंडनीय <math>(a+b)(a-b)</math> है ; यदि कोई भी कारक एक के समान्तर नहीं होता है, तो यह N का उचित गुणनखंड होता है। | वह अंतर [[बीजगणित|बीजगणितीय]] रूप से गुणनखंडनीय <math>(a+b)(a-b)</math> होता है; यदि कोई भी कारक एक के समान्तर नहीं होता है, तो यह N का उचित गुणनखंड होता है। | ||
प्रत्येक विषम संख्या का एक ऐसा प्रतिनिधित्व होता है। वास्तव में, यदि <math>N=cd</math> होता है तो, यह N का एक गुणनखंड होता है | प्रत्येक विषम संख्या का एक ऐसा प्रतिनिधित्व होता है। वास्तव में, यदि <math>N=cd</math> होता है तो, यह N का एक गुणनखंड होता है | ||
Line 10: | Line 10: | ||
==मूल विधि== | ==मूल विधि== | ||
कोई व्यक्ति a के विभिन्न मूल्यों की जांच करता है यह आशा करते हुए <math>a^2-N = b^2</math>होता है, एक वर्ग। फॉर्म फ़ैक्टर(AND): // N विषम a ← होना चाहिए {{Not a typo|ceiling(sqrt(N))}} | कोई व्यक्ति a के विभिन्न मूल्यों की जांच करता है यह आशा करते हुए <math>a^2-N = b^2</math> होता है, एक वर्ग। फॉर्म फ़ैक्टर(AND): // N विषम a ← होना चाहिए {{Not a typo|ceiling(sqrt(N))}} | ||
फॉर्म फ़ैक्टर(N): ''// N विषम होना चाहिए'' | |||
a ← सीलिंग(sqrt(N)) | |||
b2 ← a*a - N | b2 ← a*a - N | ||
तब तक दोहराएँ जब तक b2 एक वर्ग न हो जाए: | |||
a ← a + 1 | |||
b2 ← a*a - N | b2 ← a*a - N | ||
// | // समान रूप से: | ||
// | // b2 ← b2 + 2*a + 1 | ||
// | // a ← a + 1 | ||
'''रीटर्न''' a - sqrt(b2) ''// or a + sqrt(b2)'' | |||
उदाहरण के लिए, कारक के लिए <math>N = 5959</math>, a के लिए पहला प्रयास {{math|5959}} का वर्गमूल है जिसे अगले पूर्णांक तक पूर्णांकित किया जाता है, जिसका मान {{math|78}} होता है। तब, <math>b^2 = 78^2-5959 = 125</math> होता है। चूँकि 125 एक वर्ग नहीं होता है, इसलिए a का मान 1 बढ़ाकर दूसरा प्रयास किया जाता है। दूसरा प्रयास भी विफल हो जाता है, क्योंकि 282 फिर से एक वर्ग नहीं होता है। | |||
उदाहरण के लिए, कारक के लिए <math>N = 5959</math>, a के लिए पहला प्रयास | |||
{| class="wikitable" style="text-align:right;" | {| class="wikitable" style="text-align:right;" | ||
Line 35: | Line 37: | ||
| 11.18 || 16.79 || 21 | | 11.18 || 16.79 || 21 | ||
|} | |} | ||
तीसरे प्रयास से 441 का पूर्ण वर्ग बनता है। तो, <math>a = 80</math>, <math>b = 21</math>होता है, और {{math|5959}} के कारक <math>a - b = 59</math> और <math>a + b = 101</math> होते है। | |||
मान लीजिए N के दो से अधिक अभाज्य गुणनखंड हैं। वह प्रक्रिया सबसे पहले a और b के न्यूनतम मानों के साथ गुणनखंड | मान लीजिए N के दो से अधिक अभाज्य गुणनखंड होते हैं। वह प्रक्रिया सबसे पहले a और b के न्यूनतम मानों के साथ गुणनखंड प्राप्त करती है। जो, <math>a + b</math> सबसे छोटा कारक ≥ N का वर्गमूल होता है, इत्यादि <math>a - b = N/(a + b)</math> सबसे बड़ा कारक ≤ रूट-''मूल होता'' है। यदि प्रक्रिया प्राप्त हो जाती है तो <math>N=1 \cdot N</math> होता है इससे पता चलता है कि N अभाज्य होता है। | ||
<math>N = cd</math> के लिए, मान लीजिए कि c सबसे बड़ा उपमूल कारक होता है। <math>a = (c+d)/2</math>, इसलिए चरणों की संख्या न्यूनाधिक निम्न प्रकार है <math>(c + d)/2 - \sqrt N = (\sqrt d - \sqrt c)^2 / 2 = (\sqrt N - c)^2 / 2c</math>. | |||
यदि N अभाज्य है (तो वह <math>c = 1</math>), हमें | यदि N अभाज्य होता है (तो वह <math>c = 1</math> होती है), हमें <math>O(N)</math> उपाय की आवश्कता होती है। यह आदिमता सिद्ध करने का एक अनुपयुक्त विधि है। परन्तु यदि N का कोई गुणनखंड इसके वर्गमूल के समीप होता है, तो विधि शीघ्रता से कार्य करती है। अधिक स्पष्ट रूप से, यदि c का अंतर <math>{\left(4N\right)}^{1/4}</math> से कम होता है तब <math>\sqrt N</math>, विधि को मात्र एक चरण की आवश्यकता होती है; यह N के आकार से स्वतंत्र होता है। | ||
==फर्मेट और परीक्षण प्रभाग== | ==फर्मेट और परीक्षण प्रभाग== | ||
अभाज्य संख्या | अभाज्य संख्या {{nowrap|1=''N'' = 2345678917}} का गुणनखंड करने का प्रयास करने पर विचार करें , परन्तु ''b'' और{{nowrap|''a'' − ''b''}} की भी गणना करें। इस प्रकार से यह <math>\sqrt{N}</math> से ऊपर जाते है, हम इसे निम्न प्रकार सारणीबद्ध कर सकते हैं: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 59: | Line 61: | ||
| 48,156.3 || 48,017.5 || 47,915.1 || 47,830.1 | | 48,156.3 || 48,017.5 || 47,915.1 || 47,830.1 | ||
|} | |} | ||
व्यवहार में, कोई उस अंतिम पंक्ति से तब तक | व्यवहार में, कोई उस अंतिम पंक्ति से तब तक उत्तेजित नहीं होता है जब तक कि b एक पूर्णांक न हो जाएँ। परन्तु ध्यान दें कि यदि N के पास उपरोक्त उपमूल कारक <math>a-b=47830.1</math> होता है तो इसका अर्थ यह होता है की फ़र्मेट की विधि ने इसे प्रारम्भ में ही प्राप्त कर लिया होता है। | ||
परीक्षण प्रभाग सामान्यतः 48,432 तक प्रयास | परीक्षण प्रभाग सामान्यतः 48,432 तक प्रयास करता है; परन्तु मात्र चार फ़र्मेट चरणों के बाद, हमें एक कारक अन्वेषण या प्रारंभिकता सिद्ध करने के लिए मात्र 47830 तक विभाजित करने की आवश्यकता होती है। | ||
यह सब एक संयुक्त फैक्टरिंग विधि का सुझाव देता है। कुछ बाध्य | यह सब एक संयुक्त फैक्टरिंग विधि का सुझाव देता है। कुछ बाध्य <math>c > \sqrt{N}</math> का चयन किया जाता ; <math>\sqrt{N}</math> और <math>c</math> के मध्य के कारकों के लिए फ़र्मेट विधि का उपयोग किया जाता है। यह ट्रायल डिवीजन के लिए एक बाध्यता देता है जो कि <math>c - \sqrt{c^2 - N}</math> होता है। उपरोक्त उदाहरण में, <math>c = 48436</math> के साथ परीक्षण प्रभाग की सीमा 47830 होती है। एक उचित विकल्प <math>c = 55000</math> हो सकता है जिसको सीमा 28937 होती है। | ||
इस संबंध में, फ़र्मेट की विधि कम | इस संबंध में, फ़र्मेट की विधि कम प्रतिफल देती है। इस बिंदु तक पहुचने से पहले कोई निश्चित रूप से रुक जाता है: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 81: | Line 83: | ||
|} | |} | ||
== | == सीईव में सुधार == | ||
<math>N=2345678917</math> के लिए तालिका पर विचार करते समय, कोई तुरंत बता सकता है कि इनमें से कोई भी मान <math>b^2</math> वर्ग नहीं होता हैं: | |||
{| class="wikitable" style="text-align:right;" | {| class="wikitable" style="text-align:right;" | ||
Line 95: | Line 97: | ||
| 276.7 || 416.5 || 519.9 || 605.9 | | 276.7 || 416.5 || 519.9 || 605.9 | ||
|} | |} | ||
<math>a^2-N</math> के सभी वर्गमूलों की गणना करना आवश्यक नहीं होता है, और न ही {{mvar|a}} के लिए सभी मानों की जाँच करने आवश्कता होती है । वर्ग सदैव 0, 1, 4, 5, 9, 16 [[मॉड्यूलर अंकगणित]] 20 के अनुरूप होते हैं। प्रत्येक वृद्धि के साथ {{mvar|a}} 10 से मान दोहराए जाते हैं । इस उदाहरण में, N 17 मॉड 20 होता है, इसलिए 17 मॉड 20को घटाया (या 3 जोड़ें) जाता है, <math>a^2-N</math> इन मानों के लिए 3, 4, 7, 8, 12, और 19 मॉड्यूल 20 उत्पन्न करता है। यह स्पष्ट है कि इस सूची में से मात्र 4 ही एक वर्ग हो सकते हैं। इस प्रकार, <math>a^2</math> 1 मॉड 20 होना चाहिए, जिसका अर्थ {{mvar|a}} 1, 9, 11 या 19 मॉड 20 होता है; यह एक <math>b^2</math> का उत्पादन करेगा जो 4 मॉड 20 में समाप्त होता है और, यदि यह वर्गाकार होता है, तो {{mvar|b}}<sup>2</sup> या 8 मॉड 10 में समाप्त हो जाता है। | |||
इसे किसी भी मापांक के साथ निष्पादित किया जा सकता है। | इसे किसी भी मापांक के साथ निष्पादित किया जा सकता है। <math>N=2345678917</math> का उपयोग किया जाता हैं , | ||
{| | {| | ||
|- | |- | ||
Line 116: | Line 118: | ||
| ||and {{mvar|a}} must be||4 or 5 modulo 9 | | ||and {{mvar|a}} must be||4 or 5 modulo 9 | ||
|} | |} | ||
कोई | कोई सामान्यतः प्रत्येक मापांक के लिए एक अलग अभाज्य की शक्ति का चयन करता है। | ||
a-मानों (प्रारंभ, अंत और चरण) और एक मापांक के अनुक्रम को देखते हुए, कोई इस प्रकार आगे बढ़ सकता है: | |||
फ़र्मेटसीव(N, astart, aend, astep, modulus) | |||
a ← astart | |||
'''do''' modulus '''times''': | |||
b2 ← a*a - N | |||
'''if''' b2 is a square, modulo modulus: | |||
फ़र्मेटसीव(N, a, aend, astep * modulus, NextModulus) | |||
'''endif''' | |||
a ← a + astep | |||
'''enddo''' | |||
[[रिकर्सन (कंप्यूटर विज्ञान)]] को तब रोक दिया जाता है जब कुछ ''a''-मान शेष रह जाते हैं; तभी ({{Not a typo|aend-astart}})/{{Not a typo|astep}} छोटा होता है। इसके अतिरिक्त, क्योंकि a का चरण-आकार स्थिर होता है, कोई भी जोड़ के साथ क्रमिक b2 की गणना कर सकता है। | |||
==गुणक सुधार== | |||
फ़र्मेट की विधि तब सबसे अच्छा काम करती है जब कोई कारक N के वर्गमूल के निकट होता है। | |||
फ़र्मेट की विधि तब | यदि दो कारकों का अनुमानित अनुपात (<math>d/c</math>) ज्ञात होता है, तो एक परिमेय संख्या <math>v/u</math> उस मूल्य के निकट चुना जा सकता है। <math>Nuv = cv \cdot du</math>, और नुव पर लागू फ़र्मेट की विधि, कारकों <math>cv</math> और <math>du</math> शीग्रता से पता लगाती है। तब <math>\gcd(N,cv)=c</math> और <math>\gcd(N,du)=d</math> ओता है। (जब तक कि c ''u को'' विभाजित न करे या d, v को विभाजित न करे।) | ||
यदि | सामान्यतः, यदि अनुपात ज्ञात नहीं है, तो विभिन्न <math>u/v</math> मूल्यों के लिए प्रयास की जा सकता है, और प्रत्येक परिणामी एनयूवी को कारक बनाने का प्रयास करें। आर. लेहमैन ने ऐसा करने के लिए एक व्यवस्थित तरीका तैयार किया, ताकि फ़र्मेट का प्लस ट्रायल डिवीजन एन को कारक बना सके <math>O(N^{1/3})</math> समय।<ref>{{cite journal |last=Lehman |first=R. Sherman |year=1974 |title=बड़े पूर्णांकों का गुणनखंडन|journal=[[Mathematics of Computation]] |doi=10.2307/2005940 |doi-access=free |jstor=2005940 |volume=28 |issue=126 |pages=637–646 |url=https://www.ams.org/journals/mcom/1974-28-126/S0025-5718-1974-0340163-2/S0025-5718-1974-0340163-2.pdf}}</ref> | ||
आम तौर पर, यदि अनुपात ज्ञात नहीं है, तो विभिन्न | आम तौर पर, यदि अनुपात ज्ञात नहीं है, तो विभिन्न यू/वी मानों की कोशिश की जा सकती है, और प्रत्येक परिणामी एनयूवी को कारक बनाने का प्रयास किया जा सकता है। आर. लेहमैन ने ऐसा करने के लिए एक व्यवस्थित तरीका तैयार किया, ताकि फ़र्मेट का प्लस ट्रायल डिवीजन 3)O(N^{{1/3}}) समय में N का कारक बन सके।[1] | ||
== अन्य सुधार == | == अन्य सुधार == | ||
फ़र्मेट की गुणनखंडन विधि के मौलिक विचार [[द्विघात छलनी]] और सामान्य संख्या क्षेत्र चलनी के आधार हैं, जो बड़े [[सेमीप्राइम्स]] के गुणनखंडन के लिए सबसे प्रसिद्ध एल्गोरिदम हैं, जो सबसे खराब स्थिति वाले हैं। फ़र्मेट की गुणनखंडन विधि की तुलना में द्विघात छलनी द्वारा किया जाने वाला प्राथमिक सुधार यह है कि अनुक्रम में | फ़र्मेट की गुणनखंडन विधि के मौलिक विचार [[द्विघात छलनी]] और सामान्य संख्या क्षेत्र चलनी के आधार हैं, जो बड़े [[सेमीप्राइम्स]] के गुणनखंडन के लिए सबसे प्रसिद्ध एल्गोरिदम हैं, जो सबसे खराब स्थिति वाले हैं। फ़र्मेट की गुणनखंडन विधि की तुलना में द्विघात छलनी द्वारा किया जाने वाला प्राथमिक सुधार यह है कि अनुक्रम में मात्र एक वर्ग खोजने के बजाय <math>a^2 - n</math>, यह इस अनुक्रम के तत्वों का एक उपसमूह ढूंढता है जिसका उत्पाद एक वर्ग है, और यह इसे अत्यधिक कुशल तरीके से करता है। अंतिम परिणाम वही है: वर्ग मॉड n का अंतर, जो कि यदि गैर-तुच्छ है, तो कारक n के लिए उपयोग किया जा सकता है। | ||
==यह भी देखें== | ==यह भी देखें== |
Revision as of 00:28, 24 July 2023
फ़र्मेट की गुणनखंडन विधि, जिसका नाम पियरे डी फ़र्मेट के नाम पर रखा गया है, दो वर्गों के अंतर के रूप में एक सम और विषम संख्या पूर्णांक के प्रतिनिधित्व पर आधारित होती है:
वह अंतर बीजगणितीय रूप से गुणनखंडनीय होता है; यदि कोई भी कारक एक के समान्तर नहीं होता है, तो यह N का उचित गुणनखंड होता है।
प्रत्येक विषम संख्या का एक ऐसा प्रतिनिधित्व होता है। वास्तव में, यदि होता है तो, यह N का एक गुणनखंड होता है
चूँकि N विषम होता है, तो c और d भी विषम होता हैं, इसलिए वे आधे पूर्णांक होते हैं। (चार का गुणज भी वर्गों का अंतर होता है: मान लीजिए कि c और d सम हैं।)
अपने सरलतम रूप में, फ़र्मेट की विधि परीक्षण प्रभाग (सबसे अनुपयुक्त स्थिति) से भी धीमी हो सकती है। यघपि, परीक्षण प्रभाग और फ़र्मेट का संयोजन किसी की तुलना में अधिक प्रभावी होते है।
मूल विधि
कोई व्यक्ति a के विभिन्न मूल्यों की जांच करता है यह आशा करते हुए होता है, एक वर्ग। फॉर्म फ़ैक्टर(AND): // N विषम a ← होना चाहिए ceiling(sqrt(N))
फॉर्म फ़ैक्टर(N): // N विषम होना चाहिए
a ← सीलिंग(sqrt(N)) b2 ← a*a - N तब तक दोहराएँ जब तक b2 एक वर्ग न हो जाए: a ← a + 1 b2 ← a*a - N // समान रूप से: // b2 ← b2 + 2*a + 1 // a ← a + 1 रीटर्न a - sqrt(b2) // or a + sqrt(b2)
उदाहरण के लिए, कारक के लिए , a के लिए पहला प्रयास 5959 का वर्गमूल है जिसे अगले पूर्णांक तक पूर्णांकित किया जाता है, जिसका मान 78 होता है। तब, होता है। चूँकि 125 एक वर्ग नहीं होता है, इसलिए a का मान 1 बढ़ाकर दूसरा प्रयास किया जाता है। दूसरा प्रयास भी विफल हो जाता है, क्योंकि 282 फिर से एक वर्ग नहीं होता है।
Try: | 1 | 2 | 3 |
---|---|---|---|
a | 78 | 79 | 80 |
b2 | 125 | 282 | 441 |
b | 11.18 | 16.79 | 21 |
तीसरे प्रयास से 441 का पूर्ण वर्ग बनता है। तो, , होता है, और 5959 के कारक और होते है।
मान लीजिए N के दो से अधिक अभाज्य गुणनखंड होते हैं। वह प्रक्रिया सबसे पहले a और b के न्यूनतम मानों के साथ गुणनखंड प्राप्त करती है। जो, सबसे छोटा कारक ≥ N का वर्गमूल होता है, इत्यादि सबसे बड़ा कारक ≤ रूट-मूल होता है। यदि प्रक्रिया प्राप्त हो जाती है तो होता है इससे पता चलता है कि N अभाज्य होता है।
के लिए, मान लीजिए कि c सबसे बड़ा उपमूल कारक होता है। , इसलिए चरणों की संख्या न्यूनाधिक निम्न प्रकार है .
यदि N अभाज्य होता है (तो वह होती है), हमें उपाय की आवश्कता होती है। यह आदिमता सिद्ध करने का एक अनुपयुक्त विधि है। परन्तु यदि N का कोई गुणनखंड इसके वर्गमूल के समीप होता है, तो विधि शीघ्रता से कार्य करती है। अधिक स्पष्ट रूप से, यदि c का अंतर से कम होता है तब , विधि को मात्र एक चरण की आवश्यकता होती है; यह N के आकार से स्वतंत्र होता है।
फर्मेट और परीक्षण प्रभाग
अभाज्य संख्या N = 2345678917 का गुणनखंड करने का प्रयास करने पर विचार करें , परन्तु b औरa − b की भी गणना करें। इस प्रकार से यह से ऊपर जाते है, हम इसे निम्न प्रकार सारणीबद्ध कर सकते हैं:
a | 48,433 | 48,434 | 48,435 | 48,436 |
---|---|---|---|---|
b2 | 76,572 | 173,439 | 270,308 | 367,179 |
b | 276.7 | 416.5 | 519.9 | 605.9 |
a − b | 48,156.3 | 48,017.5 | 47,915.1 | 47,830.1 |
व्यवहार में, कोई उस अंतिम पंक्ति से तब तक उत्तेजित नहीं होता है जब तक कि b एक पूर्णांक न हो जाएँ। परन्तु ध्यान दें कि यदि N के पास उपरोक्त उपमूल कारक होता है तो इसका अर्थ यह होता है की फ़र्मेट की विधि ने इसे प्रारम्भ में ही प्राप्त कर लिया होता है।
परीक्षण प्रभाग सामान्यतः 48,432 तक प्रयास करता है; परन्तु मात्र चार फ़र्मेट चरणों के बाद, हमें एक कारक अन्वेषण या प्रारंभिकता सिद्ध करने के लिए मात्र 47830 तक विभाजित करने की आवश्यकता होती है।
यह सब एक संयुक्त फैक्टरिंग विधि का सुझाव देता है। कुछ बाध्य का चयन किया जाता ; और के मध्य के कारकों के लिए फ़र्मेट विधि का उपयोग किया जाता है। यह ट्रायल डिवीजन के लिए एक बाध्यता देता है जो कि होता है। उपरोक्त उदाहरण में, के साथ परीक्षण प्रभाग की सीमा 47830 होती है। एक उचित विकल्प हो सकता है जिसको सीमा 28937 होती है।
इस संबंध में, फ़र्मेट की विधि कम प्रतिफल देती है। इस बिंदु तक पहुचने से पहले कोई निश्चित रूप से रुक जाता है:
a | 60,001 | 60,002 |
---|---|---|
b2 | 1,254,441,084 | 1,254,561,087 |
b | 35,418.1 | 35,419.8 |
a − b | 24,582.9 | 24,582.2 |
सीईव में सुधार
के लिए तालिका पर विचार करते समय, कोई तुरंत बता सकता है कि इनमें से कोई भी मान वर्ग नहीं होता हैं:
a | 48,433 | 48,434 | 48,435 | 48,436 |
---|---|---|---|---|
b2 | 76,572 | 173,439 | 270,308 | 367,179 |
b | 276.7 | 416.5 | 519.9 | 605.9 |
के सभी वर्गमूलों की गणना करना आवश्यक नहीं होता है, और न ही a के लिए सभी मानों की जाँच करने आवश्कता होती है । वर्ग सदैव 0, 1, 4, 5, 9, 16 मॉड्यूलर अंकगणित 20 के अनुरूप होते हैं। प्रत्येक वृद्धि के साथ a 10 से मान दोहराए जाते हैं । इस उदाहरण में, N 17 मॉड 20 होता है, इसलिए 17 मॉड 20को घटाया (या 3 जोड़ें) जाता है, इन मानों के लिए 3, 4, 7, 8, 12, और 19 मॉड्यूल 20 उत्पन्न करता है। यह स्पष्ट है कि इस सूची में से मात्र 4 ही एक वर्ग हो सकते हैं। इस प्रकार, 1 मॉड 20 होना चाहिए, जिसका अर्थ a 1, 9, 11 या 19 मॉड 20 होता है; यह एक का उत्पादन करेगा जो 4 मॉड 20 में समाप्त होता है और, यदि यह वर्गाकार होता है, तो b2 या 8 मॉड 10 में समाप्त हो जाता है।
इसे किसी भी मापांक के साथ निष्पादित किया जा सकता है। का उपयोग किया जाता हैं ,
modulo 16: | Squares are | 0, 1, 4, or 9 |
N mod 16 is | 5 | |
so can only be | 9 | |
and a must be | 3 or 5 or 11 or 13 modulo 16 | |
modulo 9: | Squares are | 0, 1, 4, or 7 |
N mod 9 is | 7 | |
so can only be | 7 | |
and a must be | 4 or 5 modulo 9 |
कोई सामान्यतः प्रत्येक मापांक के लिए एक अलग अभाज्य की शक्ति का चयन करता है।
a-मानों (प्रारंभ, अंत और चरण) और एक मापांक के अनुक्रम को देखते हुए, कोई इस प्रकार आगे बढ़ सकता है:
फ़र्मेटसीव(N, astart, aend, astep, modulus)
a ← astart do modulus times: b2 ← a*a - N if b2 is a square, modulo modulus: फ़र्मेटसीव(N, a, aend, astep * modulus, NextModulus) endif a ← a + astep enddo
रिकर्सन (कंप्यूटर विज्ञान) को तब रोक दिया जाता है जब कुछ a-मान शेष रह जाते हैं; तभी (aend-astart)/astep छोटा होता है। इसके अतिरिक्त, क्योंकि a का चरण-आकार स्थिर होता है, कोई भी जोड़ के साथ क्रमिक b2 की गणना कर सकता है।
गुणक सुधार
फ़र्मेट की विधि तब सबसे अच्छा काम करती है जब कोई कारक N के वर्गमूल के निकट होता है।
यदि दो कारकों का अनुमानित अनुपात () ज्ञात होता है, तो एक परिमेय संख्या उस मूल्य के निकट चुना जा सकता है। , और नुव पर लागू फ़र्मेट की विधि, कारकों और शीग्रता से पता लगाती है। तब और ओता है। (जब तक कि c u को विभाजित न करे या d, v को विभाजित न करे।)
सामान्यतः, यदि अनुपात ज्ञात नहीं है, तो विभिन्न मूल्यों के लिए प्रयास की जा सकता है, और प्रत्येक परिणामी एनयूवी को कारक बनाने का प्रयास करें। आर. लेहमैन ने ऐसा करने के लिए एक व्यवस्थित तरीका तैयार किया, ताकि फ़र्मेट का प्लस ट्रायल डिवीजन एन को कारक बना सके समय।[1]
आम तौर पर, यदि अनुपात ज्ञात नहीं है, तो विभिन्न यू/वी मानों की कोशिश की जा सकती है, और प्रत्येक परिणामी एनयूवी को कारक बनाने का प्रयास किया जा सकता है। आर. लेहमैन ने ऐसा करने के लिए एक व्यवस्थित तरीका तैयार किया, ताकि फ़र्मेट का प्लस ट्रायल डिवीजन 3)O(N^1⁄3) समय में N का कारक बन सके।[1]
अन्य सुधार
फ़र्मेट की गुणनखंडन विधि के मौलिक विचार द्विघात छलनी और सामान्य संख्या क्षेत्र चलनी के आधार हैं, जो बड़े सेमीप्राइम्स के गुणनखंडन के लिए सबसे प्रसिद्ध एल्गोरिदम हैं, जो सबसे खराब स्थिति वाले हैं। फ़र्मेट की गुणनखंडन विधि की तुलना में द्विघात छलनी द्वारा किया जाने वाला प्राथमिक सुधार यह है कि अनुक्रम में मात्र एक वर्ग खोजने के बजाय , यह इस अनुक्रम के तत्वों का एक उपसमूह ढूंढता है जिसका उत्पाद एक वर्ग है, और यह इसे अत्यधिक कुशल तरीके से करता है। अंतिम परिणाम वही है: वर्ग मॉड n का अंतर, जो कि यदि गैर-तुच्छ है, तो कारक n के लिए उपयोग किया जा सकता है।
यह भी देखें
- वर्ग पूरा करना
- बहुपदों का गुणनखंडन
- कारक प्रमेय
- फ़ॉइल नियम
- मोनोइड गुणनखंडन
- पास्कल का त्रिकोण
- मुख्य कारक है
- कारकीकरण
- यूलर की गुणनखंडन विधि
- पूर्णांक गुणनखंडन
- प्रोग्राम संश्लेषण
- गाऊसी पूर्णांक गुणनखंडों की तालिका
- अद्वितीय गुणनखंडन डोमेन
टिप्पणियाँ
- ↑ Lehman, R. Sherman (1974). "बड़े पूर्णांकों का गुणनखंडन" (PDF). Mathematics of Computation. 28 (126): 637–646. doi:10.2307/2005940. JSTOR 2005940.
संदर्भ
- Fermat (1894), Oeuvres de Fermat, vol. 2, p. 256
- McKee, J (1999). "Speeding Fermat's factoring method". Mathematics of Computation. 68 (228): 1729–1737. doi:10.1090/S0025-5718-99-01133-3.
बाहरी संबंध
- Fermat's factorization running time, at blogspot.in
- Fermat's Factorization Online Calculator, at windowspros.ru