笔试题1道

笔试题1道

image
- 实现1
是否为素数
求r进制
求r进制的相反数
求r进制的相反数的十进制数
r进制的相反数的十进制数是否为素数

# coding:utf-8
import math


def fun(n, r):
    if not is_prime(n):
        return 'no'
    n_r = dec_2_r_base(n, r)
    n_r_rev = rev(n_r)
    n_rev = r_base_2_dec(n_r_rev, r)
    result = is_prime(n_rev)
    return 'yes' if result else 'no'


def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n) + 1)):
        if n % i == 0:
            return False
    return True


def dec_2_r_base(dec, base):
    if (dec == 0):
        return ''
    result = dec_2_r_base(int(dec // base), base)
    return result + str(dec % base)


def rev(x):
    return int(str(x)[::-1])


# 任意进制转十进制
def r_base_2_dec(n, r):
    return int(str(n), r)


if __name__ == '__main__':
    n = 31
    r = 10
    print(fun(n, r))
  • 实现2:
    求r进制的相反数,而从十进制转换为r进制的过程本来就是从低位到高位的,利用这一点,不用再先转为r进制,再反转。
# coding:utf-8

import math


def is_prime(num):
    if (num <= 1):
        return False
    for i in range(2, int(math.sqrt(num) + 1)):
        if num % i == 0:
            return False
    return True


def is_invertible_opposite_num(num, base):
    if not is_prime(num):
        return 'no'
    return 'yes' if is_prime(rev(num, base)) else 'no'


def rev(dec_num, base):
    if dec_num == 0:
        return dec_num
    flag, r_rev = True, ''
    while (flag):
        r_rev += str(dec_num % base)
        dec_num = int(dec_num / base)
        if dec_num == 0:
            flag = False
    return int(r_rev, base)


if __name__ == '__main__':
    n, r = 31, 10
    print(is_invertible_opposite_num(n, r))

猜你喜欢

转载自blog.csdn.net/cluster1893/article/details/81193877