问题描述
问题分析
涉及到因子的运算
为了节省运算次数
用了一个数组来记录各个数的因子总和
然后因为要求一对只输出一次
后面的数比前面大
所以第二重循环的起点可以从i开始
没必要从1开始
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include<stdio.h>
int main() {
int a[3000];
for(int i=1; i<3000; i++) {
a[i]=0;
for(int j=1; j<=i/2; j++) {
if(i%j==0)
a[i]+=j;
}
}
for(int i=1; i<3000; i++) {
for(int j=i+1; j<3000; j++) {
if(a[i]==j&&a[j]==i)
printf("(%d,%d)",i,j);
}
}
printf("\n");
return 0;
}
|
题目地址:【DidaOJ】[491]【C语言训练】亲密数