python N位质数

【问题描述】给定一个整数N(2 <= N <= 8),生成所有的具有下列特性的特殊的N位质数,即其前任意位都是质数。例如,7331即是这样一个4位的质数,因为7、73和733也都是质数。
【输入形式】输入一个整数N(2 <= N <= 8)。
【输出形式】输出有若干行,每行有一个整数,该整数有N位,而且其前任意位都是质数。并且:
1.要求输出所有符合题意的质数。
2.从小到大按顺序输出,且所有行上的数字不得重复。
【样例输入】2
【样例输出】
23
29
31
37
71
73
79

【样例说明】输出2位的质数,而且其前的任何一个数也是质数。
【运行时限】要求每次运行时间限制在20秒之内。超出时间则认为程序错误。

 

digit_num = int(input())

#找出所有的素数
#下标i的元素值为0,则表明i不是素数,否则是素数
n_list = [1 for x in range(10**digit_num)]
n_list[0] = 0  #0表示不是素数,1表示是素数
n_list[1] = 0
len_n_list = len(n_list)
for i in range(2, len_n_list // 2 + 1):
    if n_list[i] == 1:
        for j in range(2, (len_n_list - 1) // i + 1):
            n_list[i * j] = 0
#用字典来保存素数
prime_dict = {}
for i in range(2, len_n_list):
    if n_list[i] == 1:
        prime_dict[i] = 1

def prefix_is_prime(p, prime_dict):
    prefix = p // 10
    while prefix > 0:
        if (prefix not in prime_dict) or prime_dict[prefix] == 0:
            #用prime_list存储素数序列,接着用not in来判断是否是素数会超时。
            return False
        prefix = prefix // 10
    return True

r_list = []
min_n_digits = 10 ** (digit_num - 1)
for p in prime_dict.keys():
    if p > min_n_digits and prefix_is_prime(p, prime_dict):
        r_list.append(p)
r_list.sort()
for p in r_list:
    print(p)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值