簡體   English   中英

在 python 3.7 中查找最近的素數

[英]Finding the nearest prime number in python 3.7

我有一個編碼任務,我需要讓用戶輸入一個數字 n,然后 output 是最接近 n 的素數。 如果有兩個素數同樣接近 n,那么 output 是兩個素數中較小的一個。 目前我在下面發布了顯然不正確的代碼,但我無法獲得正確的解決方案。

n = int(input("enter a number: "))
x = n
y = n
for i in range(2, n):
    while n % i  == 0:
            x += 1
            y -= 1
            if n % i != 0 and (x-n) < (n-y):
                print("The prime number closest to", n, "is", x)
            elif n % i != 0 and (n-y) < (x-n):
                print ("The prime number closest to" , n, "is", y)
    else:
            print ("The prime number closest to" , n, "is", n)  

通過將其分解為多個部分來解決此類問題會更容易:

  1. 編寫一個 function is_prime ,它將一個數字作為其參數,如果它是素數則返回True 執行此操作的標准方法是重復測試較小的數字以查看它們是否作為因素起作用(看起來您的代碼已經在嘗試按照這些方式做一些事情)。
  2. 從用戶那里獲得n后,迭代附近的數字(類似於您對xy所做的事情)並使用is_prime檢查它們。 如果兩者都不是素數,則 go 到下一個最接近的數字並重復,直到找到一些東西。

這些部分中的每一個(單獨)都將涉及編寫一個循環。 您當前的代碼不太有效,因為您試圖在一個循環中完成所有操作。 :)

試試這個簡單的代碼:

is_prime的這個stackoverflow 答案中,is_prime function 的功勞

from itertools import count


def is_prime(x):
    for i in range(2, x-1):
        if x % i == 0:
            return False
    else:
        return True


def closest_prime(n):
    if n <= 0:
        return 1
    closest = 0
    for p1 in count(n, step=-1):
        if is_prime(p1):
            closest = p1
            break
    for p2 in count(n, step=1):
        if is_prime(p2):
            if p2 - n < n - p1:
                closest = p2
                break
            else:
                closest = p1
                break
    return closest


# Tests
print(closest_prime(10))  # => 11
print(closest_prime(20))  # => 19
print(closest_prime(30))  # => 29
print(closest_prime(-100))  # => 1
print(closest_prime(0))  # => 1
print(closest_prime(1))  # => 1

編輯:在 shell 中添加要打印的演示

# Demo
n = int(input("enter a number: "))
print("The prime number closest to", n, "is", closest_prime(n))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM