欧拉计划 37
来源:互联网 发布:学生网络诈骗事例 编辑:程序博客网 时间:2024/06/06 05:18
3797这个数很有趣。它本身是质数,而且如果我们从左边不断地裁去数字,得到的仍然都是质数:3797,797,97,7。
而且我们还可以从右向左裁剪:3797,379,37,3,得到的仍然都是质数。
找出全部11个这样从左向右和从右向左都可以裁剪的质数。
注意:2,3,5和7不被认为是可裁剪的质数。
import mathimport itertoolsdef is_prime(x): """ 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 is_prime_all(l): """ 左边不断地裁去数字\从右向左裁剪都为质数 """ l_len = len(l) for i_l in range(l_len): l_ = l[i_l: ] if not is_prime(sum([v * 10 ** (len(l_) - 1 - i) for i, v in enumerate(l_)])): return False l_ = l[: i_l + 1] if not is_prime(sum([v * 10 ** (len(l_) - 1 - i) for i, v in enumerate(l_)])): return False return Truen_max = 11n = 0digit = 2while n < n_max: # 首尾只能是质数 for i_digit in [2, 3, 5, 7]: for i_1 in [3, 7]: for i_mid in itertools.product([1, 3, 7, 9], repeat=digit-2): if digit > 2: n_list = [i_digit] n_list.extend(list(i_mid)) n_list.append(i_1) else: n_list = [i_digit, i_1] if is_prime_all(n_list): n += 1 print(sum([n_list[i] * 10 ** (digit - 1 - i) for i in range(digit)])) digit += 1
0 0
- 欧拉计划 37
- 欧拉计划 100
- 欧拉计划
- 欧拉计划
- 欧拉计划是什么?
- 欧拉计划
- 欧拉计划3
- 欧拉计划
- 欧拉计划23
- 欧拉计划20
- 欧拉计划21
- 欧拉计划22
- 欧拉计划
- 欧拉计划 1
- 欧拉计划 2
- 欧拉计划 3
- 欧拉计划 4
- 欧拉计划 5
- 逻辑位运算小结5
- JTable列排序
- cordova
- Qt打开,保存,另存为图片
- 剪月亮
- 欧拉计划 37
- N-Queens
- BIOS低地址1M 内存分布图
- 【Codeforces 652 B z-sort 】
- HDU 1517 A Multiplication Game(巴什博弈)
- 用一个简单示例演示在python中调用C及C++
- js手机抽奖、微信抽奖模板
- C Pluss Pluss逗比虫子
- 基于UGUI遍历所以的子物体,自动设置字体