循环识别素数和非素数生成错误输出
Loop identifying primes and non-primes generates false output
我正在编写代码来识别给定列表中的质数和非质数。
这个想法是使用一个嵌套的 for
循环遍历列表并根据 2
到 n-1
范围内的数字检查它,其中 n
是要被检查。
不幸的是,我想出的代码在执行时没有产生预期的输出,我似乎无法找到原因。
check_prime = [26, 39, 51, 53, 57, 79, 85]
## write your code here
## HINT: You can use the modulo operator to find a factor
for number in check_prime:
for x in range (2,number-1):
if (number %x) ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
elif x == number-1:
print ("{} is a prime number".format(number))
我希望通过质数或非质数语句获得每个值的输出,但实际上我只得到非质数语句,即使那样它们也是假的:
26 is not a prime because 2 is a factor of 26
39 is not a prime because 3 is a factor of 39
51 is not a prime because 3 is a factor of 51
57 is not a prime because 3 is a factor of 57
85 is not a prime because 5 is a factor of 85
我的逻辑明显有错误,但是我看不出来
x == number-1
不可能为真,因为 x
的范围仅为 number-2
。
此外,不需要检查到那个数字,检查到平方根(包括),这在巨大数字的情况下大大降低了复杂性和计算时间,并使用 else
语句用于内部 for
循环,no if no break
happened, you know the number is prime:
for number in check_prime:
for x in range (2,int(number**0.5)+1):
if number % x ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
else:
print ("{} is a prime number".format(number))
这修复了您的代码。您可以阅读有关此经典质数问题的更多信息:Checking if a number is a prime number in Python
我正在编写代码来识别给定列表中的质数和非质数。
这个想法是使用一个嵌套的 for
循环遍历列表并根据 2
到 n-1
范围内的数字检查它,其中 n
是要被检查。
不幸的是,我想出的代码在执行时没有产生预期的输出,我似乎无法找到原因。
check_prime = [26, 39, 51, 53, 57, 79, 85]
## write your code here
## HINT: You can use the modulo operator to find a factor
for number in check_prime:
for x in range (2,number-1):
if (number %x) ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
elif x == number-1:
print ("{} is a prime number".format(number))
我希望通过质数或非质数语句获得每个值的输出,但实际上我只得到非质数语句,即使那样它们也是假的:
26 is not a prime because 2 is a factor of 26
39 is not a prime because 3 is a factor of 39
51 is not a prime because 3 is a factor of 51
57 is not a prime because 3 is a factor of 57
85 is not a prime because 5 is a factor of 85
我的逻辑明显有错误,但是我看不出来
x == number-1
不可能为真,因为 x
的范围仅为 number-2
。
此外,不需要检查到那个数字,检查到平方根(包括),这在巨大数字的情况下大大降低了复杂性和计算时间,并使用 else
语句用于内部 for
循环,no if no break
happened, you know the number is prime:
for number in check_prime:
for x in range (2,int(number**0.5)+1):
if number % x ==0:
print("{} is not a prime because {} is a factor of {}".format(number,x,number))
break
else:
print ("{} is a prime number".format(number))
这修复了您的代码。您可以阅读有关此经典质数问题的更多信息:Checking if a number is a prime number in Python