第1关:素数判定
任务描述
本关任务:编写一个能进行素数判定的小程序。
相关知识
为了完成本关任务,你需要掌握:
素数判断
素数判断
编程实现判定用户输入的一个正整数 n 是否为素数。
将素数的判定代码定义为一个函数,接受用户输入的正整数 n,返回 n 是否是素数,n 为素数时返回 True,不是素数时返回 False。
并调用该函数判定用户输入的一个正整数 n 是否为素数。
编程要求
根据提示,在右侧编辑器补充代码,进行素数判定的小程序。
测试说明
平台会对你编写的代码进行测试:
输入格式:
输入一个正整数
输出格式:
若该数为素数,输出“X是素数”
若该数为非素数,输出“X不是素数”
其中X为输入的整数
测试输入:
5
预期输出:
5是素数
开始你的任务吧,祝你成功!
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,返回值是布尔类型。参数是素数时返回True,否则返回False"""
#==================Begin=================================
# 补充你的代码
x=2
if n==1:
return False
for x in range(2,n):
if n%x==0:
return False
return True
#===================End================================
positive_int = int(input()) # 输入一个正整数
if is_prime(positive_int):
print(f'{positive_int}是素数')
else:
print(f'{positive_int}不是素数')
第2关:输出N以内的所有素数
任务描述
本关任务:编写一个能输出N以内的所有素数的小程序。
相关知识
为了完成本关任务,你需要掌握:
输出N以内的所有素数
输出N以内的所有素数
编程找出 N(即小于等于 N )的所有素数。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出N以内的所有素数的程序。
测试说明
平台会对你编写的代码进行测试:
输入格式
输入一个正整数
输出格式
在同一行中从小到大依次输出不大于 n 的全部素数,每个数字后面一个空格。
测试输入:
97
预期输出:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
开始你的任务吧,祝你成功!
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
#======================Begin=================================
# 补充你的代码
x=2
for x in range(2,n):
if n%x==0:
return False
return True
#=======================End================================
def output_prime(number):
"""接收一个正整数为参数,遍历从0到number之间的所有整数
在一行中输出不大于number的所有素数,每个数字后一个空格,函数无返回值。"""
#======================Begin=================================
# 补充你的代码
x=2
for x in range(2,number+1):
if is_prime(x):
print(x,end=' ')
#=======================End================================
positive_int = int(input())
output_prime(positive_int)
第3关:寻找回文素数
任务描述
本关任务:编写一个能寻找回文素数的小程序。
相关知识
为了完成本关任务,你需要掌握:
寻找回文素数
寻找回文素数
如果一个整数是素数,同时其对应的字符串是回文字符串时,便称其为回文素数。例如,131 既是素数,其对应的字符串“131”又是回文字符串,所以 131 是回文素数。
输入一个正整数 n , 请你在一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
编程要求
根据提示,在右侧编辑器补充代码,完善寻找回文素数的小程序。
测试说明
平台会对你编写的代码进行测试:
输入格式
输入一个正整数
输出格式
一行内输出从小到大排列的小于这个数的所有回文素数,每个数字后面一个空格。
测试输入:
191
预期输出:
2 3 5 7 11 101 131 151 181
开始你的任务吧,祝你成功!
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
#======================Begin=================================
# 补充你的代码
if n < 2 :
return False
elif n == 2:
return True
else:
a= int(n**(1/2)+1)
for i in range(2,a+1):
if n % i ==0:
return False
return True
#=========================End==============================
def plalindrome_prime(number):
"""接收一个正整数参数number,遍历从0到number之间的所有整数,
若某个数是素数,且转为字符串后是回文字符串,则称其中回文素数
找出并在同一行中输出小于number的所有回文素数,每个数字后一个空格,函数无返回值。"""
#======================Begin=================================
# 补充你的代码
for i in range(number):
if is_prime(i) and str(i) ==str(i)[::-1]:
print(i,end = " ")
#=========================End==============================
positive_int = int(input())
plalindrome_prime(positive_int)
第4关:寻找反素数
任务描述
本关任务:编写一个寻找反素数的小程序。
相关知识
为了完成本关任务,你需要掌握:
寻找反素数
寻找反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数。例如:17 和 71 都是素数且均不是回文数,所以 17 和 71 都是反素数。
输入一个正整数 n ,输出从小到大顺序输出小于 n 的所有反素数。
编程要求
根据提示,在右侧编辑器补充代码,完善寻找反素数的小程序。
测试说明
平台会对你编写的代码进行测试:
输入格式
输入一个正整数
输出格式
一行内输出从小到大排列的小于这个数的所有反素数,每个数字后面一个空格。
测试输入:
199
预期输出:
13 17 31 37 71 73 79 97 107 113 149 157 167 179
开始你的任务吧,祝你成功!
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
#======================Begin=================================
# 补充你的代码
if n < 2 :
return False
elif n == 2:
return True
else:
a= int(n**(1/2)+1)
for i in range(2,a+1):
if n % i ==0:
return False
return True
#========================End===============================
def reverse_prime(number):
"""接收一个正整数参数,找出并在同一行内输出所有小于number的反素数,每个数字后一个空格。
反素数指某数i及其逆序数都是素数,但数i对应的字符串不是回文字符串。函数无返回值"""
#======================Begin=================================
# 补充你的代码
for x in range(number+1):
y=int(str(x)[::-1])
if is_prime(x) and is_prime(y) and x!=y:
print(x,end=' ')
#========================End===============================
positive_int = int(input())
reverse_prime(positive_int)
第5关:哥德巴赫猜想
任务描述
本关任务:编写哥德巴赫猜想的小程序。
相关知识
为了完成本关任务,你需要掌握:
哥德巴赫猜想
哥德巴赫猜想
1742 年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于 2 的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于 2 的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如: 24=5+19,其中 5 和 19 都是素数。
输入一个正整数 N,当输入为偶数时,分行按照格式“N = p + q” 输出 N 的所有素数分解,其中 p 、 q 均为素数且 p ≤ q。当输入为奇数或 N<4 时,输出 'Data error!' 。
编程要求
根据提示,在右侧编辑器补充代码,完善哥德巴赫猜想的小程序。
测试说明
平台会对你编写的代码进行测试:
测试输入:
88
预期输出:
88=5+83
88=17+71
88=29+59
88=41+47
开始你的任务吧,祝你成功!
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
#====================Begin===================================
# 补充你的代码
if n < 2:
return False
elif n == 2:
return True
else:
a = int(n ** (1 / 2) + 1)
for i in range(2, a + 1):
if n % i == 0:
return False
return True
#======================End=================================
def goldbach_conjecture(num):
""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
参数为奇数或小于4时,输出'Data error!'
"""
#====================Begin===================================
# 补充你的代码
if num<4 or num%2==1:
print("Data error!")
for p in range(num+1):
if p>=2:
if is_prime(p):
q=num-p
if p>q:
break
elif is_prime(q):
print(f'{num}={p}+{q}')
#======================End=================================
if __name__ == '__main__':
positive_even = int(input()) # 输入一个正数
goldbach_conjecture(positive_even)