亲密数
题目链接:
https://ac.nowcoder.com/acm/contest/18962/D
题目描述:
七夕到来了,大街上充满了现充的气息,就连数字们也谈起了恋爱!
如果 2 个不等的正整数 x、y,满足: xx 除自身以外所有因子之和等于 y ,y 除自身以外所有因子之和等于 x ,那么 x 、y 互为亲密数。
现在输入两个正整数 n ,请你输出 [l,r] 范围内的任意一对亲密数。即输出 2 个数 x , y ,满足l ≤ x , y ≤ r,且 x , y 互为亲密数。
输入描述:
两个正整数 l 和 r, 用空格隔开 1 ≤ l ≤ r ≤ 10^5
输出描述:
如果在 l 和 r 范围内存在亲密数, 则输出任意合法解.
如果不存在, 则输出 -1
示例1:
输入
200 300
输出
220 284
说明
220 的因子有: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
284 的因子有: 1 + 2 + 4 + 71 + 142 = 220
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int find(int n)
{
int sum=1;
int m=sqrt((double)n);
for(int i=2;i<=m;i++)
if(n%i==0)
sum+=i+n/i;
if(m*m==n)
sum-=m;
return sum;
}
int main(){
int l,r,b,c;
cin>>l>>r;
if(l>=r){
cout<<"-1"<<endl;
return 0;
}
for(int a=l;a<=r;a++){
b=find(a);
c=find(b);
if(a==c&&a<b&&b<=r){
cout<<a<<" "<<b<<endl;
return 0;
}
}
cout<<"-1"<<endl;
return 0;
}