python判断孪生质数对(素数对)并计算个数。

博客介绍了如何利用数学知识优化Python程序,以快速判断并计算不超过特定数值N的孪生质数对(差为2的素数对)数量。通过逐步排除偶数、能被3和5整除的奇数,以及利用孪生质数的性质,将原本超过10秒的程序优化到85毫秒,展现了算法优化的重要性。
摘要由CSDN通过智能技术生成

很久前在知乎写的一个答案,今天把坑填了,顺便搬过来。

让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。
“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<10^5), 请计算不超过N的满足猜想的素数对的个数。

而且题目还限制了400ms时间(有没有搞错(╯‵□′)╯︵┻━┻)

写出的第一个程序在最大值情况下运行时间超过10秒 (;′⌒`)

后来在网上看到了一个人的回答,使用到了初中时学到的数学知识:

假如一个数N是合数,它有一个约数a,那么有a×b=N
则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N。
因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数。
原谅我数学没学好,依照这个思路 我写了下面这个程序:

import math   #使用 math 模块来开平方
import time   #计算程序运行时间
num = int(input())    #输入一个整数
s = 0                 #计算质数对的个数
start = time.time()    #计算开始时间


def f1(n):
    if n <= 1:
        return False
    else:
        for i in range(2, int(math.sqrt(n)) + 1):   #这里 +1是将开方后的结果包含在内
                if n % i == 0:
                    return False              
        return True           


for i in range(1, num+1):
    if<
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值