文档章节

金蝉素数

寂寞暴走伤
 寂寞暴走伤
发布于 2016/07/14 19:32
字数 785
阅读 12
收藏 0

问题描述:

某古寺的一块石碑上依稀刻有一些神秘的自然数。
专家研究发现:这些数是由1,3,5,7,9这5个奇数字排列组成的5位素数,同时去掉它的最高位与最低位数字后的3位数还是素数,同时去掉它的高二位与低二位数字后的一位数还是素数。因此人们把这些神秘的素数称为金蝉素数,喻意金蝉脱壳之后仍为美丽的金蝉。
试求出石碑上的金蝉素数。

注意:

它这里说的高二位与低二位数字后的一位数应该是去掉高位和低位的第二个后的三位数,不应该是一位数;


我的代码:

import math
import itertools
def prime(x):
    count=0
    for i in range(2,int(math.sqrt(x))+1):
        if x%i==0:
            count=1
    if count==0:
        return True
    else:
        return False
c=[]
for j in itertools.permutations([1,3,5,7,9],5):
    c.append(j)
for k in range(len(c)):
    l=c[k][0]*10000+c[k][1]*1000+c[k][2]*100+c[k][3]*10+c[k][4]
    m=c[k][1]*100+c[k][2]*10+c[k][3]
    n=c[k][0]*100++c[k][2]*10++c[k][4]
    if prime(l)==True and prime(m)==True and prime(n)==True:
      print l,


结果:

13597 15937 51973 53791 79531 91573


我的思路:

首先定义了一个prime函数,该函数判断传入的数是否为素数,然后根据itertools的permutations函数返回长度为5的所有的由1,3,5,7,9组成的不重复数放入列表中,其格式为[(1,3,5,7,9),(1,3,5,9,7)....],然后判断列表中每一个值是否满足原数,原数去掉最高位与最低位数字后的3位数和原数去掉高二位与低二位数字后的三位数同时都是素数,满足的话就是金蝉素数;


示例代码:

# 1. 生成 1,3,5,7,9 全排列, 每种排列是一个元组
# 2. 元组转换成数字 (例: 13579,357,159)
# 3. 检测3个数字是素数,如全是素数则是金蝉数

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

from itertools import permutations
for p in permutations([1,3,5,7,9], 5):
    # (3,5,7), (1,5,9), (1,3,5,7,9)
    for l in (p[1:-1], p[::2], p):
        s = reduce(lambda x, y: 10 * x + y, l)
        if not isPrimeNum(s):
            break
    else:
        print p


代码分析:

示例代码和我的大致相同,只不过它循环得到元组后又直接循环p[1:-1], p[::2], p即原数去掉最高位与最低位数字后的3位数,原数去掉高二位与低二位数字后的三位数和原数所组成的元组,而且我的是通过算术运算将元组转换为数字,而它的是使用reduce函数实现的;


总结:

itertools模块的permutations方法


语法格式:permutations(iterable [,r]):


创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同,它对数字进行全排列操作的效率比递归方式要好得多;


关于itertools模块可以参考这篇文章:http://www.cnblogs.com/cython/articles/2169009.html


题目出处:http://www.cheemoedu.com/exercise/21

© 著作权归作者所有

下一篇: 肇事车辆
寂寞暴走伤
粉丝 0
博文 40
码字总数 20969
作品 0
南阳
运维
私信 提问
一句”听说..."成就了一部经典,一句“赚钱”,祸害了一代青年

翻了个讨论西游记章节关联的帖子,突然想来起,西游记自打出了大唐边界,后面的绝大多数故事无不是因为,XX听说 唐僧是金蝉长老转生,吃了他的肉能长生不死。 且不谈金蝉长老是谁,估计是个颠...

中山野鬼
2012/07/02
159
4
每周一课:L11 Sieve of Eratosthenes(11.2)

P11.2 CountSemiprimes Count the semiprime numbers in the given range [a, b]. P11.2 半素数个数 计算区间[a, b]中的半素数的个数 只有1与该数本身这两个正因数的数称为素数。前6个质数分...

AiFan
02/17
0
0
PTA (Advanced Level)1015 Reversible Primes

Reversible Primes   A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversi......

suvvm
2018/12/18
0
0
筛素数法小结

筛选素数方法小结:   最简单的筛素数法方法就是从2开始,将所以2的倍数去掉,然后从3开始,将3的倍数去掉,依次进行下去即可。根据这样很容易写出代码,下面代码就是是筛素数法得到100以内...

老朱教授
2017/10/01
0
0
Python3 欧拉计划 问题46-50

问题41—45参见:https://www.jianshu.com/p/15254f8060e7 46、哥德巴赫的另一个猜想 哥德巴赫曾猜想:每个奇合数可以写成一个素数和一个平方的两倍之和。 9 = 7 + 2×1^2 15 = 7 + 2×2^2 2...

AiFan
2018/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash 和 Python 编程语言优缺点分析

Bash 和 Python 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。 让我们来比较一下...

xiangyunyan
20分钟前
3
0
Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线

排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这篇文章,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如sys...

阿里云云栖社区
25分钟前
4
0
解决exe4打包出现的问题

https://blog.csdn.net/gem_yaorao/article/details/48626155

南桥北木
41分钟前
1
0
SpringBoot高级篇JdbcTemplate之数据更新与删除

前面介绍了JdbcTemplate的插入数据和查询数据,占用CURD中的两项,本文则将主要介绍数据更新和删除。从基本使用上来看,姿势和前面的没啥两样 <!-- more --> I. 环境准备 环境依然借助前面一...

小灰灰Blog
58分钟前
3
0
Filecoin 编译问题

https://github.com/filecoin-project/go-filecoin/issues/2503 Error go run ./build build command from root I've faced on this error Building go-filecoin...git log -n 1 --forma......

怎当她临去时秋波那一转
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部