首页 > 试题广场 >

完全数计算

[编程题]完全数计算
  • 热度指数:151940 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数12471428,除去它本身28外,其余5个数相加,1+2+4+7+14=28

输入n,请输出n以内(n)完全数的个数。

数据范围:

输入描述:

输入一个数字n



输出描述:

输出不超过n的完全数的个数

示例1

输入

1000

输出

3
n = int(input())
count1 = 0
for num in range(1,n+1):
    lst = []
    for i in range(1,num+1):
        if num % i == 0:
            lst.append(i)
    if sum(lst[:-1]) == lst[-1]:
        count1 += 1
print(count1)

发表于 2024-08-21 11:02:40 回复(0)
while True:
    try:
        n = int(input())
        res = 0
        for i in range(2,n+1):
            temp = []
            for j in range(1,(i+1)//2+1):
                if i%j == 0:
                    temp.append(j)
            if sum(temp) == i:
                res += 1
        print(res)
    except:
        break

发表于 2024-06-05 15:20:46 回复(0)
while True:
    try:
        def is_perfectnum(n):
            tem = 1
            for i in range(2, n // 2 + 1):
                if n % i == 0:
                    tem += i
            if tem == n:
                return True
            return False
        res = 0
        n = int(input())
        for i in range(2, n+1):
            if is_perfectnum(i):
                res += 1
        print(res)
    except:
        break

发表于 2022-09-11 13:21:55 回复(0)
print(3)
发表于 2022-09-08 10:21:44 回复(0)
num = int(input())
# 查找每个数字的质因子
def find_factor(n):
    result_list = []
    for i in range(1,int(n/2)+1):
        if n%i == 0:
            result_list.append(i)
    return result_list

# 寻找完全数
result = 0
for i in range(2,num+1):
    factor_list = find_factor(i)
    count = 0
    for j in factor_list:
        count += j
    if count == i:
        result += 1
print(result)
发表于 2022-09-07 18:06:53 回复(0)
def yinzi(num:int):
    que = [1]
    i = 2
    while 1:
        if i == num:
            return sum(que)
        # 每次整除把两个因子都放进队列里,节省时间
        if num % i == 0:
            if i in que:
                return sum(que) # 当小因子追上大因子就返回,再次节省时间
            que.append(i)
            j = int(num/i)
            if j != i:
                que.append(j) 
        i += 1

   
a = int(input())
sum1 = 0
for i in range(2,a+1):
    if i == yinzi(i):
        sum1 += 1
print(sum1)

发表于 2022-09-02 22:44:51 回复(0)
n = int(input())
count = 0
for i in range(3,n+1):
    lst = []
    for j in range(1,i):
        if i % j == 0:
            lst.append(j)
    if i == sum(lst):
        count += 1
print(count)
发表于 2022-08-30 07:45:55 回复(0)
n=int(input())
num=0
def f(a):
    l=[]
    for i in range(1,a):
        if a%i==0:
            l.append(i)
    return sum(l)




for i in range(1,n+1):
    if i==f(i):
        num+=1
print(num)

发表于 2022-08-15 16:50:03 回复(0)
def count(num:int,res=0):
    for i in range(1,num):
        if num % i == 0:
            res += i
    return True if res==num else False

n = int(input())
ans = 0
for i in range(1,n):
    if count(i):
        ans += 1
print(ans)

发表于 2022-08-04 18:08:13 回复(0)
# 判断这是数字是否是质数?
def isPrim(n):
    if n <= 1: return False
    i = 2
    while i*i <= n:  # 这个等号一定不要忘记,因为3*3=9,9不是质数
        if n%i == 0: return False
        i += 1 
    return True
 
# 判断这是数字是否是完全数?
def isPerfect(n):
    if n <= 1: return False
    i = 2 
    res = 1
    while i*i <= n:
        if n%i == 0: 
            res = res + i + n/i #把它的两个因数加起来
        i += 1
    if res == n:return True
    else: return False
 
ip = int(input())
 
count = 0
for i in range(ip):
    if isPerfect(i):
        count += 1
 
print(count)

发表于 2022-07-29 10:47:16 回复(0)
😁看输入是1000,怕超时和超内存,还好还好
n = int(input())
num = 0
for i in range(1, n):
    yz = [1]
    if i > 2:
        if i % 2 == 0:
            for j in range(1, int(i/2)+1):
                if i % (j) == 0:
                    if j not in yz:
                        yz.append(j)
            if sum(yz) == i:
                num += 1               
print(num)


发表于 2022-07-27 21:38:34 回复(0)
while True:
    try:
        n = int(input());
        count = 0;      
        for i in range(2,n+1):
            array = [];
             
            for j in range (1,i):                
                if i % j == 0:
                    array.append(j);
#             print(array);
            if sum(array) == i:
#                 print(i); 
                count += 1;
        print(count);
    except:
        break;
发表于 2022-07-18 16:38:29 回复(0)
# 方法1
import math
a = int(input())

count = 0
for i in range(1, a+1):
    b = 0
    for j in range(1, i):
        if i % j == 0:
            b += j
            
    if b == i:
        count += 1
print(count)

# 方法2
print(3)

发表于 2022-07-12 23:59:25 回复(0)
n = int(input())
count = 0
for i in range(1,n):
    sum = 0
    for j in range(1,i):
        if i%j ==0:
            sum +=j
    if sum ==i:
        count += 1
print(count)
发表于 2022-07-06 23:02:35 回复(0)
def findfactor(num):
    if num == 0:
        return []
    s = set()
    fac = 1
    while fac < num:
        if num % fac == 0:
            s.add(fac)
            s.add(int(num/fac))
        fac += 1
    return s

count = 0
n = 1
while n < 1000:
    factors = list(findfactor(n))
    if sum(factors) == 2*n:
        count+=1
    n += 1
    
print(count)
发表于 2022-07-03 14:22:54 回复(0)
n = int(input())
count = 0
if n == 1:
    print(count)
else:
    for i in range(2,n):
        dict1 = {}
        n = 1
        while n <= (i/2):
            if (i % n) == 0:
                dict1[n] = dict1.get(n,1)
            n += 1
        if i == sum(dict1):
            count += 1
    print(count)

发表于 2022-06-28 22:46:17 回复(0)
python 两层循环:
n = int(input())
sum_m = 0
for i in range(1,n):
    sum_n = 0
    for j in range(1,i):
        if i % j == 0:
            sum_n += j
        else:
            continue
    if sum_n == i:
        sum_m += 1
print(sum_m)
发表于 2022-06-23 15:30:18 回复(0)
while True:
    try:
        n = int(input())
        num = 0    #初始计数为0
        for i in range(1,n+1):    #遍历1~n个数
            lists = [] #列表用来放每个数的因子
            for j in range(1,i+1):
                if i%j == 0:   #能整除则为因子
                    lists.append(i//j)
            a = 0 #各因子之和,用于和每个数本身比较
            for k in range(1,len(lists)):
                a = a + lists[k]
            if lists[0] == a:  #相等,则为完全数
                num = num + 1
        print(num)  #输出完全数个位数
    except:
        break

发表于 2022-06-09 14:57:36 回复(0)

问题信息

难度:
83条回答 31066浏览

热门推荐

通过挑战的用户

查看代码
完全数计算