[英]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)
通過將其分解為多個部分來解決此類問題會更容易:
is_prime
,它將一個數字作為其參數,如果它是素數則返回True
。 執行此操作的標准方法是重復測試較小的數字以查看它們是否作為因素起作用(看起來您的代碼已經在嘗試按照這些方式做一些事情)。n
后,迭代附近的數字(類似於您對x
和y
所做的事情)並使用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.