PAT 素数对猜想 (Python)

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:
4

Analysis:

1和0不是素数也不是合数,每个大于1的正整数都可以写成素数的乘积

- 一般方法,整除2~sqrt(n) O(n*sqrt(n)),(m*n=p,m,n=mid或者m,n之中必定有一个值是小于mid的)

- 埃氏素数筛选,选取第一个未被处理的数,然后判断是否是素数(m<sqrt(n)),如果是存储,并将该数和能被该数整除的元素去掉,O(nloglogn),空间复杂度是O(n)

小于n的素数倒数和是loglogn

- 无重复筛选,线性筛选,O(n)

如果x与n互质,那么n-x也与n互质


http://blog.csdn.net/zmazon/article/details/8290774

http://blog.csdn.net/nk_test/article/details/46242311

http://bbs.csdn.net/topics/340202337

http://wenku.baidu.com/link?url=KgTW4k4JLM5RfBy-n0MFdMJhhIRUXPzOP3Wo2rgIMjpDf5N0YKiEtQWjUDzysHoUBPC3vd0V7m9AQdxC01dTAqVWYHeHVtmqOFiUGpNl_e7

http://www.bubuko.com/infodetail-837565.html


Solution:

import math
def isPrime(n):
	m=int(math.sqrt(n))
	for i in range(2,m+1):
		if n%i==0:
			return False
	return True

def getPairNum(N):
	pnum,ls,tmp=0,[],0
	for i in range(2,N+1):
		if isPrime(i):
			ls.append(i)
			tmp+=1
			if tmp>1 and ls[tmp-1]-ls[tmp-2]==2:
				pnum+=1
	print pnum

input=int(raw_input())
getPairNum(input)
		




















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值