[英]Closest Prime Number in Python
I need a user to enter a number and enter out the closest prime number to the value they put in. I am struggling on how to check the prime numbers before and after the number they put in. The last part is to print the smaller value of the two prime numbers if they are the same distance away from the inputted number.我需要用户输入一个数字并输入最接近他们输入值的素数。我正在努力检查他们输入的数字前后的素数。最后一部分是打印较小的值如果两个质数与输入数的距离相同。
n = int(input("Enter n: "))
holder1 = n
holder2 = n
prime = True
holder3 = 0
holder4 = 0
for i in range(2,n):
if (n % i) == 0:
prime = False
if(prime == True):
print("The prime closest to " + str(n) + " is " + str(n))
else:
while (prime == False):
holder1 -= 1
holder2 += 1
for i in range(2,holder1):
if (n % i) == 0:
prime = False
else:
prime = True
holder3 = holder1
for i in range(2,holder2):
if (n % i) == 0:
prime = False
else:
prime = True
holder4 = holder2
if(abs(n - holder3) <= abs(n-holder4)):
print("The prime closest to " + str(n) + " is " + str(holder3))
elif (abs(n - holder3) > abs(n-holder4)):
print("The prime closest to " + str(n) + " is " + str(holder4))
If I understood your question correctly, you are trying to find a way of finding the closest number to the inputted number.如果我正确理解了您的问题,那么您正在尝试找到一种方法来找到与输入数字最接近的数字。 If this is the case, the Sieve of Eratosthenes method to calculate all of the prime numbers up to a given range, and then find the prime to the number you entered如果是这种情况,埃拉托色尼筛法会计算给定范围内的所有素数,然后找到您输入的数字的素数
# Import math for the infinity functionality
import math
# The Sieve of Eratosthenes method of calculating the primes less than the limit
def getPrimes(limit):
# The list of prime numbers
primes = []
# The boolean list of whether a number is prime
numbers = [True] * limit
# Loop all of the numbers in numbers starting from 2
for i in range(2, limit):
# If the number is prime
if numbers[i]:
# Add it onto the list of prime numbers
primes.append(i)
# Loop over all of the other factors in the list
for n in range(i ** 2, limit, i):
# Make them not prime
numbers[n] = False
# Return the list of prime numbers
return primes
# The number to find the closest prime of
number = int(input("Enter a number: > "))
# The list of primes using the function declared above
primes = getPrimes(number + 100)
# The distance away from the closest prime
maxDist = math.inf
# The closest prime
numb = 0
# Loop all of the primes
for p in primes:
# If the prime number is closer than maxDist
if abs(number - p) < maxDist:
# Set maxDist to the number
maxDist = abs(number - p)
# Set numb to the number
numb = p
# Print the output
print(numb, "is the closest prime number to the number you entered!")
I hope this answers your question我希望这回答了你的问题
***** EDIT ***** ***** 编辑 *****
You said that you cannot use the python math library, so below is the slightly adjusted code that does not use it:你说你不能使用 python 数学库,所以下面是不使用它的稍微调整的代码:
# The Sieve of Eratosthenes method of calculating the primes less than the limit
def getPrimes(limit):
# The list of prime numbers
primes = []
# The boolean list of whether a number is prime
numbers = [True] * limit
# Loop all of the numbers in numbers starting from 2
for i in range(2, limit):
# If the number is prime
if numbers[i]:
# Add it onto the list of prime numbers
primes.append(i)
# Loop over all of the other factors in the list
for n in range(i ** 2, limit, i):
# Make them not prime
numbers[n] = False
# Return the list of prime numbers
return primes
# The number to find the closest prime of
number = int(input("Enter a number: > "))
# The list of primes using the function declared above
primes = getPrimes(number + 100)
# The distance away from the closest prime
maxDist = 99999999
# The closest prime
numb = 0
# Loop all of the primes
for p in primes:
# If the prime number is closer than maxDist
if abs(number - p) < maxDist:
# Set maxDist to the number
maxDist = abs(number - p)
# Set numb to the number
numb = p
# Print the output
print(numb, "is the closest prime number to the number you entered!")
Even though I didn't debug your code, the following piece of code should work to find the closest prime number:即使我没有调试您的代码,以下代码应该可以找到最接近的素数:
n = int(input("Enter n: "))
def chk_prime(n):
if n>1:
for i in range(2, n//2+1):
if n%i==0:
return False
break
else:
return True
else:
return False
if chk_prime(n):
print(f"{n} is itself a prime.")
else:
count = 1
while count<n:
holder1 = n-count
holder2 = n+count
holder1_chk = chk_prime(holder1)
holder2_chk = chk_prime(holder2)
if holder1_chk and holder2_chk:
print(f"closest primes are {holder1}, {holder2}")
break
elif holder1_chk and not holder2_chk:
print(f"closest prime is {holder1}")
break
elif holder2_chk and not holder1_chk:
print(f"closest prime is {holder2}")
break
else:
count = count + 1
First, we define a function specifically to check whether a number is prime or not.首先,我们定义一个 function 专门用于检查一个数是否为质数。 Next we initiate count = 1
and create two place-holder values by subtracting count
from original number and adding count to the original number.接下来我们启动count = 1
并通过从原始数字中减去count
并将 count 添加到原始数字来创建两个占位符值。 If both of these place-holder values are prime numbers, then we print both of them as closest primes, else the closest one between them.如果这两个占位符值都是素数,那么我们将它们都打印为最接近的素数,否则打印它们之间最接近的素数。
I think this is the best way (You can probably comprehend this with python comprehension and some library/built-ins):我认为这是最好的方法(您可能可以通过 python 理解和一些库/内置函数来理解这一点):
def is_prime(n:int) -> bool:
for i in range(int(n**0.5), 1, -2 if int(n**0.5) % 2 == 0 else -1):
if n % i == 0:
return False
return False if n in (0,1) else True
def closest_prime(nt:int) -> int:
if is_prime(nt):
return nt
lower = None
higher = None
for i in range(nt if nt % 2 != 0 else nt-1, 1, -2):
if is_prime(i):
lower = i
break
c = nt+1
while higher == None:
if is_prime(c):
higher = c
else:
c += 2 if c % 2 != 0 else 1
return higher if lower == None or higher-nt < nt-lower else lower
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.