题目46:一个数的因子和不包括它本身的所有因子之和,如12的因子有1、2、3、4、6所以12的因子和是16。现在给定一个数n(n<=10^9),求它的因子和。

该博客提供了一段Python代码,用于计算一个不超过10^9的整数的因子和。程序通过遍历从1到给定数之间的所有数,判断是否为给定数的因子,然后将因子累加得到因子和。

题目转载:http://python.wzms.com/s/1/56

题目描述:

一个数的因子和不包括它本身的所有因子之和,如12的因子有1、2、3、4、6所以12的因子和是16。现在给定一个数n(n<=10^9),求它的因子和。

输入格式:

一个数

输出格式:

一个数


代码:

n = int(input('请输入一个数:'))
factor_list = []
for factor in range(1, n):
    if n % factor == 0:
        factor_list.append(factor)
factor_sum = 0
for factor in factor_list:
    factor_sum += factor
print(factor_sum)

运行结果:

 

以下是几种使用C语言找出1000以内所有完的代码示例: ### 示例 ```c #include <stdio.h> int main() { int s,i,m; for(m = 2; m < 1000; m++) { s = 0; for(i = 1; i < m; i++) { if((m % i) == 0) s = s + i; } if(s == m) { printf("%d,its factors are ",m); for(i = 1; i < m; i++) if(m % i == 0) printf("%d ",i); printf("\n"); } } return 0; } ``` 该代码通过两层循环,外层循环遍历2到999的所有,内层循环找出每个因子。如果因子之和等于该本身,则该为完,并输出其因子 [^1]。 ### 示例二 ```c #include <stdio.h> int main() { int n,j,sum; for(n = 2; n <= 1000; n++) { sum = 0; for (j = 1; j <= n / 2; j++) { if (n % j == 0) sum = sum + j; } if (n == sum) printf("%d是一个\n", n); } return 0; } ``` 此代码同样使用两层循环,过内层循环只遍历到`n / 2`,因为一个因子会超过它的半。如果因子之和等于该本身,则输出该是完 [^2]。 ### 示例三 ```c #include <stdio.h> int main() { int s,m,i; for(s = 2; s < 1000; s++) { m = 0; for(i = 1; i < s; i++) { if(s % i == 0) { m = m + i; } } if(m == s) { printf("%d its factors are:",m); for(i = 1; i < m; i++) { if(s % i == 0) printf("%d ",i); } printf("\n"); } } return 0; } ``` 该代码与示例类似,通过两层循环找出完并输出其因子 [^4]。 ### 示例四 ```c #include <stdio.h> int main() { for (int i = 2; i <= 1000; i++) { int sum = 0; for (int j = 1; j < i; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { printf("%d ", i); } } printf("\n"); return 0; } ``` 此代码使用两层循环,找出完后直接输出该完 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值