检查整数是否为质数,如果不是则返回最小因数

问题描述

我需要检查给定的整数是否是质数,如果是,则返回True。如果不是,我需要找到大于1的最小因子。我是完全陌生的,即使代码编译失败了几个测试用例。

MultiWorkerMirroredStrategy

解决方法

素数是一个只能除以一个数和本身的数。因此,如果我们测试x,则应该测试每个数字y,使得1 < y < x。一个很好的测试方法是使用for循环。这是一个示例:

def isPrime(n):
    for i in range(2,n):
        if n % i == 0:
            return False # because that means that something divides into n perfectly
    return True

这有一些问题:

  • isPrime(1)返回True
  • 任何负数将返回True
  • 随着数字变大,程序会变得相当慢。例如,完成isPrime(1000003)花费0.145秒,但是素数需要更长的处理时间,因为一旦找到一个因数,整个函数就会停止并返回,而要找到素数,它必须运行直到n为止的每个迭代。

我暂时将那些问题留给您。同时,我们需要一种返回最小因子的方法。实际上,这很容易做到:

def isPrime(n):
    for i in range(2,n):
        if n % i == 0:
            return i # i at this iteration is equal to the smallest factor
    return True
 

因此,isPrime(20)返回2,而isPrime(19)返回True。希望这能满足您的需求。