【发布时间】:2019-10-12 06:21:55
【问题描述】:
我正在尝试编写一个程序,该程序将使用一个非常简单的公式来判断一个数字是否为素数:将数字 (x) 除以 4。查看从 1 到 x/4 的任何数字是否完全除以 x .如果不是,x 将是素数。
该程序目前向我显示了将 x 除以从 1 到 x/4 的每个数字的结果。我想这样做:如果有一个可以完美分割的数字,打印 x 不是素数并结束程序。或者如果没有除以 x 的数字,只需说 x 是质数并结束程序。
我尝试使用布尔值,但随后它将每个数字都显示为素数,它不应该这样做,因为程序还不知道 x 可以完全除以 1 但仍然是素数。
value = int(input("Type a number: "))
# prime = True
if value.__class__ == int:
x = value / 4
list = list(range(1, int(x) + 1))
for number in list:
y = value / number
while y >= 0:
y -= 1
if y == 0:
print(f"{value} is not prime")
# print("yes")
# y == -1
elif 0 < y < 1:
print(f"{value} is prime")
# print("no")
# if prime:
# print(f"{value} is prime")
# else:
# print(f"{value} is not prime")
【问题讨论】:
-
欢迎来到 StackOverflow。不幸的是,您对所需算法的描述不清楚。你写“看看从 1 到 x/4 的任何数字是否能完全除以 x。如果不是,x 将是素数。”但是
x将大于这些数字中的任何一个,因此它们中的任何一个都不会完美地被除以x。您的意思是“完全分成x”吗?如果是这样,1可以完美地划分为任何数字。最后,x=4和x=6和x=9的明显算法失败。请澄清。 -
顺便说一句:你应该摆脱
if value.__class__ == int。首先,您已经将输入转换为 int。如果它无法转换为 int,您将在那里得到一个 ValueError 并且永远不会到达有问题的行。其次,这不是您应该检查对象类的方式。isinstance(x, int)是一种选择,但根据您在极端情况下想要的行为类型,有几种不同的选择。 -
设置
y = value / number并将y减1直到小于1,然后检查它是否为0是写if value % number == 0:的一种非常慢的方法。 (%得到除法的余数。) -
@RoryDaulton 你是对的。它应该是相反的。一旦我知道我当前的代码有什么问题,我就会用 1 来解决这个问题。我不知道为什么它与 4、6 或 9 的行为不同。我想知道我的程序在幕后到底在做什么,但我对此一无所知。