社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python中最接近的素数

Si Random • 5 年前 • 2124 次点击  

我需要一个用户输入一个数字,并输入与他们输入的值最接近的素数。我正在努力研究如何在输入的数字前后检查素数。最后一部分是打印两个质数的较小值,如果它们与输入的数字的距离相同。

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))
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53602
 
2124 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Pencilcaseman
Reply   •   1 楼
Pencilcaseman    5 年前

如果我正确地理解了你的问题,你就是在试图找到一种方法来找到与输入的号码最接近的号码。如果是这样的话,埃拉托申斯筛法计算出给定范围内的所有质数,然后找到你输入的质数

# 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!")

我希望这能回答你的问题

您说过不能使用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!")

Arkistarvh Kltzuonstev
Reply   •   2 楼
Arkistarvh Kltzuonstev    5 年前

即使我没有调试您的代码,以下代码也应该能够找到最接近的素数:

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

首先,我们定义了一个函数来检查一个数是否是素数。接下来我们开始 count = 1 count