首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别素数和非素数的循环生成错误输出

识别素数和非素数的循环生成错误输出
EN

Stack Overflow用户
提问于 2019-03-25 16:43:17
回答 1查看 51关注 0票数 1

我正在编写代码来识别给定列表中的质数和非质数。这个想法是使用一个嵌套的for循环,该循环遍历列表并根据2n-1范围内的数字对其进行检查,其中n是要检查的数字。

不幸的是,我想出的代码,在执行时,没有产生预期的输出,我似乎找不到原因。

代码语言:javascript
复制
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))

我希望得到带有质数或非质数语句的每个值的输出,但实际上我只得到了非质数语句,而且即使这样它们也是假的:

代码语言:javascript
复制
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

显然,我的逻辑中有一个错误,但我看不到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 16:46:51

x == number-1不能为true,因为x的范围仅限于number-2

此外,不需要检查该数字,检查平方根(包括),这大大减少了复杂性和计算时间的情况下的巨大的数字,并使用else语句的内部for循环,如果没有发生break,你知道数字是质数:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55333981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档