首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中最近的素数

Python中最近的素数
EN

Stack Overflow用户
提问于 2019-11-03 22:05:30
回答 2查看 6.9K关注 0票数 0

我需要一个用户输入一个数字,并输入最接近的质数,他们输入的值。我正在努力检查他们输入的数字之前和之后的质数。最后,如果两个质数与输入数字的距离相同,则打印两个质数中较小的值。

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-03 23:49:38

如果我没有理解错你的问题,你正在尝试寻找一种方法来找到与输入数字最接近的数字。如果是这种情况,则使用Eratosthenes的Sieve方法来计算给定范围内的所有质数,然后根据您输入的数字找到质数

代码语言:javascript
复制
# 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数学库,所以下面是不使用它的略微调整的代码:

代码语言:javascript
复制
# 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!")
票数 0
EN

Stack Overflow用户

发布于 2019-11-03 23:50:07

即使我没有调试您的代码,下面这段代码应该可以找到最接近的质数:

代码语言:javascript
复制
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并将count添加到原始数字来创建两个占位符值。如果这两个占位符值都是质数,那么我们将它们都打印为最接近的素数,否则打印它们之间最接近的一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58680930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档