यह जांचने के लिए कि कोई संख्या प्रधान है या नहीं, हमें यह क्यों परखना है कि क्या यह केवल उस संख्या के वर्गमूल तक विभाज्य है?
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।