欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1150:求正整数2和n之间的完全数

发布时间:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 信息学奥赛一本通 1150:求正整数2和n之间的完全数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

【题目链接】

ybt 1150:求正整数2和n之间的完全数

【题目考点】

1.因数、因子

因数(因子)是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
因数包括这个数本身而不包括因子

【解题思路】

设一个函数,功能为求一个数的因子之和。方法如下:
设数字为a,遍历1到小于a的所有数字,将a能整除a的数字(a的因子)加和,返回加和。
主函数中:遍历2~n的每个整数,判断这个数与其因子加和是否相等,是则输出。

【题解代码】

解法1:使用函数

#include<bits/stdc++.h> using namespace std; //求数字n的因子之和 本题的因子不包括n本身。 int sumOfFactor(int n) {int s = 0;//加和 for(int i = 1; i < n; ++i)//注意:n的因子不包括n if(n % i == 0)//如果i是n的因子 s += i;return s; } int main() {int n;cin >> n;for(int i = 2; i <= n; ++i)if(sumOfFactor(i) == i)cout << i << endl;return 0; }

解法2:不用函数

#include<bits/stdc++.h> using namespace std; int main() {int n;cin >> n;for(int i = 2; i <= n; ++i){int s = 0;for(int j = 1; j < i; ++j)if(i % j == 0)s += j;if(s == i)cout << i << endl;}return 0; }

总结

以上是生活随笔为你收集整理的信息学奥赛一本通 1150:求正整数2和n之间的完全数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。