返回严格小于n的素数数的函数

时间:2017-10-07 10:09:23

标签: python python-3.x

ProxyPass /public-server-proxy http://192.168.1.1:80/my-dir
ProxyPassReverse /public-server-proxy http://192.168.1.1:80/my-dir
ProxyPassReverseCookiePath  /public-server-proxy /

问题在于nbPremiers,如果n = 2,当它应该为0时,它返回给我2。第一个函数是正确的,它们完全按照我的意愿工作。最后一个是计算严格小于n的原始数字。

2 个答案:

答案 0 :(得分:2)

所有这些功能都可以写成一行:

from math import sqrt

def is_divisor(i,n):
    return n % i == 0

def is_prime(n):
    return n >= 2 and not any(is_divisor(i, n) for i in range(2,int(sqrt(n)) + 1))

def primes_count(n):
    return sum(1 for x in range(2,n+1) if is_prime(x))

print(primes_count(100))
# 25

无论您来自哪个国家/地区,使用英语编写功能名称通常都是个好主意,特别是如果您在国际英语网站上提问。

请注意,您只需要检查2和sqrt(n)之间的除数。

更有效的方法是使用sieve of Erathostenes

最后,此prime-counting function通常定义为低于或等于n的素数。

答案 1 :(得分:1)

你的代码中有几个错误;其中一个与in混淆 - 使用更好的参数名称会对你有帮助。

请注意0和'1'不是素数。

def est_diviseur(diviseur, n):
    return n % diviseur == 0

def est_premier(n):
    b = 0
    if n < 2:
        return False
    for diviseur in range(1, n+1):
        if est_diviseur(diviseur, n) == True:
            b = b + 1
    if b > 2:
            return False
    else:
            return True

def nb_de_premiers_inferieurs_a(nombre):
    """retourne le nombre de nombres premiers inferieurs a n
       returns the number of primes whose value is lower than n
    """
    compteur = 0
    for n in range(nombre):
        if est_premier(n):
            compteur += 1
    return compteur

for n in range(20):
    print(n, est_premier(n), nb_de_premiers_inferieurs_a(n))

输出:

0 False 0
1 False 0
2 True 0
3 True 1
4 False 2
5 True 2
6 False 3
7 True 3
8 False 4
9 False 4
10 False 4
11 True 4
12 False 5
13 True 5
14 False 6
15 False 6
16 False 6
17 True 6
18 False 7
19 True 7