使用此代码,我只能测试用户输入的数字是否为素数。 如何为我的原始代码添加另一个循环,以便找到小于或等于用户输入的数字的所有素数?
<canvas id="game_canvas" style="width:512px;height:512px;"></canvas>
答案 0 :(得分:0)
你不能在一个循环中打印,你可以做一件事在当前循环上面添加一个循环并显示每个数字:
num = int(input("Enter a number: "))
if num > 1:
prime = True
for n in range(2, num):
if (num % n) == 0:
print ("Number", num, "is not prime")
break
else:
print("Number", num, "is prime")
#your current code ends here
for j in range(2, num + 1):
# prime numbers are greater than 1
for i in range(2, j):
if (j % i) == 0:
break
else:
print(j)
答案 1 :(得分:0)
除了小事(未使用的布尔变量)之外,您的主要测试也是超级低效的。 让我们一步一步来看看。
首先:要测试数字是否为素数,您无需检查除数之前的所有整数。实际上,上升到sqrt(num)
就足够了。我们可以编写一个单行函数来查明数字是否为素数如此:
from numpy import sqrt
def is_prime(n):
return n > 1 and all(n%i for i in range(2,int(sqrt(n))+1))
range(2,some_num)
通过从2到some_num-1
的所有数字给出一个迭代器,并且all()函数检查该迭代器中的语句n%i
是否为真,并返回一个布尔值。如果你可以保证永远不会传递偶数,你可以从3开始范围(当然失去了一般性)。即使您不想使用该功能,将功能分离到不同的功能也更清晰,因为在输入数字的循环中,您可能必须分别检查每个数字是否为素数。
第二:从这里开始,找到所有小于或等于输入的素数应该非常简单。
num = int(input("Enter a number:"))
assert num>0, "Please provide a positive integer" # stops with an assertion error if num<=0
prime_lst = [2] if num > 1 else []
for x in range(3,num+1,2):
if is_prime(x):
prime_lst.append(x)
列表prime_lst
将包含您所需的所有素数。我从1开始循环,这样我只能循环奇数,偶数可以被2整除。所以这样,没有数字可以被2整除。不幸的是,这需要我检查数字本身是否为2,这是一个素数。通过双素猜想,我们无法在不知道输入的情况下进一步简化这个范围。
最后:如果您真的想在一个循环中找到素数,请将您的循环更改为以下内容:
prime_lst = [2] if num > 1 else []
for x in range(3,num+1,2): # outer loop
for i in range(3,int(sqrt(x))+1): # inner loop for check if x is prime
if x%i == 0:
break # breaks the inner loop, number is not prime
else:
prime_lst.append(x)
编辑:看到第二个答案here有一个很好的解释(以及更好的方法)来编写单行代码以查明数字是否为素数。< / p>
答案 2 :(得分:0)
你的代码只检查输入的数字是否为素数,但你质疑是否要获得从2到n的素数(n =用户输入的数字),为此你在标志位的帮助下运行下面的代码它会很少有点容易。我希望它会对你有所帮助。
试试这个我运行此代码它肯定会帮助你在 python 3.0 或以上
找到你的答案num = int(input("Enter The Number"))
if num > 1:
num = num+1
list = []
for j in range (2,num,1):
flag = 0
for i in range (2,int(j/2)+1,1):
if(j%i)== 0:
flag = 1
break
if flag==0:
list.append(j)
print(list)
else:
print("Enter Number Greater Than 1")