python - 素数指示器将大量非素数指示为素数
问题描述
def main():
try:
a = int(input())
if isinstance(a, int):
a = int(a)
if a ==2:
print('YES')
if a > 1:
for i in range(2, a):
if a % i == 0:
print('NO')
break
else:
print('YES')
break
else:
print('NO')
else:
print('NO')
except EOFError:
print('NO')
except ValueError:
print('NO')
main()
这段代码正在工作,但它正在计算大量数字作为素数,例如 3456734572525。5 个测试用例中有 4 个是成功的。首先我认为它在 0 或十进制数字上失败,但事实并非如此。
解决方案
for 循环永远不会运行到最后,因为无论a % i == 0
您是否会中断循环。您应该将您print("YES")
的循环移出并使用return
enstead ofbreak
来确保您的函数在循环中断时不会运行此代码。试试这个:
def main():
try:
a = int(input())
if isinstance(a, int):
a = int(a)
if a ==2:
print('YES')
if a > 1:
for i in range(2, a):
if a % i == 0:
print('NO')
return
print('YES')
return
else:
print('NO')
else:
print('NO')
except EOFError:
print('NO')
except ValueError:
print('NO')
main()
推荐阅读
- multithreading - 关闭通话不会释放设备的底层资源
- pyomo - 从数据框列定义 pyomo 参数
- react-native - 如何在不同设备上使用绝对位置将图像对齐到另一个上方
- cakephp - Cakephp 4.x Conditional $rules->isUnique(['email'] 仅适用于 add 而不是 buildRules 中的 udate 操作
- selenium - 无法执行脚本 selenium,因为:“设备运动事件被功能策略阻止。”
- monogame - 单声道游戏中发生碰撞时如何停止视差滚动?
- import - 导入另一个脚本的脚本会得到 ModuleNotFoundError
- c# - Xamarin Forms IValueConverter:处理转换错误
- python - 在包含字符串的数据框中获取 n 个最高值
- azure-devops - 如何克隆阶段但在 azure dev ops 2019 中具有工件的链接