python:素数,回文数,回文素数,哥德巴赫猜想

一.题目要求

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)


 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值