【问题标题】:function to check if a number is prime not giving output [duplicate]检查数字是否为素数的函数不给出输出[重复]
【发布时间】:2022-01-08 21:34:00
【问题描述】:

我正在尝试编写一个函数来检查一个数字是否为素数,并编写了以下函数。但是,尽管该函数在定义它时不会引发错误,但在使用输入参数运行时它不会执行(例如 23)。已尝试在内核继续运行的 Jupyter 笔记本上运行它,以及在在线编辑器中出现错误“错误:命令失败:超时 7 python3”。我无法看到可能的问题,例如与 0 的除法等。您能帮忙吗?

def prime_check(num):
    
    prime =True
    while prime==True:
        for i in range(2,num):
            if num%i ==0:
                prime=False
                break
    return prime

【问题讨论】:

  • 这能回答你的问题吗? Check if number is prime number
  • 真的,在这里简单搜索一下primepython 会产生几十个结果。
  • 但是这里的问题是为什么编码结束到无限循环。是的,互联网上充满了如何找到素数的精美代码示例。但是我们中的许多人在训练编码时仍然做过这种程序。

标签: python primes


【解决方案1】:

想想当你有素数时你的代码会发生什么。它永远不会退出 while 循环。

这可以工作

def prime_check(num):
  for i in range(2,num):
    if num%i == 0:
       return False
  return True

您可以做很多事情来优化您的代码。改进算法是很好的培训。数学和编码的完美结合。

我们知道 3227873423 是素数。尝试像这样运行您的代码。

import time
def timer():
    start_time = time.time()
    prime_check(3227873423)
    end_time = time.time()
    return end_time-start_time

timer()

这会以秒为单位返回您的代码进行测试所需的时间。你可以改进你的代码,看看你能多快得到它。不要忘记测试它是否在优化后也能返回正确的结果。

您可以从这里获得用于测试的大素数:https://bigprimes.org/

【讨论】:

  • @Jan 不是真的,他在问为什么它不起作用,这是导致无限循环的问题
  • 好吧,oneliner 的答案并不好。我添加了改进的代码,所以骨头上会有更多的肉。
  • @ex4 - 感谢您的详细解释,真的很有帮助
【解决方案2】:
while prime==True: # if a prime is True this loop will continue forever
    for i in range(2,num):
        if num%i ==0:
            prime=False
            break

我建议保留 while prime == True: 部分

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2015-09-30
    • 2021-06-22
    • 2023-04-08
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多