【发布时间】:2020-02-22 22:04:57
【问题描述】:
这里是python初学者,其实是一个非常初级的编程学生。我有一个任务是编写一个程序来确定输入的数字是否是质数。我粘贴了下面的代码。午夜前到期,所以我已经按原样上交了,但为了我自己,我仍然想改进/学习。我想知道如何在仍然是“while 循环”的同时将其从蛮力方式中取出。我遇到的几个问题是我尝试使用平方根计算,但一切都返回错误。我试过打印“是素数”,否则“不是素数”总是被顶起。我下面的内容确实有效,但它不是“有效的”。无论如何,我感谢任何帮助。
def is_prime():
inp = input("Enter your number: ")
if not (inp.isdigit() and float(inp).is_integer() and float(inp) > 1):
raise ValueError("Not an integer, try again")
val = int(inp)
i = val - 1
ret = True
while(i > 1):
if(val % i == 0):
ret = False
i = i -1
return ret
print(is_prime())
【问题讨论】:
-
你可以从跳过所有偶数开始
-
查看eratosthenes算法的筛子en.wikipedia.org/wiki/Sieve_of_Eratosthenes
-
运行到我的 sqrt 并在你第一次返回 false 时返回
-
@abhilb:这对于查找所有质数到极限是很好的,但是如果您只想检查单个数字的质数,它会做很多不必要的工作。 (尽管如此,它还是值得一试的,即使它是针对这项特定工作的错误工具。)
-
顺便说一句,您在这里要求的是真正的代码审查,它有一个专门的site,尽管有很多重叠,这是一个非常体面的问题无论是在这种情况下,因为你确实有一个特定的问题。