python - 素性测试算法失败
问题描述
我创建了一个简单的素数测试算法,但是对于像 15 这样的数字它失败了。为什么?
number = int(input("Test if Prime: "))
print ("Is " + str(number) + " Prime?: ")
for i in range (2, number):
if number % i == 0:
print ("No")
break
else:
print ("Yes")
我尝试了一个带有其他变体的 elif 语句,但它仍然不起作用:
number = int(input("Test if Prime: "))
print ("Is " + str(number) + " Prime?: ")
for i in range (2, number):
if number % i == 0:
break
elif number % i != 0:
print ("Yes")
任何帮助表示赞赏。
解决方案
你在循环中有你的 else 条件。在任何时间点,它只会检查一个值......
修改你的 for 循环以打印出它正在检查的数字:
for i in range (2, number):
print (i)
if number % i == 0:
print ("No")
break
else:
print ("Yes")
打印出来(数字 = 15):
2
Yes
3
No
如果它打印出“否”数字,你就知道它有效 - 1次
要稍微修改您所做的,我们可以将其更改为:
flag = False
for i in range (2, number):
if number % i == 0:
print ("No")
flag = True
break
if (!flag)
print("Yes")
所有这一切都是将 print 语句推到循环之外(对于一个素数,它必须不能被小于它的所有数字整除)。该标志确保您只打印出 True 或 False(您不想同时打印出两者)
推荐阅读
- xpath - “导入的内容为空”
- xamarin.forms - 使用 Flurl 从 SharePoint 下载文件会导致“配置系统初始化失败”错误
- assembly - 使用 DOSBOX 汇编 16 位内存的工作原理
- javascript - 映射对象数组返回未定义
- javascript - 电子“-webkit-app-region:拖动”在 BrowserView 内容中不起作用
- python - Scrapy - pymongo 没有将项目插入数据库
- c# - 目标进程退出但未引发 CoreCLR 启动事件 - 尝试在 Visual Studio 中运行基于硒的测试时输出错误
- javascript - Rust wasm:返回两个 `Uint8Array`
- neo4j - 如何遍历特定标签的节点并显示有多少不同的节点连接到它(Neo4j)
- python - 使用 DASH 在一页上显示两个数据框