Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 校验素数_Python - Fatal编程技术网

Python 校验素数

Python 校验素数,python,Python,这段代码在大多数情况下都能工作,但当输入n=133时,它作为输出返回True。请告诉我错误。请注意,您的代码可能在循环的第一次迭代中返回True,您需要检查其他值。不确定为什么要查看这些值,您可以按如下方式编写此程序 def isPrime(n): if n>1: for i in range(2,n): if (n % i==0): return False else:

这段代码在大多数情况下都能工作,但当输入n=133时,它作为输出返回True。请告诉我错误。

请注意,您的代码可能在循环的第一次迭代中返回True,您需要检查其他值。

不确定为什么要查看这些值,您可以按如下方式编写此程序

def isPrime(n):
    if n>1:
        for i in range(2,n):
            if (n % i==0):
                return False
            else:
                return True
    else:
        return False
您可以使用以下方法测试代码

def isPrime(n):
    if (n % 2 == 0):
        return True
    else:
        return False 

让我们看看你的循环是如何工作的。 对于值3,您的循环将有n%i检查,即
3%2,它不满足条件
。因此它将返回
true
。 但是
用于值,例如9
。循环将检查
9%2=0
,它再次不满足条件,并且
返回True
。 因此,使用类似的方法

prime = isPrime(133)

print(prime)

所以我运行了这个函数,这个函数对于任何奇数都会返回True,因为它在第一次迭代时返回false,这是检查它是否可以被2整除。总的来说,您的函数是非常错误的,下面是我将如何处理它

def isPrime(n):
    if n>1:
        for i in range(2,n):
            if (n % i==0):
                return False
            else:
                x=False
        return x;
    else:
        return False

在这里,我只检查了素数因子直到数字的平方根(因为如果一个数字的素数因子大于其平方根(但不是数字本身),那么它的素数因子也必须小于其平方根,所以我们不需要进一步检查),当循环被某些东西整除时,我就退出循环。我检查了,它工作正常。

循环的问题是,当您迭代for循环时,它总是返回True或False。为了防止这种情况,您应该创建一个计数器,相应地更改其值

def isPrime(n):
    div = True 
    for i in range(2,int(n**0.5)):
        if n%i==0:
            div = False
            break
    return div
def PrimeChecker(n):
如果n<1:
返回值f'{n}小于1。所以,不是素数“#如果你
#需要。
其他:
对于范围(2,n)中的i:#主循环
计数器=真#计数器
如果n%i==0:#如果它变为可除。。。。
计数器=假#计数器变为假。
断开
返回计数器#返回False或True

希望对您有所帮助:)

最高效的Primechecker程序:)

从数学导入sqrt
def checkprime(x):
如果x>2且x%2==0:
返回错误
elif x<2:
返回错误
其他:
对于范围(2,int(sqrt(x))+1)内的i:
如果x%i==0:
返回错误
返回真值
返回错误

检查n=9。看看你能不能在没有我们帮助的情况下解决这个问题。你肯定会学到更多。检查除2以外的任何数字…一个小优化将使用
范围(2,n,2)
,除2之外的所有偶数都不是素数;)您的iPrime函数不正确,无法以这种方式返回True
def PrimeChecker(n):
    if n < 1:
        return f'{n} is less than 1. So, not prime'  # You can add this if you 
        # want.

    else:
        for i in range(2, n):  # The main loop
            counter = True  # The counter
            if n % i == 0:  # If it becomes divisible....
                counter = False # Counter becomes false.
                break  # Break out of loop

        return counter  # Return False or True
from math import sqrt
def checkprime(x):
    if x > 2 and x % 2 == 0:
        return False
    elif x < 2:
        return False

    else:
        for i in range(2, int(sqrt(x)) + 1):
            if x % i == 0:
                return False
        return True
    return False