题目:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个正整数只有 11 和它本身两个约数,则称为一个质数(又称素数)。
前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。
如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3,5,7,23,372,3,5,7,23,37 都是纯质数,而 11,13,17,19,29,3111,13,17,19,29,31 不是纯质数。当然 1,4,351,4,35 也不是纯质数。
请问,在 11 到 2021060520210605 中,有多少个纯质数?
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
解题思路:
由于要求每一位都是质数,而个位数的质数只有2,3,5,7,这个很重要,想到这个就可以大幅度的进行剪枝,整体过程就是遍历说有的数字然后使用函数进行判断该数字是否满足条件即可。
判断函数:
判断各个位置上的数字是不是质数:
# p = ['2','3','5','7']
# n为要判断的数字,即传入函数的数字
# 这里使用字符串进行判断,跟简洁
for j in str(n):
if j not in p:
return False
判断整体是不是质数:
# 正常判断质数函数过程
for i in range(2,int(n ** 0.5 + 1)):
if n % i == 0:
return False
return True
代码:
import os
import sys
# 请在此输入您的代码
p = ['2','3','5','7']
cnt = 6
def isrp(n):
for j in str(n):
if j not in p:
return False
for i in range(2,int(n ** 0.5 + 1)):
if n % i == 0:
return False
return True
for i in range(39,20210606,2):
if isrp(i):
cnt += 1
print(cnt)