在Python中检查数字是否是列表中的素数

时间:2017-02-06 22:20:41

标签: python python-3.x

我写了下面的代码,应该检查列表中的数字是否是素数,但是有一个问题我无法通过,因为我正在尝试实现检查的优化num的平方根,我有一个类型错误。

<html>
<head>
<script src="http://code.jquery.com/jquery-1.12.0.min.js"></script>
</head>
<body>
<table width="100%">
<td>Bitstamp</td>

<?php
$url = "https://www.bitstamp.net/api/ticker/";
$fgc = file_get_contents($url);
$json = json_decode($fgc, true);
$price = $json["last"];
?>

<td><?php echo $price; ?></td>
</table>
</body>
</html>
def is_prime(x):
    if x <= 1:
        return False
    if x == 2:
        return True
    for n in range(3, x**(0.5)+1, 2):   # this skips even numbers and only checks up to sqrt(x)
        if x % n == 0:
            return False
    return True


my_list = [1,2,4,5,6,7]
result = list(map(is_prime,my_list))

print(result)

3 个答案:

答案 0 :(得分:4)

x**(0.5)+1不是整数,因此range无法生成列表。

尝试四舍五入:

from math import ceil
def is_prime(x):

    if x <= 1:
        return False
    if x == 2:
        return True
    for n in range(3, ceil(x**(0.5)), 2):   # this skips even numbers and only checks up to sqrt(x)
        if x % n == 0:
            return False
    return True


my_list = [1,2,4,5,6,7]
result = list(map(is_prime,my_list))

print(result)

答案 1 :(得分:0)

表达式:

range(3, x**(0.5)+1, 2):
由于

升级为浮点类型

x**(0.5)

对于您想要的行为,您需要再次将其设为int,请尝试:

range(3, int(round(x**(0.5)+1)), 2):

其中

int(x)

告诉python你想把x解释为整数类型

round(x)

将最接近的整数返回给x。

请注意,舍入可能不是您所期望的:

https://docs.python.org/2/library/functions.html#round

答案 2 :(得分:0)

enter image description here 如果该数字是质数,则检查列表中的数字并将质数附加到列表中。