NEUQ-OJ:1177 亲和数
2017-12-16 14:06
20 查看
亲和数
思路
一道模拟题,依然是跟着题意一步步执行即可。因为一个数的所有因数都会小于等于自己的大小,而本题要求是除了自己以外,所以我们可以用一个循环从1到n-1找一遍就可以拿到所有的因数了。时间复杂度为O(n)。
我们还可以进一步优化。因数都是成对的,比如220的因数:
1 2 4 5 10 11 20 22 44 55 110 220
其中:
1*220=220
2*110=220
4*55=220
…
所以我们只需要找到一个因数就可以确定与之对应的另外一个。因为1是每个数字都包含的因数,所以我们只需要从2顺序查找到n√即可。当然这里要做个特判,如果是平方数,那么它的因数n√只有一个不能重复相加。
时间复杂度为O(n√)。
关键的部分代码
int c=1; cin>>a; for(int j=2;j<sqrt(a);j++) { if(a%j==0) { if(a/j==j) c+=j; else c+=j+a/j; } }
两个数都执行了一样的步骤找好了因数相加完了以后判断是否和对方相等就可以了。这部分比较简单不再赘述。
相关文章推荐
- 【九度OJ】题目1177:查找 解题报告
- [NEUQ-OJ] 1012 SZ斐波拉契数列
- NEUQACM OJ:1070 谭浩强C语言(第三版)习题9.1
- 【嵙大OJ】Problem 1177:成绩统计
- neuq-oj-1042
- NEUQACM OJ:1255--查找最大元素
- NEUQACM OJ:1071谭浩强C语言(第三版)习题9.2
- neuq oj 1052: 谭浩强C语言(第三版)习题6.8 C语言
- NEUQ-OJ系列教程(一)
- NEUQ-OJ系列教程(二)
- 【NEUQ OJ】 1029: C基础-求解方程
- NEUQACM OJ:1299【白书习题】年份
- NEUQACM OJ 1008: C基础-公约公倍
- 【NEUQ OJ】1202: 人民币问题
- 【NEUQ OJ】1043: 谭浩强C语言(第三版)习题5.7
- 九度oj 题目1177:查找--string的替换、删除、反转
- NEUQACM OJ:1095--鸡兔同笼
- NEUQACM OJ 1590
- 九度OJ 1177 查找 (模拟)
- NEUQACM OJ:1072--谭浩强C语言(第三版)习题9.3