(Python实现)PAT 1015 Reversible Primes (20 分)

1015 Reversible Primes (20 分)
A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.
在任何一个数系中,可逆素数是其“逆序”也是素数的质数。例如,在十进制中73是一个可逆素数,因为它的倒数37也是一个素数。

Now given any two positive integers N (<10​的5次方 ) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.
现在给出任何两个正整数N(< 10的5次方)和D (1 < D≤10),你应该告诉如果N是一个可逆与基数D '。

Input Specification:
The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.
输入文件由几个测试用例组成。每一种情况占用一行,包含两个整数N和d,输入以负N结束。

Output Specification:
For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.
对于每个测试用例,如果N是一个以D为基数的可逆素数,则在一行中打印’ Yes ‘,否则打印’ No '。

Sample Input:

73 10
23 2
23 10
-2

Sample Output:

Yes
Yes
No

作者:CHEN, Yue
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB

解题思路:
emmm题目看了好几遍没看明白题目想说明嘛意思…

题意:给出来两个数n和b,如果n是一个素数,并且在b进制下反转之后还是一个素数,那这个数n就是一个可逆素数,输出Yes,否则输出No。

解题思路:
1.构造2个函数,isprime(n)用来判断n是否为素数,reverse(n, b)用来将n在b进制下反转并转回十进制。
2.判断素数。
3.reverse(n, b)中就是正常的除和取余获得n的b进制数,反转之后再乘起来变成十进制。
4.最后注意此题的循环结束条件是输入负数时结束循环,没有在最开始给出输入几行数据。

代码:

import math


def isprime(n):
    if n <= 3:
        return n > 1
    if n % 6 != 1 and n % 6 != 5:
        return False
    for i in range(5, int(math.sqrt(n)), 6):
        if n % i == 0 or n % (i+2) == 0:
            return False
    return True

def reverse(n, b):
    l = []
    while n >= b:
        a = n % b
        n = n // b
        l.append(a)
    l.append(n)
    l = l[::-1]
    s = 0
    for i in range(len(l)):
        s += l[i] * (b ** i)
    return s

if __name__ == '__main__':
    while True:
        l = list(map(int, input().split()))
        if l[0] < 0:
            break
        if isprime(l[0]) and isprime(reverse(l[0], l[1])):
            print('Yes')
        else:
            print('No')

提交记录:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicky__3021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值