笔试题1道
- 实现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))