发布网友 发布时间:2022-04-25 03:14
共2个回答
热心网友 时间:2023-10-22 20:14
亲密数对
**
描述
如果a的所有正因子和等于b,b的所有正因子和等于a,且a不等于b,则称a,b为亲密数对,给定正整数N,求2~N中的亲密数对。
输入
第一行一个正整数N,1<=N<=2000。
输出
输出若干行,每行有两个用一个空格隔开的正整数,表示一对亲密数
输入样例 1
200
输出样例1
48 75
75 48
140 195
195 140
#include<bits/stdc++.h>
using namespace std;
int ys(int n){
int all=0;
for(int i=2;i<=n/2;++i){
if(n%i==0)all+=i;
}
return all;
}
int main(){
int n;
cin>>n;
for(int i=2;i<=n;++i){
if(ys(ys(i))==i&&i!=ys(i)&&ys(i)<=n){
cout<<i<<" "<<ys(i)<<endl;
}
}
return 0;
}
个人理解
int ys(int n){
int all=0;
for(int i=2;i<=n/2;++i){
if(n%i==0)all+=i;
}
return all;
}
此处函数判断是否为因数。由于一个因数不可能大于它的一半,所以优化数据长度 i<=n/2 。
for(int i=2;i<=n;++i){
if(ys(ys(i))==i&&i!=ys(i)&&ys(i)<=n){
cout<<i<<" "<<ys(i)<<endl;
}
此处 if 的判断条件稍有讲究。 ys(i) 为题目中的b,而 ys(ys(i)) 则为b是否与a为亲密数对的判断。
而 ys(i)<=n 是为了*b的大小。
热心网友 时间:2023-10-22 20:15
#include
void main()
{
int k,j,m,n;
for(n=2;n