目录
素数判定
素数判断
编程实现判定用户输入的一个正整数 n
是否为素数。
将素数的判定代码定义为一个函数,接受用户输入的正整数 n
,返回 n
是否是素数,n
为素数时返回 True
,不是素数时返回 False
。
并调用该函数判定用户输入的一个正整数 n
是否为素数。
代码实现
from math import* # 引入数学库
def is_prime(n):
if n < 2:
return False # 1 是素数
else:
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
positive_int = int(input()) # 输入一个正整数
if is_prime(positive_int):
print(f'{positive_int}是素数')
else:
print(f'{positive_int}不是素数')
测试说明
平台会对你编写的代码进行测试:
输入格式: 输入一个正整数
输出格式: 若该数为素数,输出“X是素数” 若该数为非素数,输出“X不是素数” 其中X为输入的整数
测试输入: 5
预期输出: 5是素数
输出N以内的所有素数
题目简单不再重述
代码实现
from math import*
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
if n == 1:
return False
else:
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
def output_prime(number):
"""接收一个正整数为参数,遍历从0到number之间的所有整数
在一行中输出不大于number的所有素数,每个数字后一个空格,函数无返回值。"""
for c in range(1,number + 1): # 注意c的范围
if is_prime(c) == True:
print(c,end = ' ')
positive_int = int(input())
output_prime(positive_int)
寻找回文素数
代码实现
from math import*
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
if n == 1:
return False
elif n == 2:
return True
else:
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
def plalindrome_prime(number):
"""接收一个正整数参数number,遍历从0到number之间的所有整数,
若某个数是素数,且转为字符串后是回文字符串,则称其中回文素数
找出并在同一行中输出小于number的所有回文素数,每个数字后一个空格,函数无返回值。"""
for c in range(1,number):
if is_prime(c):
s = str(c) #把c转换为字符串
if s == s[::-1]: # 判断字符串的倒序是否相等
print(s,end = ' ')
positive_int = int(input())
plalindrome_prime(positive_int)
寻找反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数。例如:17
和 71
都是素数且均不是回文数,所以 17
和 71
都是反素数。
输入一个正整数 n
,输出从小到大顺序输出小于 n
的所有反素数。
代码实现
from math import*
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False。减小判定区间,减少循环次数,提升效率"""
if n == 1:
return True
else:
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
def reverse_prime(number):
"""接收一个正整数参数,找出并在同一行内输出所有小于number的反素数,每个数字后一个空格。
反素数指某数i及其逆序数都是素数,但数i对应的字符串不是回文字符串。函数无返回值"""
for c in range(number):
if is_prime(c):
a = str(c)
if a != a[::-1] and is_prime(int(a[::-1])): # 这里第一遍做的时候想的太复杂了,用了两个循环,结果显然超时这是优化过的
print(a,end = ' ')
positive_int = int(input())
reverse_prime(positive_int)
哥德巴赫猜想
1742
年,哥德巴赫给欧拉的信中提出了以下猜想“任一大于 2
的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于 2
的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。比如: 24=5+19
,其中 5
和 19
都是素数。 输入一个正整数 N
,当输入为偶数时,分行按照格式“N = p + q”
输出 N
的所有素数分解,其中 p
、 q
均为素数且 p ≤ q
。当输入为奇数或 N<4
时,输出 'Data error!'
。
代码实现
from math import*
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False"""
if n < 2:
return True
else:
for i in range(2,int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
def goldbach_conjecture(num):
""" 哥德巴赫猜想, 接收一个不小于4的正整数为参数。
当参数为不小于4的偶数时,将其分解为两个素数的加和,按小数+数的格式输出。
有多种组合时全部输出,但不输出重复的组合,例如输出8=3+5,不输出8=5+3。
参数为奇数或小于4时,输出'Data error!'
"""
if num % 2 != 0 or num < 4:
print('Data error!')
else:
for p in range(2,num): # 这里为什么要从2开始,我也不清楚,从1的话评测结果不对
for q in range(p,num):
if is_prime(p) and is_prime(q):
if p + q == num:
print(f'{num}={p}+{q}')
if __name__ == '__main__':
positive_even = int(input()) # 输入一个正数
goldbach_conjecture(positive_even)