欧拉计划 50
来源:互联网 发布:《淘金记》知乎 编辑:程序博客网 时间:2024/04/27 21:59
41这个质数,可以写作6个连续质数之和:
41 = 2 + 3 + 5 + 7 + 11 + 13
这是100以下的最长的和为质数的连续质数序列。
1000以下最长的和为质数的连续质数序列包含21个项,和为953.
找出100万以下的最长的何为质数的连续质数序列之和。
100万以下的哪个质数能够写成最长的连续质数序列?
import mathimport timedef is_prime(x): """ 是否质数 """ if x == 1: return False if x == 2: return True assert math.floor(x) == x and x > 0 x_sqrt = int(math.sqrt(x)) l = [2] l.extend(range(3, x_sqrt + 1, 2)) for i in l: if x % i == 0: return False return Truedef get_primes(n): """ n以下所有质数集 """ n_set = set(range(3, n, 2)) n_set.add(2) for i in range(3, n+1, 2): if i in n_set: i_set = set(range(i * 2, n, i)) n_set -= i_set n_list = list(n_set) n_list.sort() return n_list #t0 = time.time()#n = 10 ** 6#prime_list = [2]#prime_list.extend([i for i in range(3, n, 2) if is_prime(i)])#max_len = 1#prime_max_len = 2#for inx, prime in enumerate(prime_list):# # frist# for i in range(inx // max_len):# primes_sum = 0# for j in range(i, inx):# primes_sum += prime_list[j]# if primes_sum >= prime:# break# if primes_sum == prime:# if j - i + 1 > max_len:# max_len = j - i + 1# prime_max_len = prime#print(prime_max_len, max_len)#t1 = time.time()#print(t1 - t0)t0 = time.time()n = 10 ** 6prime_list = [2]prime_list.extend([i for i in range(3, n, 2) if is_prime(i)])max_len = 1prime_max_len = 2for inx, prime in enumerate(prime_list): primes_ele = prime_list[0: max_len] primes_sum = sum(primes_ele) for j in range(max_len, inx): primes_ele.append(prime_list[j]) primes_sum += prime_list[j] while primes_sum > prime: if len(primes_ele) <= max_len + 1: break primes_sum -= primes_ele[0] primes_ele.pop(0) if primes_sum >= prime: break if primes_sum == prime: if len(primes_ele) > max_len: max_len = len(primes_ele) prime_max_len = primeprint(prime_max_len, max_len)t1 = time.time()print(t1 - t0)t0 = time.time()n = 10 ** 6prime_list = get_primes(n)max_len = 1prime_max_len = 2for inx, prime in enumerate(prime_list): primes_ele = prime_list[0: max_len] primes_sum = sum(primes_ele) for j in range(max_len, inx): primes_ele.append(prime_list[j]) primes_sum += prime_list[j] while primes_sum > prime: if len(primes_ele) <= max_len + 1: break primes_sum -= primes_ele[0] primes_ele.pop(0) if primes_sum >= prime: break if primes_sum == prime: if len(primes_ele) > max_len: max_len = len(primes_ele) prime_max_len = primeprint(prime_max_len, max_len)t1 = time.time()print(t1 - t0)
0 0
- 欧拉计划 50
- 欧拉计划 100
- 欧拉计划
- 欧拉计划
- 欧拉计划是什么?
- 欧拉计划
- 欧拉计划3
- 欧拉计划
- 欧拉计划23
- 欧拉计划20
- 欧拉计划21
- 欧拉计划22
- 欧拉计划
- 欧拉计划 1
- 欧拉计划 2
- 欧拉计划 3
- 欧拉计划 4
- 欧拉计划 5
- multimap的一些常用操作
- 设计模式之六大原则
- Collection学习(二)
- ORA-55610: Invalid DDL statement on history-tracked table
- 手机进入fastboot无法退出
- 欧拉计划 50
- hdu1251(map用法/字典树模板)
- 96 Unique Binary Search Trees
- JSP中一些常用的东西
- cpu 的simulation
- Linux下命令行安装weblogic10.3.6
- Spring中bean的定义及其作用域
- 念念不忘终有回响
- 测试设计技巧