【C++题解】1140 - 亲密数对
欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1140 - 亲密数对
类型:自定义函数
题目描述:
键盘输入 N ,N 在 2 至 2000 之间,求 2 至 N 中的亲密数对,就是 A 的因子和等于 B ,B 的因子和等于 A ,且 A≠B 。
如 48 和 75 是亲密数对。48 的因子和为 2+3+4+6+8+12+16+24=75 ,而 75 的因子和为 3+5+15+25=48 。
输入:
只有一行,为一个整数 N ( 2≤N≤2000 )
输出:
输出若干行,每行两个整数(用一个空格隔开)。
样例1:
输入:
200
输出:
48 75
75 48
140 195
195 140
样例2:
输入:
150
输出:
48 75
75 48
完整代码如下:
#include<bits/stdc++.h>
using namespace std;int sumYz(int s){int res=0;for(int i=2;i*i<=s;++i){if(s%i==0) res+=i+s/i;if(i==s/i) res-=i;}return res;
}
int main(){//一、分析问题//已知:一个整数N ,N 在 2 至 2000 之间; //未知:求 2 至 N 中的亲密数对;//关系: A 的因子和等于 B ,B 的因子和等于 A ,且 A≠B 。//二、定义变量(已知、未知、关系)int n,t; //三、输入已知cin>>n;//四、根据关系计算for(int i=2;i<=n;++i){t=sumYz(i);//五、输出未知 if(t<=n&&sumYz(t)==i&&i!=t) cout<<i<<" "<<t<<endl;}return 0;
}