标签:
---恢复内容开始---
让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4
1:素数就是我们常说的质数,就是智能能被1和本身整除的数,判断一个数是不是素数最简单的方法就是枚举,即将n 除2 ~ n - 1的数如果存在存在一个数能整除,就不是素数,不过这个算法效率太低,改进一下,
2:根据一个合数的因子,不会大于sqrt(n)n的开方这个定理,可以算出100000以内的素数,再大不是算不出来了而是需要等待很长时间,这样算法也就没什么意义了,
3:筛法求素数这个方法有个缺点,就是需要额外的空间去存储,首先我们要创建一个数组大小为 n + 1,boolean primer[n + 1],初始全为True,每次去最小的素数,然后把在数组 为其倍数的元素筛选掉,这里我们置为false
例如:0 ~ 30这几个数
第一个素数为2 我们筛选掉 4 6 8 10 12 14 16 18 20 22 24 26 28 30
第二个素数为3 我们筛选掉9 15 21 27
.......
直到找出全部素数
第二种方法的python代码实现:
这里我还遇到一个问题这就涉及到代码的组织方式
如果把13行的代码改为
while i * i < n:
i = i + 1
这样在oj上提交就不能通过,
这是一个值得我自己思考的问题,如果因为代码本身造成的算法效率流失只能说明,是自己的无能了。
1 #!/usr/bin/env python3 2 __author__ = ‘chao‘ 3 import math 4 5 6 def isprimer(n): 7 if n < 2: 8 return False 9 if n == 2: 10 return True 11 i = 2 12 temp = math.sqrt(n) 13 while i < temp: 14 i += 1 15 if n % i == 0: 16 return False 17 return True 18 19 20 def nofprimer(n): 21 count = 1 22 i = 1 23 if n < 3: 24 return 0 25 if n == 3: 26 return 1 27 while True: 28 temp = 6 * i + 1 29 temp2 = temp - 2 30 if temp <= n: 31 if isprimer(temp) and isprimer(temp2): 32 count += 1 33 else: 34 break 35 i += 1 36 return count 37 38 if __name__ == "__main__": 39 n = input() 40 n = int(n) 41 print(nofprimer(n))
第三种方法代码实现:
import math p_array = [True] p_array = [True] * (10000000+1) def isprimer(n): p_array[0] = False p_array[1] = False if (n < 2): return i = 2 while i < n: if p_array[i]: j = 2 temp = i * j while temp <= n: if p_array[temp]: p_array[temp] = False j += 1 temp = i * j i += 1 return def count_primer(n): count = 1 if n < 5: return 0 if n == 5: return count i = 1 while True: temp1 = 6 * i - 1 temp2 = temp1 + 2 if temp2 > n: break if p_array[temp1] and p_array[temp2]: count += 1 i += 1 return count if __name__ == "__main__": n = input() n = int(n) isprimer(n) print(count_primer(n))
刚学python练练手代码还不够规范
标签:
原文地址:http://www.cnblogs.com/code-changeworld/p/4555024.html