一.题目要求
def question_judge(question):
"""接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""
if question == '素数': # 如果输入“素数”,再输入一个正整数n,输出不大于n的所有素数
n = int(input('再输入一个正整数n:'))
output_prime(n) # 输出素数
elif question == '回文素数':
n = int(input('再输入一个正整数n:'))
palindromic_prime(n) # 输出回文素数
elif question == '反素数':
n = int(input('再输入一个正整数n:'))
reverse_prime(n) # 输出反素数
elif question == '哥德巴赫猜想':
n = int(input('再输入一个正整数n:'))
goldbach_conjecture(n)
else:
print('输入错误')
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False
减小判定区间,减少循环次数,提升效率。
>>> is_prime(5)
True
>>> is_prime(10)
False
"""
# 代码区
def output_prime(number):
"""接收一个正整数为参数,遍历从0到number之间的所有整数,
在一行中输出不大于number的所有素数,函数无返回值。
>>> output_prime(50)
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
"""
# 代码区
def palindromic(num):
"""接收一个数字为参数,判定其是否为回文数,返回布尔值。
>>> palindromic(123)
False
>>> palindromic(12321)
True
"""
# 代码区
def palindromic_prime(number):
"""接收一个正整数参数number,遍历从0到number之间的所有整数,
若某个数是素数,且转为字符串后是回文字符串,则称其是回文素数。
找出并在同一行中从小到大输出小于number的所有回文素数,每个输出后加一个空格,
函数无返回值。
>>> palindromic_prime(200)
2 3 5 7 11 101 131 151 181 191
"""
# 代码区(提示:要调用之前定义的palindromic()和is_prime()函数)
def reverse_num(num):
"""接收一个整数,返回其逆序字符串对应的整数。
>>> reverse_num(123)
321
"""
# 代码区
def reverse_prime(number):
"""接收一个正整数参数,找出并在同一行内输出所有小于number的反素数,数字间用一个空格分隔。
反素数指某数i及其逆序数都是素数,但数i对应的字符串不是回文字符串,函数无返回值。
>>> reverse_prime(200)
13 17 31 37 71 73 79 97 107 113 149 157 167 179 199
"""
# 代码区(提示:要调用之前定义的reverse_num()、palindromic()和is_prime()函数)
def goldbach_conjecture(num):
""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
参数为奇数或小于4时,输出'Data error!'
>>> goldbach_conjecture(3)
'Data error!'
>>> goldbach_conjecture(20)
'20=3+17'
'20=7+13'
"""
# 代码区(提示:要调用之前定义的is_prime()函数)
if __name__ == '__main__':
problems = input('请输入问题(素数、回文素数、反素数或哥德巴赫猜想):')
question_judge(problems)
二.函数
def question_judge(question):
"""接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""
if question == '素数': # 如果输入“素数”,再输入一个正整数n,输出不大于n的所有素数
n = int(input('再输入一个正整数n:'))
output_prime(n) # 输出素数
elif question == '回文素数':
n = int(input('再输入一个正整数n:'))
palindromic_prime(n) # 输出回文素数
elif question == '反素数':
n = int(input('再输入一个正整数n:'))
reverse_prime(n) # 输出反素数
elif question == '哥德巴赫猜想':
n = int(input('再输入一个正整数n:'))
goldbach_conjecture(n)
else:
print('输入错误')
#判断素数:
def is_prime(n):
if n < 2:
return False
for i in range(2,int(n**0.5+1)): #将循环次数减少
if n % i == 0:
return False
else:
return True
#输出素数
def output_prime(number):
for i in range(number):
if is_prime(i)== True:
print(i,end=" ")
#判断回文数
def palindromic(num):
s = str(num)
l = s.__len__()
for i in range(l):
if s[i]!=s[l-1-i]:
return False
else:
return True
#判断回文素数
def palindromic_prime(number):
for i in range(number+1):
if is_prime(i)==True and palindromic(i)== True:
print(i,end=" ")
#求逆序数
def reverse_num(num):
s=str(num)
s = s[-1: :-1]
n = int(s)
return n
#判断反素数
def reverse_prime(number):
for i in range(number):
if palindromic(i)==False and is_prime(i)==True and is_prime(reverse_num(i))==True :
print(i,end=" ")
#哥德巴赫猜想
def goldbach_conjecture(num):
if num<4:
print("Data error!")
elif num%2!=0:
print("Data error!")
else:
for i in range(2,(num//2)):
if is_prime(i)==True:
if is_prime(num-i)==True:
print('{}={}+{}'.format(num,i,num-i))
if __name__ == '__main__':
problems = input('请输入问题(素数、回文素数、反素数或哥德巴赫猜想):')
question_judge(problems)