题目描述
杰洛特主动出击狂猎的老巢,然而在此之前,他遇到了一个女术士,杰洛特想要女术士助自己一臂之力,她却出了一个难题给杰洛特,只有答对了才能与他同行。 女术士给杰洛特一个四位数的素数,要求他说出这个四位数的数字的另外两个四位素数(从小到达输出)满足下面条件。
要求
- 另外两种组合的四位数也必须是素数
- 这三个四位数构成等差数列
- 如果没有符合条件的组合, 则返回no
样例输入
4817
1232
样例输出
1487 4817 8147
no
from itertools import permutations # 这个模块用来全排列列表
def judge_particle(num):
"""
判断数字是否为素数
:return: 布尔值(为素数返回True)
"""
is_true = True
if num == 0 or num == 1:
is_true = False
for i in range(2, num):
if num % i == 0:
is_true = False
return is_true
class interlink: # 连环阵类
def __init__(self, num):
self.num = num
self.list = []
def arrange(self):
"""
对四位数进行全排列,给出所有可能
:return:无
"""
temp = self.num
self.list = list(num for num in list(str(temp)))
self.list = list(permutations(self.list))
self.list = list(int("".join(i)) for i in self.list)
self.list = list(num for num in self.list if num > 1000)
k = 0
for i in range(len(self.list)):
if not judge_particle(self.list[i - k]):
self.list.remove(self.list[i - k])
k += 1
def find_result(self):
"""
找到全排列后的全部素数
:return: 无
"""
temp = []
for i in range(len(self.list)):
for j in range(len(self.list)):
if (self.num - self.list[i] == self.list[j] - self.num or self.list[i] - self.num == self.list[j] - self.list[i] or self.list[j] - self.list[i] == self.num - self.list[j]) and self.list[i] != self.list[j]:
temp.append(self.list[i])
temp.append(self.list[j])
temp.append(self.num)
temp.sort()
print("{} {} {}".format(temp[0], temp[1], temp[2]))
return
print("No")
if __name__ == '__main__': # 程序开关
end = ""
while end != "y" and end != "Y":
while True:
try:
use_input = int(input("请输入一个四位素数:"))
if 1000 <= use_input <= 9999:
if judge_particle(use_input):
break
else:
print("输入的四位整数必须为素数,{}不是素数!".format(use_input))
print("No")
continue
else:
print("输入的必须为四位整数且为素数!")
continue
except ValueError:
print("输入的必须为整数(4位)且为素数!")
num = interlink(use_input) #
num.arrange() # 全排列
num.find_result() # 打印结果
end = input("是否退出(y/n)")

被折叠的 条评论
为什么被折叠?



