(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 现在给出任何两个正整数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')

提交记录:
(Python实现)PAT 1015 Reversible Primes (20 分)_第1张图片

你可能感兴趣的:(每日一题,python)