笔试题1道

r进制相反数与素数判断
本文探讨了如何判断一个数在转换为r进制后的相反数是否为素数,提供了两种实现方法,一种是先将数转换为r进制再进行相反数和素数判断,另一种是在转换过程中直接生成相反数并判断其素性。

笔试题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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值