本蒟蒻的第一篇题解,望大家多多见谅!
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;
}
else
cout<<"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;
else
cout << "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;
else
cout<<"NO";
return 0;
}
P a r t Part Part 4 4 4 总结
本题考查因数和的计算以及对满足条件的数进行判定
看完题解后,会不会感到很简单呢?赶快去试试吧!