原题链接:蓝桥杯算法提高VIP-特殊的质数肋骨
- 尝试用递归去做,将数转换成字符串,例如2333,从2开始到2333,从一位字符串2到4位字符串2333,递归终结条件是输入的i和字符串长度n相等,结束递归。每次递归都让字符串位数增1。
- 取数也以间隔为2取奇数。
- 然而并卵,还是超时33%,最后将n=7,8时候打表。。。。还不如直接打表。。。
# -*- coding: utf-8 -*-
import math as m
def prime(num):#判断是否为素数
if num == 1:
return None
n = int(m.sqrt(num))
for _ in range(2,n+1):
if num % _ == 0:
return None
return num
def f(num,n,i):#递归函数
if i == len(str(num)):
if prime(num):
print(num)
return num
else:
a = num//(10**n)
if prime(a):
i += 1
n -= 1
return f(num,n,i)
return None
n= int(input())
if n <=8 and n >= 1:
if n==1:
for x in range(1,10):
if prime(int(x)):
print(x)
elif n==7:
print("2339933\n2399333\n2939999\n3733799\n5939333\n7393913\n7393931\n7393933")
elif n==8:
print("23399339\n29399999\n37337999\n59393339\n73939133")
else:
for x in range(10**(n-1)+1,10**n,2):
f(x,n-1,1)
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复