本蒟蒻的第一篇题解,望大家多多见谅!
P a r t Part Part 1 1 1 读题
题目描述:
编写程序求给定整数 n n n的“亲密对数”。“亲密对数”是指:若整数 a a a的因子(包括1但不包括自身,下同)之和为 b b b,整数 b b b的因子之和为 a a a,则称 a a a和 b b b为一对“亲密对数”。
要求使用函数,函数功能是:计算某一个数的因子(包括1但不包括自身)之和。
n n n由键盘输入,如果存在“亲密对数”则输出该数,否则输出NO。要求输入输出均在主函数中完成。
输入格式:
一行,一个整数 n n n( i n t int int范围之内)
输出格式:
输出一行,如题所述
输入样例1:
220
输出样例1:
284
输入样例2:
8
输出样例2:
NO
数据范围与提示:
n ≤ 2147483647 n≤2147483647 n≤2147483647
P a r t Part Part 2 2 2 思路
由题意可知,我们要先计算输入值 n n n的因数和(即为 m m m),再计算 m m m的因数和,如果这个因数和与 n n n相等,输出 m m m;否则输出NO。
1.判断
if(a的因数和==b&&b的因数和==a){cout<<b;
}
elsecout<<"NO";
2.求因数和
方法一:
int sum=0;
for(int i=1;i<=sqrt(n);i++){if(n%i==0){// 如果i是n的因子sum+=i+n/i;if(n/i==i||n/i==n)//如果k与i重复或与n重复sum-=n/i; //减去}
}
return sum;
方法二:
int sum=0;
for(i=2;i<=sqrt(n);i++){if(n%i==0){//判断两个因子是否相等if(i!=x/i){s=s+i+x/i;}else{s+=i; }}
}
return sum;
大家分析完后,可以试着写代码哦!
P a r t Part Part 3 3 3 代码
方法一:
#include <bits/stdc++.h>
using namespace std;
int ym(int n) {int sum = 0;for (int i = 1; i <= sqrt(n); i++) {if (n % i == 0) {sum += i + n / i;if (n / i == i || n / i == n)sum -= n / i;}}return sum;
}
int main() {long long n, m;cin >> n;m = ym(n);if ((n == ym(m)) && (m = ym(n)))cout << m;elsecout << "NO";return 0;
}
方法二:
#include <bits/stdc++.h>
using namespace std;
int ym(int n){int sum=0;for(i=2;i<=sqrt(n);i++){if(n%i==0){//判断两个因子是否相等if(i!=x/i){s=s+i+x/i;}else{s+=i; }}}return sum;
}
int main(){long long n,m;cin>>n;m=ym(n);if((n==ym(m))&&(m=ym(n)))cout<<m;elsecout<<"NO"; return 0;
}
P a r t Part Part 4 4 4 总结
本题考查因数和的计算以及对满足条件的数进行判定
看完题解后,会不会感到很简单呢?赶快去试试吧!