【C语言训练】亲密数
循环结构 / 枚举
空间限制:16MB时间限制:1s总提交数:2674通过率:47.49%题目来源: 站点添加
题目描述
Description
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
输入描述
Input
无
输出描述
Output
3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号)
一对亲密数只输出一次, 小的在前
样本输入
Input example
无
样本输出
Output example
(220,284)(1184,1210)(2620,2924)
题目的编程来自于广东技术师范大学在线判题网站http://www.gpnuacm.com/#/home
#include <stdio.h>
#include <math.h>
int sum(int n)
{
int i, sum = 0;
for (i = 1; i*i<= n; i++)
{
if (n % i == 0)
{
if (i == 1 || i * i == n)
sum += i;
else
sum += i + n / i;
}
}
return sum;
}
int main()
{
int i,n;
for (i = 2; i <= 3000; i++)
{
n = sum(i);
if (sum(n) == i && i < n)
printf("(%d,%d)", i, n);
}
return 0;
}
第二种来自于别人写出来的代码
#include<stdio.h>
int main()
{
int a, i, b, n;
for (a = 1; a < 3000; a++)
{
for (b = 0, i = 1; i <= a / 2; i++)
{
if (!(a % i))
{
b += i;
}
}
for (n = 0, i = 1; i <= b / 2; i++)
{
if (!(b % i))
{
n += i;
}
}
if (n == a && a < b)
{
printf("(%d,%d)",a,b);
}
}
}