यह जांचने के लिए कि कोई संख्या प्रधान है या नहीं, हमें यह क्यों परखना है कि क्या यह केवल उस संख्या के वर्गमूल तक विभाज्य है?
floor(sqrt(n))
।
यह जांचने के लिए कि कोई संख्या प्रधान है या नहीं, हमें यह क्यों परखना है कि क्या यह केवल उस संख्या के वर्गमूल तक विभाज्य है?
floor(sqrt(n))
।
जवाबों:
एक नंबर तो n
एक प्रमुख नहीं है, यह दो कारकों में शामिल किया जा सकता है a
और b
:
n = a * b
अब a
और b
दोनों वर्गमूल की तुलना में अधिक नहीं हो सकते हैं n
, तब से उत्पाद a * b
अधिक से अधिक होगा sqrt(n) * sqrt(n) = n
। इसलिए किसी भी कारक में n
, कम से कम एक कारक का वर्गमूल से छोटा होना चाहिए n
, और यदि हम वर्गमूल से कम या उसके बराबर कोई कारक नहीं खोज सकते हैं, n
तो एक अभाज्य होना चाहिए।
sqrt(n)
इस संपत्ति को धारण करने के लिए पर्याप्त सटीक कैसे होना चाहिए कि हम फ्लोटिंग पॉइंट का उपयोग कर रहे हैं।
i * i <= n
, i <= sqrt(n)
तो इसके बजाय आप हमेशा चेक का उपयोग कर सकते हैं ।
चलो m = sqrt(n)
फिर कहते हैं m × m = n
। अब अगर n
प्राइम नहीं है तो n
जैसा लिखा जा सकता है n = a × b
, वैसा किया जाए m × m = a × b
। ध्यान दें कि m
एक वास्तविक संख्या है जबकि n
, a
और b
प्राकृतिक संख्या हैं।
अब 3 मामले हो सकते हैं:
सभी 3 मामलों में, min(a, b) ≤ m
। इसलिए यदि हम खोज m
करते हैं, तो हम कम से कम एक कारक खोजने के लिए बाध्य हैं n
, जो यह दिखाने के लिए पर्याप्त है कि n
यह प्रमुख नहीं है।
n is not a prime
, और इसे साबित करें, अन्यथा यह एक प्रमुख है।
एक अधिक सहज व्याख्या होगी: -
100 का वर्गमूल 10. a और b के विभिन्न युग्मों के लिए axb = 100 कहलाता है।
यदि a == b, तो वे समान हैं, और ठीक 100 के वर्गमूल हैं। जो 10 है।
यदि उनमें से एक 10 से कम है, तो दूसरे को अधिक होना चाहिए। उदाहरण के लिए, 5 x 20 == 100. एक 10 से अधिक है, दूसरा 10 से कम है।
कुल्हाड़ी के बारे में सोचकर, यदि उनमें से एक नीचे जाता है, तो दूसरे को क्षतिपूर्ति करने के लिए बड़ा होना चाहिए, इसलिए उत्पाद 100 पर रहता है। वे वर्गमूल के चारों ओर धुरी करते हैं।
101 का वर्गमूल लगभग 10.049875621 है। इसलिए यदि आप १०१ की संख्या का परीक्षण कर रहे हैं, तो आपको केवल १० के माध्यम से पूर्णांकों को आज़माना होगा, १० पर। number लेकिन and, ९, और १० स्वयं प्रधान नहीं हैं, इसलिए आपको केवल 7 के माध्यम से परीक्षा देनी होगी, जो है प्रधान।
क्योंकि अगर 10 से बड़ी संख्याओं में से एक के साथ कारकों की एक जोड़ी है, तो जोड़ी के अन्य को 10 से कम होना चाहिए। यदि छोटा मौजूद नहीं है, तो 101 का कोई बड़ा मिलान नहीं है।
यदि आप 121 का परीक्षण कर रहे हैं, तो वर्गाकार जड़ 11. है। आपको प्राइम पूर्णांकों 1 का परीक्षण 11 (समावेशी) के माध्यम से यह देखने के लिए करना होगा कि क्या यह समान रूप से जाता है। 11 बार 11 बार जाता है, इसलिए 121 अभाज्य नहीं है। यदि आप 10 पर रुक गए थे, और 11 का परीक्षण नहीं किया था, तो आप 11 से चूक गए होंगे।
आपको प्रत्येक अभाज्य पूर्णांक 2 से अधिक का परीक्षण करना होगा, लेकिन वर्गमूल से कम या बराबर, यह मानते हुए कि आप केवल विषम संख्याओं का परीक्षण कर रहे हैं।
`
मान लीजिए n
कि कोई अभाज्य संख्या (1 से अधिक) नहीं है। तो संख्या a
और b
ऐसे हैं
n = ab (1 < a <= b < n)
संबंध a<=b
को गुणा करके a
और b
हमें मिलता है:
a^2 <= ab
ab <= b^2
इसलिए: (ध्यान दें n=ab
)
a^2 <= n <= b^2
इसलिए: (ध्यान दें कि a
और b
सकारात्मक हैं)
a <= sqrt(n) <= b
इसलिए यदि कोई संख्या (1 से अधिक) अभाज्य नहीं है और हम संख्या के वर्गमूल तक विभाज्यता का परीक्षण करते हैं, तो हम कारकों में से एक पाएंगे।
मान लें कि दिया गया पूर्णांक N
अभाज्य नहीं है,
फिर एन को दो कारकों में बांटा जा सकता है a
और b
, 2 <= a, b < N
ऐसा N = a*b
। जाहिर है, दोनों sqrt(N)
एक साथ अधिक से अधिक नहीं हो सकते ।
आइए हम सामान्यता के नुकसान के बिना मान लें कि a
यह छोटा है।
अब, यदि आप N
सीमा में किसी भी विभाजक को नहीं पा सकते हैं, तो [2, sqrt(N)]
इसका क्या मतलब है?
इसका मतलब यह है कि N
किसी भी विभाजक के [2, a]
रूप में नहीं है a <= sqrt(N)
।
इसलिए, a = 1
और b = n
इसलिए परिभाषा के अनुसार, N
अभाज्य है ।
...
यदि आप संतुष्ट नहीं हैं तो आगे पढ़ना:
कई अलग-अलग संयोजन (a, b)
संभव हो सकते हैं। मान लें कि वे हैं:
( 1 ए, बी 1 ), (ए 2 , बी 2 ), (ए 3 , बी 3 ), ....., (ए के , बी के )। सामान्यता के नुकसान के बिना, एक i <b i , मान लें 1<= i <=k
।
अब, यह दिखाने में सक्षम होने के लिए कि N
यह प्रमुख नहीं है यह दिखाने के लिए पर्याप्त है कि मैं में से कोई भी आगे कारक नहीं हो सकता है। और हम यह भी जानते हैं कि एक i <= sqrt(N)
और इस प्रकार आपको यह जांचने की आवश्यकता है कि sqrt(N)
कौन सा सभी कवर करेगा i । और इसलिए आप यह निष्कर्ष निकालने में सक्षम होंगे कि क्या N
प्रधान है या नहीं ।
...
यह सब वास्तव में फैक्टराइजेशन और स्क्वायर रूट्स का केवल मूल उपयोग है।
यह अमूर्त प्रतीत हो सकता है, लेकिन वास्तव में यह इस तथ्य के साथ निहित है कि एक गैर-प्राइम-नंबर की अधिकतम संभव फैक्टरियल को इसका वर्गमूल होना होगा क्योंकि:
sqrroot(n) * sqrroot(n) = n
।
यह देखते हुए कि, यदि ऊपर 1
और नीचे या ऊपर कोई भी पूरी संख्या sqrroot(n)
समान रूप से विभाजित होती है n
, तो n
वह अभाज्य संख्या नहीं हो सकती है।
छद्म कोड उदाहरण:
i = 2;
is_prime = true;
while loop (i <= sqrroot(n))
{
if (n % i == 0)
{
is_prime = false;
exit while;
}
++i;
}
guard
इस आसान stackoverflow.com/a/25555762/4475605 के साथ संयोजन के रूप में स्विफ्ट में एक बयान बनाने के लिए इस अवलोकन का उपयोग कम्प्यूटेशनल बिजली बर्बाद करने के बजाय एक गणना से जल्दी बाहर निकलने के लिए। प्रविष्टि के लिए धन्यवाद।
++i
नंबर 1 बन सकते हैं , जो हमेशा गलत होगा (क्योंकि 1 सब कुछ में विभाजित होता है)। मैंने ऊपर जवाब सही दिया है।
तो यह जांचने के लिए कि नंबर N प्राइम है या नहीं। हमें केवल यह जाँचने की आवश्यकता है कि N, संख्याओं से विभाज्य है <= SQROOT (N)। ऐसा इसलिए है, क्योंकि यदि हम N को किसी 2 कारकों में कहते हैं, तो X और Y कहते हैं। N = X Y। X और Y में से प्रत्येक SQROOT (N) से कम नहीं हो सकता है क्योंकि तब, X Y <N प्रत्येक X और Y SQROOT (N) से अधिक नहीं हो सकता क्योंकि तब, X * Y> N
इसलिए एक कारक SQROOT (N) से कम या उसके बराबर होना चाहिए (जबकि दूसरा कारक SQROOT (N) के बराबर या उससे अधिक हो)। तो यह जांचने के लिए कि क्या N प्राइम है, हमें केवल उन नंबरों की जांच करनी है <= SQROOT (N)।
मान लीजिए कि हमारे पास एक संख्या "a" है, जो अभाज्य नहीं है [अभाज्य / समग्र संख्या का मतलब नहीं है - एक संख्या जिसे समान रूप से 1 या स्वयं के अलावा अन्य संख्याओं से विभाजित किया जा सकता है। उदाहरण के लिए, 6 को 2, या 3 से, साथ ही 1 या 6] द्वारा समान रूप से विभाजित किया जा सकता है।
6 = 1 × 6 या 6 = 2 × 3
तो अब अगर "a" प्राइम नहीं है तो इसे दो अन्य नंबरों से विभाजित किया जा सकता है और मान लें कि वे संख्या "b" और "c" हैं। जिसका मतलब है
एक = b * सी।
अब यदि "b" या "c", उनमें से कोई भी "b" के गुणन से "a" के वर्गमूल से अधिक है, तो "c" से अधिक होगा।
तो, "b" या "c" हमेशा समीकरण को साबित करने के लिए "a" का <= वर्गमूल होता है।
उपरोक्त कारण के कारण, जब हम परीक्षण करते हैं कि कोई संख्या प्रधान है या नहीं, हम केवल उस संख्या के वर्गमूल तक जांच करते हैं।
किसी भी संख्या को देखते हुए n
, उसके कारकों को खोजने का एक तरीका इसकी वर्गमूल निकालना है p
:
sqrt(n) = p
बेशक, अगर हम p
खुद से गुणा करते हैं, तो हम पीछे हट जाते हैं n
:
p*p = n
इसे फिर से लिखा जा सकता है:
a*b = n
कहाँ p = a = b
? अगर a
बढ़ता है, तो b
बनाए रखने के लिए कम हो जाता है a*b = n
। इसलिए, p
ऊपरी सीमा है।
अपडेट: मैं आज फिर से इस जवाब को पढ़ रहा हूं और यह मेरे लिए और अधिक स्पष्ट हो गया है। मूल्य का p
मतलब पूर्णांक होना जरूरी नहीं है क्योंकि अगर यह है, तो n
एक प्रमुख नहीं होगा। तो, p
एक वास्तविक संख्या (यानी, अंशों के साथ) हो सकती है। और की पूरी रेंज से गुजरने के बजाय n
, अब हमें केवल पूरी रेंज से गुजरना होगा p
। दूसरी p
एक मिरर कॉपी है इसलिए हम रेंज को प्रभावित करते हैं। और फिर, अब मैं देख रहा हूं कि हम वास्तव में फिर से कर सकते हैं square root
और p
आगे की आधी सीमा तक कर सकते हैं।
N को अभाज्य होने दें। इसलिए, इसमें कम से कम दो पूर्णांक कारक अधिक से अधिक हैं। चलो n के ऐसे कारकों में सबसे छोटा है। मान लीजिए f> sqrt एन। फिर n / f एक पूर्णांक LTE sqrt n है, इस प्रकार f से छोटा है। इसलिए, f n का सबसे छोटा कारक नहीं हो सकता है। Reductio ad absurdum; n का सबसे छोटा कारक LTE sqrt n होना चाहिए।
कोई भी मिश्रित संख्या, primes का एक उत्पाद है।
आइए बताते हैं n = p1 * p2
, p2 > p1
वे और कहां हैं।
यदि n है n % p1 === 0
तो एक मिश्रित संख्या है।
अगर n % p2 === 0
लगता है तो क्या n % p1 === 0
!
तो वहाँ कोई रास्ता नहीं है कि अगर n % p2 === 0
लेकिन n % p1 !== 0
एक ही समय में। दूसरे शब्दों में यदि एक मिश्रित संख्या n को समान रूप से
P2, p3 ... pi (इसके बड़े कारक) से विभाजित किया जा सकता है, तो इसे इसके निम्नतम कारक p1 द्वारा भी विभाजित किया जाना चाहिए । यह पता चला है कि सबसे कम कारक p1 <= Math.square(n)
हमेशा सच होता है।
किसी संख्या, n की प्राणिकता का परीक्षण करने के लिए , एक लूप की अपेक्षा करेगा जैसे कि पहली जगह में निम्नलिखित:
bool isPrime = true;
for(int i = 2; i < n; i++){
if(n%i == 0){
isPrime = false;
break;
}
}
उपरोक्त लूप यह क्या करता है: दिए गए 1 <i <n के लिए , यह जांचता है कि क्या n / i एक पूर्णांक है (शेष 0 छोड़ता है)। यदि कोई i मौजूद है जिसके लिए n / i एक पूर्णांक है, तो हम यह सुनिश्चित कर सकते हैं कि n एक अभाज्य संख्या नहीं है, जिस बिंदु पर लूप समाप्त हो जाता है। यदि कोई i, n / i पूर्णांक है, तो n अभाज्य है।
हर एल्गोरिथ्म की तरह, हम पूछते हैं: क्या हम बेहतर कर सकते हैं?
आइए देखें कि उपरोक्त लूप में क्या चल रहा है।
I का क्रम इस प्रकार है: i = 2, 3, 4, ..., n-1
और पूर्णांक-चेकों का क्रम चलता है: j = n / i, जो n / 2, n / 3, n / 4, ..., n / (n-1) है
यदि कुछ i = a, n / a पूर्णांक है, तो n / a = k (पूर्णांक)
या n = ak, स्पष्ट रूप से n> k> 1 (यदि k = 1, तो a = n, लेकिन मैं कभी n तक नहीं पहुंचता; और यदि k = n, तो a = 1, लेकिन मैं फ़ॉर्म 2 शुरू करता हूं)
इसके अलावा, n / k = a, और जैसा कि ऊपर कहा गया है, एक i i n n> a> 1 का मान है।
तो, a और k दोनों 1 और n (अनन्य) के बीच पूर्णांक हैं। चूंकि, मैं हर श्रेणी में उस पूर्णांक तक पहुँचता हूं, कुछ पुनरावृत्ति i = a पर, और कुछ अन्य पुनरावृत्ति i = k पर। यदि मिनट (ए, के) के लिए n का प्रायोगिक परीक्षण विफल हो जाता है, तो यह अधिकतम (a, k) के लिए भी विफल हो जाएगा। इसलिए हमें इन दो मामलों में से केवल एक की जांच करने की आवश्यकता है, जब तक कि मिन (ए, के) = अधिकतम (ए, के) (जहां दो चेक कम हो जाते हैं एक), अर्थात, ए = के, जिस पर एक * ए = एन, जो तात्पर्य a = sqrt (n)।
दूसरे शब्दों में, यदि n की primality test कुछ i> = sqrt (n) (यानी, max (a, k)) के लिए विफल होती है, तो यह कुछ i <= n (यानी, min (a) के लिए भी विफल होगी। ,क))। यदि हम i = 2 से sqrt (n) के लिए परीक्षण चलाते हैं तो यह पर्याप्त होगा।
n = a*b
औरa <= b
फिरa*a <= a*b = n
।