अपनी खोज स्थान को सीमित करने के लिए, आपको 2 से शुरू होना चाहिए और संख्या के वर्ग रूट पर काम करना चाहिए। 27 से 2 तक विभाजित होने वाली बहुत अधिक संख्याएं (एक सीमित खोज स्थान में) हैं, इसलिए आपको उच्चतम, सांख्यिकीय रूप से बोलने से कम विभाजक होने की अधिक संभावना है।
जब आप प्रसंस्करण (उदाहरण के लिए) 1,000,000 प्रसंस्करण करते हैं, तो आपको आधे मूल्य के बजाय वर्ग रूट का उपयोग करते समय एक बड़ा अंतर मिलेगा। अंतर आपकी विधि के लिए 500,000 की खोज स्थान के बीच है और वर्ग रूट विधि के लिए 1,000 काफी है।
एक और लाभ दो के गुणकों को छूट देकर सामने की जगह पर खोज स्थान को कम करना है। फिर, जब आपके पास सबसे कम विभाजक होता है, तो सबसे अधिक केवल उस संख्या से विभाजित होता है।
स्यूडोकोड:
if n % 2 == 0: # Halve search space straight up.
print n/2
else:
i = 3 # Start at 3.
while i * i <= n: # Or use i <= sqrt(n), provided sqrt is calc'ed once
if n % i == 0:
print n/i # If multiple, get opposite number, print and stop
break
i = i + 2 # Only need to process odd numbers
एन स्वयं एन के सबसे बड़े विभाजक नहीं होंगे? शायद "वापसी संख्या;" क्या समारोह है, आप ढूंढ रहे हैं? – SadSido
एन का सबसे बड़ा विभाजक एन स्वयं है ... – Vladimir
पहला सुधार: 'संख्या/2' पर शुरू न करें, लेकिन' sqrt (संख्या) 'पर शुरू करें। – phimuemue