模拟即可,技术有限,有更优解法可以告诉我,我们一起学习
def is_happen_num(n):
count = 0 # 记录循环次数
res = [] # 记录每次生成的数
while 1:
count += 1 # 循环次数加1
res.append(n) # 记录当前生成的数
if count > 1: # 当循环次数大于1时
st[n] = 1 # 标记当前数为非快乐数
num = 0 # 计算下一个数
while n:
num += (n % 10) ** 2
n //= 10
if num in res: # 如果出现重复的数
return False, count # 返回False和循环次数
if num == 1: # 如果生成的数为1
return True, count # 返回True和循环次数
n = num # 继续生成下一个数
A, B = map(int, input().split())
def is_prime(n):
if n < 2:
return False
i = 2
while i <= n // i:
if n % i == 0:
return False
i += 1
return True
N = 10010
st = [0] * N # 初始化为0,表示所有数都是快乐数
res = []
for i in range(A, B + 1):
x, y = is_happen_num(i) # 判断当前数是否为快乐数,返回结果和循环次数
p = is_prime(i) # 判断当前数是否为素数
if p:
y *= 2 # 如果当前数为素数,循环次数乘2
if x: # 如果当前数为快乐数
res.append((i, y)) # 记录该数和循环次数
if not res: # 如果没有快乐数
print("SAD")
for nums in res:
if not st[nums[0]]: # 如果当前数是快乐数
print(*nums) # 输出该数和循环次数
文章为作者独立观点,不代表股票配资公司观点