您的位置:首页 > 编程语言 > C语言/C++

Java / C++ / C 亲密数

2018-03-07 21:13 260 查看
题目描述

  两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

输入

输出

3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号)

一对亲密数只输出一次, 小的在前

样例输出

(220,284)(1184,1210)(2620,2924)

解析:

  按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。

  计算数各因子的算法: 用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则i为a的一个因子;否则i就不是a的因子。

  (这原来就是一个C语言题,剩下两种语言都是我无聊的产物)

#include<stdio.h>            //C
int main()
{
for(int i=1;i<3000;i++) //1-3000
{
int sum1=0,sum2=0;  //sum1是i的余数和,sum2是sum1的余数和
for(int j=1;j<=i/2;j++)
{
if((i%j)==0)
sum1+=j;
}
for(int j=1;j<=sum1/2;j++)
{
if((sum1%j)==0)
sum2+=j;
}
if(sum2==i&&i<sum1) //即sum1的余数和=原来的数,并且原数字小
printf("(%d,%d)",i,sum1);
}
}


#include<iostream>  //c++
using namespace std;
int  main()
{
for(int i=1;i<3000;i++)
{
int b=0,n=0;
for(int j=1;j<=i/2;j++)
{
if(!(i%j))
b+=j;
}
for(int j=1;j<=b/2;j++)
{
if(!(b%j))
n+=j;
}
if(n==i&&i<b)
cout<<"("<<i<<","<<b<<")";
}

}


package Oj;

public class Main {
public static void main(String[] args) {
for(int i=1;i<3000;i++)
{
int b=0,n=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)
b+=j;
}
for(int j=1;j<=b/2;j++)
{
if(b%j==0)
n+=j;
}
if(n==i&&i<b)

System.out.print("("+i+","+b+")");

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: