我需要通过单独验证它们并为它们打印相同来测试数组中的元素是否为素数。
为此,我需要考虑元素的数量 接受数组中的元素 比我需要验证数组中的元素是否为素数
请在下面找到我的代码:
T = int(raw_input())
arr=[]
for i in range(0,T):
arr.append(int(raw_input()))
for n in arr:
for j in range(2, n):
if n % j == 0:
print 'Not prime'
break
else:
print "Prime"
break
输入:
2
31
33
预期输出:
Prime
Not prime
我的输出:
Prime
Prime
我在这里做错了什么?
答案 0 :(得分:3)
你不会遍历所有候选人,因为你总是在第一次迭代中破解,无论模数是多少。相反,只有在数字不是素数的情况下才会中断,如果循环完成则数字为素数:
for j in range(2, n):
if n % j == 0:
print 'Not prime'
break
else:
print "Prime"
答案 1 :(得分:2)
在你当前的代码中,你试图在循环的每一次迭代中打印素数或不素数。你真正想做的是循环数字,如果你的数字是可分的,那么数字不是素数,如果你设法循环遍历整个列表而不返回,那么你知道数字是素数。
使用isPrime函数
可以最好地解决这个问题将它放在代码顶部
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
return True
然后将底部更改为:
for n in arr:
if isPrime(n):
print("Prime")
else:
print("Not prime")
答案 2 :(得分:1)
您可以使用AKS算法:
def isprime(n):
if n == 2:
return "Prime"
if n == 3:
return "Prime"
if n % 2 == 0:
return "Not Prime"
if n % 3 == 0:
return "Not Prime"
i = 5
w = 2
while i * i <= n:
if n % i == 0:
return "Not Prime"
i += w
w = 6 - w
return "Prime"
答案 3 :(得分:1)
让我们手动为输入33运行代码。
当它进入内部for循环for j in range(2,n)
时,它在检查j = 2后退出,因为33%2 == 0不是真的,它进入else语句,打印&#34; Prime&#34;并退出内部for循环。
所以正确的代码是:
T = int(raw_input())
arr=[]
for i in range(0,T):
arr.append(int(raw_input()))
for n in arr:
i = 0 # check variable = 1 if n is found to be prime else 0
for j in range(2, n):
if n % j == 0:
i = 1 # found that n is prime. So set i to 1
print 'Not prime'
break
if i == 0: # check if n did not turn out to be divisible by any number
print 'prime'
其他信息:您只需检查2
至square_root(n)
(python中的x**0.5
),而不是查看n
想要加快你的代码。