若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
输入格式:
输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过 10^4的正整数。
输出格式:
对每个需要检测的数字,如果它是大美数就在一行中输出 Yes,否则输出 No。
输入样例:
3
18 29 40
输出样例:
Yes
No
Yes
解法
因为题目里k<11嘛,所以直接写四层循环暴力即可。。注意,a整除b就是 b% a == 0。
from math import sqrt
n = int(input())
nums = [int(i) for i in input().split()]
for num in nums:
# 求因子
factors = []
for i in range(1,int(sqrt(num))+1):
if num % i == 0:
m = num // i
factors.append(i)
# 避免压入相同的数字,比如25
if m != i:
factors.append(num // i)
fn = len(factors)
if fn < 4:
print("No")
continue
flag = False
for i in range(fn-3):
for i1 in range(i+1, fn-2):
for i2 in range(i1+1, fn-1):
for i3 in range(i2+1, fn):
s = factors[i] + factors[i1] + factors[i2] + factors[i3]
if s % num == 0:
print("Yes")
#print("%d %d %d %d"%(factors[i], factors[i1], factors[i2], factors[i3]))
flag = True
break
if flag: break
if flag: break
if flag: break
if flag == False:
print("No")