फ़र्मेट की गुणनखंडन विधि: Difference between revisions

From Vigyanwiki
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 एक वर्ग न हो जाए:
    तब तक दोहराएँ जब तक b2 एक वर्ग न हो जाए:
         + 1
         a a + 1
         b2 ← a*a - N
         b2 ← a*a - N  
       // समकक्ष:
       // समान रूप से:  
       // बी2 बी2 + 2*+ 1
       // b2 b2 + 2*a + 1  
       // + 1
       // a a + 1
     एक वापसी - {{Not a typo|sqrt(b2)}} //या एक + {{Not a typo|sqrt(b2)}}
     '''रीटर्न''' 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 के लिए पहला प्रयास का वर्गमूल है {{math|5959}} को अगले पूर्णांक तक पूर्णांकित किया गया, जो है {{math|78}}. तब, <math>b^2 = 78^2-5959 = 125</math>. चूँकि 125 एक वर्ग नहीं है, इसलिए a का मान 1 बढ़ाकर दूसरा प्रयास किया जाता है। दूसरा प्रयास भी विफल हो जाता है, क्योंकि 282 फिर से एक वर्ग नहीं है।


{| 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>.
तीसरे प्रयास से 441 का पूर्ण वर्ग बनता है। तो, <math>a = 80</math>, <math>b = 21</math>होता है, और {{math|5959}} के कारक <math>a - b = 59</math> और <math>a + b = 101</math> होते है।


मान लीजिए N के दो से अधिक अभाज्य गुणनखंड हैं। वह प्रक्रिया सबसे पहले a और b के न्यूनतम मानों के साथ गुणनखंड ढूंढती है। वह है, <math>a + b</math> सबसे छोटा कारक है ≥ N का वर्गमूल, इत्यादि <math>a - b = N/(a + b)</math> सबसे बड़ा कारक ≤ रूट-एन है। यदि प्रक्रिया मिल जाती है <math>N=1 \cdot N</math>, इससे पता चलता है कि N अभाज्य है।
मान लीजिए 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>.
<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>), हमें चाहिए <math>O(N)</math> कदम। यह आदिमता सिद्ध करने का एक बुरा तरीका है। लेकिन यदि N का कोई गुणनखंड इसके वर्गमूल के करीब है, तो विधि तुरंत काम करती है। अधिक सटीक रूप से, यदि c से कम अंतर है <math>{\left(4N\right)}^{1/4}</math> से <math>\sqrt N</math>, विधि को केवल एक चरण की आवश्यकता है; यह N के आकार से स्वतंत्र है।
यदि 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}}, लेकिन बी और की भी गणना करें {{nowrap|''a'' − ''b''}} लगातार। से ऊपर जा रहे हैं <math>\sqrt{N}</math>, हम सारणीबद्ध कर सकते हैं:
अभाज्य संख्या {{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>, फ़र्मेट की विधि ने इसे पहले ही ढूंढ लिया होगा।
व्यवहार में, कोई उस अंतिम पंक्ति से तब तक उत्तेजित नहीं होता है जब तक कि b एक पूर्णांक न हो जाएँ। परन्तु ध्यान दें कि यदि N के पास उपरोक्त उपमूल कारक <math>a-b=47830.1</math> होता है तो इसका अर्थ यह होता है की फ़र्मेट की विधि ने इसे प्रारम्भ में ही प्राप्त कर लिया होता है।


परीक्षण प्रभाग सामान्यतः 48,432 तक प्रयास करेगा; लेकिन केवल चार फ़र्मेट चरणों के बाद, हमें एक कारक खोजने या प्रारंभिकता साबित करने के लिए केवल 47830 तक विभाजित करने की आवश्यकता है।
परीक्षण प्रभाग सामान्यतः 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 का बाउंड दे रहा हूँ।
यह सब एक संयुक्त फैक्टरिंग विधि का सुझाव देता है। कुछ बाध्य <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> वर्ग हैं:
<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 से। इस उदाहरण में, एन 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}} 2 या 8 मॉड 10 में समाप्त हो जाएगा।
<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>,
इसे किसी भी मापांक के साथ निष्पादित किया जा सकता है। <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)


{{Not a typo|FermatSieve(N}}, प्रारंभ करें, और, रोकें, मापांक) a ← प्रारंभ करें मापांक समय: b2 ← a*a - N यदि b2 एक वर्ग है, मापांक मापांक:            
    a ← astart
{{Not a typo|FermatSieve(N}}, , एएंड, एस्टेप * मॉड्यूलस, नेक्स्ट मॉड्यूलस)
    '''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 की गणना कर सकता है।


लेकिन [[रिकर्सन (कंप्यूटर विज्ञान)]] को तब रोक दिया जाता है जब कुछ ''ए''-मान शेष रह जाते हैं; तभी ({{Not a typo|aend-astart}})/{{Not a typo|astep}} छोटा है। इसके अलावा, क्योंकि a का चरण-आकार स्थिर है, कोई भी जोड़ के साथ क्रमिक b2 की गणना कर सकता है।
==गुणक सुधार==


==गुणक सुधार==
फ़र्मेट की विधि तब सबसे अच्छा काम करती है जब कोई कारक N के वर्गमूल के निकट होता है।


फ़र्मेट की विधि तब सबसे अच्छा काम करती है जब कोई कारक 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>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 तुम्हें विभाजित न करे या 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>


आम तौर पर, यदि अनुपात ज्ञात नहीं है, तो विभिन्न <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 के लिए उपयोग किया जा सकता है।
फ़र्मेट की गुणनखंडन विधि के मौलिक विचार [[द्विघात छलनी]] और सामान्य संख्या क्षेत्र चलनी के आधार हैं, जो बड़े [[सेमीप्राइम्स]] के गुणनखंडन के लिए सबसे प्रसिद्ध एल्गोरिदम हैं, जो सबसे खराब स्थिति वाले हैं। फ़र्मेट की गुणनखंडन विधि की तुलना में द्विघात छलनी द्वारा किया जाने वाला प्राथमिक सुधार यह है कि अनुक्रम में मात्र एक वर्ग खोजने के बजाय <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 औरab की भी गणना करें। इस प्रकार से यह से ऊपर जाते है, हम इसे निम्न प्रकार सारणीबद्ध कर सकते हैं:

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
ab 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
ab 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^13) समय में N का कारक बन सके।[1]

अन्य सुधार

फ़र्मेट की गुणनखंडन विधि के मौलिक विचार द्विघात छलनी और सामान्य संख्या क्षेत्र चलनी के आधार हैं, जो बड़े सेमीप्राइम्स के गुणनखंडन के लिए सबसे प्रसिद्ध एल्गोरिदम हैं, जो सबसे खराब स्थिति वाले हैं। फ़र्मेट की गुणनखंडन विधि की तुलना में द्विघात छलनी द्वारा किया जाने वाला प्राथमिक सुधार यह है कि अनुक्रम में मात्र एक वर्ग खोजने के बजाय , यह इस अनुक्रम के तत्वों का एक उपसमूह ढूंढता है जिसका उत्पाद एक वर्ग है, और यह इसे अत्यधिक कुशल तरीके से करता है। अंतिम परिणाम वही है: वर्ग मॉड n का अंतर, जो कि यदि गैर-तुच्छ है, तो कारक n के लिए उपयोग किया जा सकता है।

यह भी देखें

टिप्पणियाँ

  1. Lehman, R. Sherman (1974). "बड़े पूर्णांकों का गुणनखंडन" (PDF). Mathematics of Computation. 28 (126): 637–646. doi:10.2307/2005940. JSTOR 2005940.


संदर्भ


बाहरी संबंध