上Python课的时候老师说能用Python解决蓝桥杯上的一些问题,然后就尝试了一下用Python解决蓝桥杯国赛中纯质数这道题,在网上看有些大神用java实现,但是找了好久也没有人用Python写的,最终决定自己弄弄,理解了一些解题的思路,发现用Python实现起来相对来说还是比较容易的。
题目要求:
如果一个正整数只有 1 和它本身两个约数,则称为一个质数(又称素数)。前几个质数是: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, · · · 。如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如: 2,3, 5, 7, 23, 37 都是纯质数,而 11, 13, 17, 19, 29, 31 不是纯质数。当然 1, 4, 35也不是纯质数。请问,在 1 到 20210605 中,有多少个纯质数?
解题思路:
先筛选出所有素数,再筛选出纯素数。定义两个函数分别实现该功能。筛选纯素数用的特殊处理,即若该数是由2,3,5,7组成,则为纯素数,否则不是。没有用题目中给出来的定义。
实现代码:
def prime(n):
if n%2 == 0:
return n==2
if n%3 == 0:
return n==3
if n%5 == 0:
return n==5
m = int(n ** 0.5 + 1)
for p in range(7,m,2): #只考虑奇数作为可能因子
if n%p == 0:
return 0
return 1
#判断是否为纯素数:该数只由2,3,5,7这几个数字组成,则为纯素数
def isPure(lst):
for i in lst:
if i == '0':
return False;
if i == '1':
return False;
if i == '4':
return False;
if i == '6':
return False;
if i == '8':
return False;
if i == '9':
return False;
return True
n = int(input())
#lst列表存n以内的所有素数
lst = []
for i in range(2,n+1): #1不是素数,从2开始
if prime(i):
lst.append(i)
#lst2列表存lst列表中的所有纯素数
lst2 = []
for i in range(len(lst)):
m = list(str(lst[i]))
if isPure(m) == True:
lst2.append(lst[i])
print(lst2)
print(len(lst2))
输入输出:
输入任意大的一个自然数,输出小于该自然数所有纯质数组成的列表,以及列表长度。
样例如下:
最后
感觉自己筛选纯素数的方法不常规,也不知道对不对,就是自己观察出来的,然后与常规方法的结果进行了对比。。还有,素数就是质数!!!本人实在菜的抠jio,希望大神能给指点一下吧
然后,通过对Java和Python均有了一些了解后,发现Python确实值得一学,学校里老师讲的应该还不错但不知为啥就是听不进去。。看看以后有时间能不能自己深入学习一下吧
此代码可以用来应付作业哈哈哈
不早了,写完睡觉,晚安!