यदि हम अभाज्य हैं, तो यह निर्धारित करने के लिए कि हम अभाज्य संख्या के वर्गमूल की जाँच क्यों करते हैं?


392

यह जांचने के लिए कि कोई संख्या प्रधान है या नहीं, हमें यह क्यों परखना है कि क्या यह केवल उस संख्या के वर्गमूल तक विभाज्य है?


33
क्योंकि अगर n = a*bऔर a <= bफिर a*a <= a*b = n
विल नेस

7
स्पष्ट करने के लिए, इसका मतलब है कि हमें केवल परीक्षण करना है floor(sqrt(n))
एक्यूमेनस

जवाबों:


659

एक नंबर तो 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)तो इसके बजाय आप हमेशा चेक का उपयोग कर सकते हैं ।
स्वेन मार्नाच

348

चलो m = sqrt(n)फिर कहते हैं m × m = n। अब अगर nप्राइम नहीं है तो nजैसा लिखा जा सकता है n = a × b, वैसा किया जाए m × m = a × b। ध्यान दें कि mएक वास्तविक संख्या है जबकि n, aऔर bप्राकृतिक संख्या हैं।

अब 3 मामले हो सकते हैं:

  1. a> m ⇒ b <m
  2. a = m ⇒ b = m
  3. a <m ⇒ b> m

सभी 3 मामलों में, min(a, b) ≤ m। इसलिए यदि हम खोज mकरते हैं, तो हम कम से कम एक कारक खोजने के लिए बाध्य हैं n, जो यह दिखाने के लिए पर्याप्त है कि nयह प्रमुख नहीं है।


4
n = 12 m = sqrt (12) = 3.46, a = 2, b = 6. n = m m अर्थात 12 = 3.46 * 3.46 और n = a b अर्थात 12 = 2 * 6। अब स्थिति 3. एक <m <b यानी 2 <3.46 <6. तो प्राइम की जांच करने के लिए हमें केवल 3.46 से कम नंबर की जांच करने की आवश्यकता है, जो यह पता लगाने के लिए 2 है कि नंबर प्राइम नहीं है। इसलिए, (n = 4, m = a = b = 2) n के वर्गमूल के बराबर या उससे कम की संख्या से विभाज्यता की जांच करें।
अनुकल

2
मुझे लगता है कि हमें पहले धारणा को उजागर करना चाहिए। मान लें n is not a prime, और इसे साबित करें, अन्यथा यह एक प्रमुख है।
हूई टैन

वास्तव में, मुझे यकीन नहीं है कि यह एक बेहतर उत्तर है। यह एक सही उत्तर है, लेकिन यह वास्तव में सवाल का जवाब नहीं देता है। यह सिर्फ primes और sqrt के आसपास कुछ अन्य गतिकी का वर्णन करता है। @ स्वेन के जवाब दोनों सक्सेसफुल हैं, और इस प्रक्रिया में अधिक सवाल पैदा नहीं करते हैं।
जॉन एम

1
मैं पिछले अच्छे संस्करण में वापस आ गया। आपने इसे याद किया जब किसी ने अनावश्यक रूप से एक शब्द ('इसलिए') को हटा दिया, जो प्रवाह के लिए आवश्यक है।
विल नेस

55

क्योंकि यदि कोई कारक n के वर्गमूल से अधिक है, तो दूसरा गुणक जो उसके साथ n के बराबर होगा, आवश्यक रूप से n के वर्गमूल से कम होगा।


37

एक अधिक सहज व्याख्या होगी: -

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 से अधिक का परीक्षण करना होगा, लेकिन वर्गमूल से कम या बराबर, यह मानते हुए कि आप केवल विषम संख्याओं का परीक्षण कर रहे हैं।

`


3
"एक्सब के बारे में सोचकर, अगर उनमें से एक नीचे चला जाता है, तो दूसरे को क्षतिपूर्ति करने के लिए बड़ा होना चाहिए, इसलिए उत्पाद 100 पर रहता है। वे वर्गमूल के चारों ओर धुरी करते हैं।" मेरी आह पल! धन्यवाद!
ब्रायन विगिनटन

यह सबसे अच्छा जवाब है।
जीनीज

19

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


8

मान लें कि दिया गया पूर्णांक 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प्रधान है या नहीं ।

...


7

यह सब वास्तव में फैक्टराइजेशन और स्क्वायर रूट्स का केवल मूल उपयोग है।

यह अमूर्त प्रतीत हो सकता है, लेकिन वास्तव में यह इस तथ्य के साथ निहित है कि एक गैर-प्राइम-नंबर की अधिकतम संभव फैक्टरियल को इसका वर्गमूल होना होगा क्योंकि:

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 के साथ संयोजन के रूप में स्विफ्ट में एक बयान बनाने के लिए इस अवलोकन का उपयोग कम्प्यूटेशनल बिजली बर्बाद करने के बजाय एक गणना से जल्दी बाहर निकलने के लिए। प्रविष्टि के लिए धन्यवाद।
एड्रियन

@ एड्रियन मुझे यह स्वीकार करना चाहिए कि इस उत्तर पर वापस आने के बाद, मुझे आपकी पोस्टिंग के समय एक त्रुटि मिली। आप एक 0 पर विभाजन नहीं कर सकते हैं, और सिद्धांत रूप में यदि आप ++iनंबर 1 बन सकते हैं , जो हमेशा गलत होगा (क्योंकि 1 सब कुछ में विभाजित होता है)। मैंने ऊपर जवाब सही दिया है।
सुपर कैट

हां ... मैंने कहा कि मेरे कोड में ... आपकी गणना शुरू करने से पहले एक गैर-प्रमुख मूल्य को जल्दी से बाहर फेंकने के लिए आपका स्क्वायर रूट अवलोकन एक शानदार तरीका है। मैं एक बड़ी संख्या में मारा जा रहा था जो समय की एक बड़ी बर्बादी निकला। मैंने यह भी सीखा कि यह एल्गोरिथ्म बड़ी संख्याओं पर भी प्रसंस्करण समय को काफी कम कर सकता है। en.wikipedia.org/wiki/Miller –Rabin_primality_test
एड्रियन

6

तो यह जांचने के लिए कि नंबर 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)।


3

मान लीजिए कि हमारे पास एक संख्या "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" का <= वर्गमूल होता है।

उपरोक्त कारण के कारण, जब हम परीक्षण करते हैं कि कोई संख्या प्रधान है या नहीं, हम केवल उस संख्या के वर्गमूल तक जांच करते हैं।


1
b & c <= Math.sqrt (n) ;; यह बल्कि बी होना चाहिए || c (b या c) यदि n = 6, b = 3, c = 2 तब से Math.sqrt (n)> c।
daGo

सुधार के लिए धन्यवाद दोस्त। सुधार कर रहा है। :)
अबू नासर एमडी शोएब

2

किसी भी संख्या को देखते हुए 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आगे की आधी सीमा तक कर सकते हैं।


1

N को अभाज्य होने दें। इसलिए, इसमें कम से कम दो पूर्णांक कारक अधिक से अधिक हैं। चलो n के ऐसे कारकों में सबसे छोटा है। मान लीजिए f> sqrt एन। फिर n / f एक पूर्णांक LTE sqrt n है, इस प्रकार f से छोटा है। इसलिए, f n का सबसे छोटा कारक नहीं हो सकता है। Reductio ad absurdum; n का सबसे छोटा कारक LTE sqrt n होना चाहिए।


1

कोई भी मिश्रित संख्या, 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)हमेशा सच होता है।


यदि आप जिज्ञासु हैं कि यह सत्य क्यों है @ तोलम्प्र ने अपने उत्तर में तथ्य को बहुत समझाया। मैंने अपना उत्तर इसलिए जोड़ा क्योंकि मेरे पास अन्य प्रदान किए गए उत्तरों की कल्पना और समझने के लिए वास्तव में कठिन समय था। यह सिर्फ क्लिक नहीं किया।
daGo

0

किसी संख्या, 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) के लिए परीक्षण चलाते हैं तो यह पर्याप्त होगा।


कमेंट में समझने के लिए बहुत कम और IMHO बहुत आसान हैं और अधिक ऑन-टॉपिक स्पष्टीकरण और 6 साल पुराने उत्तर ...
थियरी लैथुइल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.