#239.亲密对数

4 篇文章 0 订阅

本蒟蒻的第一篇题解,望大家多多见谅!

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 n2147483647

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 总结

本题考查因数和的计算以及对满足条件的数进行判定

看完题解后,会不会感到很简单呢?赶快去试试吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值