কম্পিউটার টিউটোরিয়াল

পাইথনে প্রাইম নম্বর খুঁজে বের করার বিভিন্ন পদ্ধতি


প্রাইম নম্বর কী?

১-র চেয়ে বড় একটি পূর্ণসংখ্যা যা শুধু ১ এবং নিজের দ্বারা বিভাজ্য। ১ প্রাইম নয়।

পদ্ধতি ১: নেস্টেড ফর লুপ (নেভি)


def prime_method1(n):
    primes = []
    for num in range(2, n):
        is_prime = True
        for i in range(2, num):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes

print(prime_method1(50))
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

সময় জটিলতা: O(n²) — বড় n-এ ধীর।

পদ্ধতি ২: ব্রেক সহ অপ্টিমাইজড


def prime_method2(n):
    primes = []
    for num in range(2, n + 1):
        is_prime = True
        for i in range(2, num):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes

print(prime_method2(50))

ব্রেক দিয়ে অপ্রয়োজনীয় ইটারেশন কমানো হয়েছে।

পদ্ধতি ৩: স্কয়ার রুট অপ্টিমাইজেশন (সবচেয়ে কার্যকর নেভি)


def prime_method3(n):
    primes = []
    for num in range(2, n):
        is_prime = True
        # শুধু sqrt(num) পর্যন্ত চেক করলেই হয়
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes

print(prime_method3(50))

কারণ: যদি a × b = num হয়, তবে those numbers sqrt(num)-এর একপাশে থাকবে।

পদ্ধতি ৪: Sieve of Eratosthenes (সর্বোত্তম বড় n-এ)


def sieve_of_eratosthenes(n):
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False
    
    for i in range(2, int(n ** 0.5) + 1):
        if is_prime[i]:
            for j in range(i * i, n + 1, i):
                is_prime[j] = False
    
    return [i for i, prime in enumerate(is_prime) if prime]

print(sieve_of_eratosthenes(50))
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

সময় জটিলতা: O(n log log n) — অনেক দ্রুত।

পদ্ধতি ৫: পাইথন এক-লাইনার (ফাংশনাল)


# ফিল্টার + ল্যাম্বডা
primes = list(filter(lambda x: all(x % i != 0 for i in range(2, int(x**0.5)+1)), range(2, 50)))
print(primes)

পারফরম্যান্স তুলনা (n=100,000)

পদ্ধতিঅনুমানিক সময়
নেভি (পদ্ধতি ১)> ৩০ সেকেন্ড
স্কয়ার রুট (পদ্ধতি ৩)~ ০.৫ সেকেন্ড
Sieve (পদ্ধতি ৪)~ ০.০১ সেকেন্ড

সুপারিশ

  • ছোট n (< ১০০০): পদ্ধতি ৩ যথেষ্ট।
  • বড় n (> ১০০০০): Sieve of Eratosthenes বাধ্যতামূলক।
  • বারবার প্রাইম চেক করতে: প্রি-কম্পিউটেড সেট বা sympy.isprime() ব্যবহার করুন।
  1. প্রাইম নম্বর চেক করার পাইথন প্রোগ্রাম

  2. পাইথন প্রোগ্রামে প্রাইম নাম্বার খুঁজে বের করার বিভিন্ন পদ্ধতির বিশ্লেষণ

  3. পাইথনে একটি সংখ্যার সর্বোচ্চ质因数 বের করার প্রোগ্রাম

  4. পাইথনে প্রাইম নাম্বার চেক করার বিভিন্ন পদ্ধতি এবং পারফরম্যান্স বিশ্লেষণ