当前位置: 首页 > 面试题库 >

Python素数检查器[重复]

董高逸
2023-03-14
问题内容

这个问题已经在这里有了答案

如何创建最紧凑的映射n→isprime(n)直到极限N? (31个答案)

5年前关闭。

我一直在尝试编写一个将输入数字的程序,并检查它是否是质数。如果数字实际上是质数,那么到目前为止,我编写的代码可以完美地工作。如果该数字不是质数,则它的行为很奇怪。我想知道是否有人可以告诉我代码的问题所在。

a=2
num=13
while num > a :
  if num%a==0 & a!=num:
    print('not prime')
    a=a+1
  else:
    print('prime')
    a=(num)+1

输入24时给出的结果是:不是素数不是素数不是素数素数

我将如何在每个奇数而不是每个偶数的素数上报告报告素数来修复错误


问题答案:

一旦知道数字不是素数,就需要停止迭代。break一旦找到质数就添加一个,退出while循环。

只需对代码进行最少的更改即可使其工作:

a=2
num=13
while num > a :
  if num%a==0 & a!=num:
    print('not prime')
    break
  i += 1
else: # loop not exited via break
  print('prime')

您的算法等效于:

for a in range(a, num):
    if a % num == 0:
        print('not prime')
        break
else: # loop not exited via break
    print('prime')

如果将其放入函数中,则可以免除breakfor-else:

def is_prime(n):
    for i in range(3, n):
        if n % i == 0:
            return False
    return True

即使您要像这样强力求素,也只需要迭代到的平方根即可n。另外,您可以跳过测试两个之后的偶数。

这些建议如下:

import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

请注意,此代码不能正确处理01和负数。

我们通过all与生成器表达式一起使用来替换for循环,从而使此过程更简单。

import math
def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))


 类似资料:
  • 我正在用python为我的CIS类做作业。我们得给数独棋盘编码。在9x9电路板中,我们显然必须检查每一行、col和3x3正方形是否存在重复项。我对如何用3x3的正方形来检查数字的想法有点固执。下面是我检查每一行和每一列的代码,如果有人能帮我一点轮廓或一种方法,那就是检查每一个3x3的正方形,这将是惊人的!

  • 需要运行一个代码,该代码遍历从2到-number的数字,并在isPrime方法中给出一个关于输入数字的布尔值。不管我输入了什么,我总是得到“真”,7,28等等。

  • 好的,我对python和numpy还比较陌生,我想做的是取一个随机生成的整数数组,检查每个数字是否多次出现,例如如果它会告诉我6出现两次。或者如果则每个整数都是不同的。

  • 本文向大家介绍JavaScript 元素检查器,包括了JavaScript 元素检查器的使用技巧和注意事项,需要的朋友参考一下 示例 单击“开发人员工具”中的“ Chrome中的元素”选项卡或Firefox中的“检查器”选项卡左上角的“ 选择页面中的元素进行检查”按钮,然后单击页面中的元素以突出显示该元素并将其分配给该$0变量。 元素检查器可以以多种方式使用,例如: 您可以检查您的JS是否按照您期

  • 我正在尝试在python中创建一个数独检查器: 我期待这样的输入——一个9个列表的列表。零表示用户尚未填写的数字。它们可以在一行、一列或3x3中多次出现。 我显然需要检查是否有一个9x9列表(网格),以及每行、每列和3x3小正方形中是否没有重复项。在代码中,我首先检查行数是否正确(应该有9行)。然后我检查每一行中是否有9个元素(在病态示例中,您可以看到情况并非如此)。然后我尝试检查每一行中的重复项

  • 问题内容: 我现在用来检查此功能的函数如下: 有用。我正在寻找的是是否有更好的方法来做到这一点。 问题答案: ECMAScript 2016 包含一种专门用于解决问题的数组方法,因此现在是首选方法。 _从2018年7月开始,如果您需要支持IE,则可以在polyfill中使用几乎所有 主流 浏览器。 编辑:请注意,如果数组中的项目是一个对象,则返回false。这是因为相似的对象是JavaScript