赔率——计算范围内素数的概率(五种算法)

1148-张同学

发表文章数:63

首页 » 算法 » 正文

基础理论

质数(prime number)又称素数,有无限个。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除(除0以外)的数称之为素数(质数);否则称为合数。
可以通过将待检测的数x除以【2-sqrt(x)】范围内的数,余数不为0,则是素数。

代码实现

// An highlighted block

from time import time
import math

def is_prime(x):
    return 0 not in [x % i for i in range(2, int(math.sqrt(x)) + 1)]

def is_prime3(x):
    flag = True
    for p in p_list2:
        if p > math.sqrt(x):
            break
        if x % p == 0:
            flag = False
            break
    if flag:
        p_list2.append(x)
    return flag

if __name__ == "__main__":

    a = 2
    b = 10000
    
    '''统计五种方法的计算时间'''
    # 方法1:直接计算
    t = time()
    p = [p for p in range(a, b) if 0 not in [p % d for d in range(2, int(math.sqrt(p)) + 1)]]
    print(time() - t)
    print(p)

    # 方法2:利用filter(与方法1类似)
    #filter() 函数用于过滤序列,过滤掉不符合条件的元素,该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
    t = time()
    #调用is_prime
    p = filter(is_prime, range(a, b))
    print (time() - t)
    print (list(p))

    # 方法3:利用filter和lambda(与方法1类似)
    t = time()
    #lambda 匿名函数
    is_prime2 = (lambda x: 0 not in [x % i for i in range(2, int(math.sqrt(x)) + 1)])
    p = filter(is_prime2, range(a, b))
    print(time() - t)
    print (list(p))

    # 方法4:定义
    t = time()
    p_list = []
    for i in range(2, b):
        flag = True
        for p in p_list:
            if p > math.sqrt(i):
                break
            if i % p == 0:
                flag = False
                break
        if flag:
            p_list.append(i)
    print(time() - t)
    print (p_list)

    # 方法5:定义和filter(与方法4类似)
    p_list2 = []
    t = time()
    #调用is_prime3
    p = filter(is_prime3, range(2, b + 1))
    print(time() - t)
    print(list(p))

    print('******')
    print('使用第五种方法计算概率')
    
    '''使用第五种方法计算概率'''
    a = 1180
    b = 1230
    p_train= filter(is_prime3, range(2, b+1))  #定义为数组
    p_trainvalue=list(p_train)
    print('****')
    #搜索在指定范围内的素数
    p_train= [p_trainvalue[x] for x in range(len(p_trainvalue))if p_trainvalue[x]>=a]
    print( p_train)
    #计算在指定范围内素数的概率
    p_rate = float(len(p_train)) / float(b-a+1)
    print('素数的概率:', p_rate, '/t',)
    print ('公正赔率:', 1/p_rate)
    print ('合数的概率:', 1-p_rate, '/t',)
    print ('公正赔率:', 1 / (1-p_rate))

赔率——计算范围内素数的概率(五种算法)

未经允许不得转载:作者:1148-张同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《赔率——计算范围内素数的概率(五种算法)》 发布于2020-07-17

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录