PAT-python-1096 大美数

若正整数 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")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值