Hướng dẫn how do you find the nth prime number in python? - làm thế nào để bạn tìm thấy số nguyên tố thứ n trong python?

\ $ \ beingroup \ $

Hôm nay tôi đã có một cuộc phỏng vấn, nơi tôi được yêu cầu giải quyết vấn đề này:

Tạo số nguyên tố thứ n. Đưa ra một chữ ký bên dưới, hãy viết logic Python để tạo số nguyên tố thứ n:

def nth_prime_number(n):
  # n = 1 => return 2
  # n = 4 => return 7
  # n = 10 => return 29

Tôi đã viết mã này, nhưng không thể vượt qua:

def nth_prime_number(n):
    if n==1:
        return 2
    count = 1
    num = 3
    while(count <= n):
        if is_prime(num):
            count +=1
            if count == n:
               return num
        num +=2 #optimization

def is_prime(num):
    factor = 2
    while (factor < num):
        if num%factor == 0:
             return False
        factor +=1
    return True 

Phản hồi tổng thể là chất lượng mã có thể được cải thiện rất nhiều và tôi nên tối ưu hơn trong cách tiếp cận của mình. Làm thế nào tôi có thể cải thiện mã này?

Đã hỏi ngày 26 tháng 3 năm 2017 lúc 18:25Mar 26, 2017 at 18:25

Hướng dẫn how do you find the nth prime number in python? - làm thế nào để bạn tìm thấy số nguyên tố thứ n trong python?

HarshaharshaHarsha

1.2511 huy hiệu vàng8 Huy hiệu bạc23 Huy hiệu đồng1 gold badge8 silver badges23 bronze badges

\ $ \ endgroup \ $

2

\ $ \ beingroup \ $

Hàm is_prime() của bạn kiểm tra xem num là bội số của bất kỳ số nào bên dưới nó. Điều này có nghĩa là nó kiểm tra xem nó là bội số của 2, 4, 6, 8, 10, v.v. Đối với tất cả các số khác, nếu nó không phải là bội số của 3, nó sẽ không phải là bội số của 27 (3x3x3).

Những gì bạn cần làm là kiểm tra xem num có phải là bội số của bất kỳ số nguyên tố nào trước đó không.

def nth_prime_number(n):
    # initial prime number list
    prime_list = [2]
    # first number to test if prime
    num = 3
    # keep generating primes until we get to the nth one
    while len(prime_list) < n:

        # check if num is divisible by any prime before it
        for p in prime_list:
            # if there is no remainder dividing the number
            # then the number is not a prime
            if num % p == 0:
                # break to stop testing more numbers, we know it's not a prime
                break

        # if it is a prime, then add it to the list
        # after a for loop, else runs if the "break" command has not been given
        else:
            # append to prime list
            prime_list.append(num)

        # same optimization you had, don't check even numbers
        num += 2

    # return the last prime number generated
    return prime_list[-1]

Tôi chắc chắn rằng một người khác ở đây sẽ đưa ra một giải pháp thậm chí hiệu quả hơn, nhưng điều này sẽ giúp bạn bắt đầu.

Đã trả lời ngày 26 tháng 3 năm 2017 lúc 19:16Mar 26, 2017 at 19:16

Hướng dẫn how do you find the nth prime number in python? - làm thế nào để bạn tìm thấy số nguyên tố thứ n trong python?

DarkMattermattDarkMattermattDarkMatterMatt

5561 Huy hiệu vàng3 Huy hiệu bạc14 Huy hiệu đồng1 gold badge3 silver badges14 bronze badges

\ $ \ endgroup \ $

3

\ $ \ beingroup \ $

Hàm is_prime() của bạn kiểm tra xem num là bội số của bất kỳ số nào bên dưới nó. Điều này có nghĩa là nó kiểm tra xem nó là bội số của 2, 4, 6, 8, 10, v.v. Đối với tất cả các số khác, nếu nó không phải là bội số của 3, nó sẽ không phải là bội số của 27 (3x3x3).

Những gì bạn cần làm là kiểm tra xem num có phải là bội số của bất kỳ số nguyên tố nào trước đó không.

def nth_prime_number(n):
    if n==1:
        return 2
    count = 1
    num = 1
    while(count < n):
        num +=2 #optimization
        if is_prime(num):
            count +=1
    return num

def is_prime(num):
    factor = 2
    while (factor * factor <= num):
        if num % factor == 0:
             return False
        factor +=1
    return True

Tôi chắc chắn rằng một người khác ở đây sẽ đưa ra một giải pháp thậm chí hiệu quả hơn, nhưng điều này sẽ giúp bạn bắt đầu.

Đã trả lời ngày 26 tháng 3 năm 2017 lúc 19:16Mar 26, 2017 at 19:09

Hướng dẫn how do you find the nth prime number in python? - làm thế nào để bạn tìm thấy số nguyên tố thứ n trong python?

\ $ \ endgroup \ $

4

\ $ \ beingroup \ $

  • Hàm is_prime() của bạn kiểm tra xem num là bội số của bất kỳ số nào bên dưới nó. Điều này có nghĩa là nó kiểm tra xem nó là bội số của 2, 4, 6, 8, 10, v.v. Đối với tất cả các số khác, nếu nó không phải là bội số của 3, nó sẽ không phải là bội số của 27 (3x3x3).
  • Những gì bạn cần làm là kiểm tra xem num có phải là bội số của bất kỳ số nguyên tố nào trước đó không.
  • Tôi chắc chắn rằng một người khác ở đây sẽ đưa ra một giải pháp thậm chí hiệu quả hơn, nhưng điều này sẽ giúp bạn bắt đầu.
  • Đã trả lời ngày 26 tháng 3 năm 2017 lúc 19:16
  • DarkMattermattDarkMattermatt

5561 Huy hiệu vàng3 Huy hiệu bạc14 Huy hiệu đồng

from itertools import count, islice

def is_prime(num):
    return any(
        num % factor
        for factor in range(2, num)
    )

def generate_primes():
    yield 2
    for num in count(3, 2):
        if is_prime(num):
            yield num

def nth_prime_number(n):
    return next(islice(generate_prime(), n, None))

Bạn chỉ cần lặp vào căn bậc hai của số, bởi vì sau đó bạn sẽ chỉ lặp lại cùng một số. Ví dụ: nếu bạn đã thử nghiệm 100, sau 10, bạn sẽ tìm thấy 20, nhưng bạn đã thử nghiệm nó trong khi bạn đang thử nghiệm 5, 100/5 = 20 và 100/20 = 5, nếu 5 không chia 100 vì vậy 20 won won 't và ngược lại, vì vậy, 100/a = b kiểm tra tính chia rẽ của a và b, chỉ ở mức 10 là sqrt (100) sẽ được lặp lại một lần nữa nhưng theo thứ tự đảo ngược, (ví dụ: bạn a = 5, b = 20 và a = 20, b = 5). Thông tin thêm ở đây

Vì vậy, mã sẽ trông như vậy

Nhưng nhìn chung, phương pháp ngây thơ này tiêu tốn rất nhiều thời gian, đó là O (Sqrt (n) * n) trong đó n là tổng số số nguyên được thử nghiệm, tôi khuyên bạn nên tìm hiểu thêm về sàng eratosthenes, đó là một thuật toán để tìm tất cả các primes nhỏ hơn n trong o (n * log (log (n))) nhanh hơn rất nhiều so với cái ngây thơ.Mar 26, 2017 at 19:49

Đã trả lời ngày 26 tháng 3 năm 2017 lúc 19:09Peilonrayz

is_prime nên sử dụng vòng lặp for, không phải là vòng lặp

def nth_prime_number(n):
    if n==1:
        return 2
    count = 1
    num = 3
    while(count <= n):
        if is_prime(num):
            count +=1
            if count == n:
               return num
        num +=2 #optimization

def is_prime(num):
    factor = 2
    while (factor < num):
        if num%factor == 0:
             return False
        factor +=1
    return True 
0.7 gold badges69 silver badges149 bronze badges

\ $ \ endgroup \ $

Công thức số nguyên tố cho Python là gì?

Từ Nhập toán SQRT # Số sẽ được kiểm tra cho Prime N = 9 Flag = 0 If (N> 1): Đối với k trong phạm vi (2, int (sqrt (n)) + 1): if (n % k == 0): Flag = 1 break if (flag == 0): in (n, "là số nguyên tố!")Một số nguyên tố!

Thuật ngữ thứ n cho số nguyên tố là gì?

Nhưng nếu bạn chỉ muốn một xấp xỉ, số nguyên tố thứ n gần như là khoảng NLNN (hay chính xác hơn là gần số m sao cho m/lnm = n) theo định lý số nguyên tố.Trên thực tế, chúng ta có những điều không có triệu chứng sau đây ràng buộc trên pn pn: nlnn+n (lnlnn 1))nlnn (or more precisely, near the number m such that m/lnm=n) by the prime number theorem. In fact, we have the following asymptotic bound on the nth prime pn: nlnn+n(lnlnn−1)