【DidaOJ】[491]【C语言训练】亲密数

文章字数:171

问题描述

问题分析

涉及到因子的运算

为了节省运算次数

用了一个数组来记录各个数的因子总和

然后因为要求一对只输出一次

后面的数比前面大

所以第二重循环的起点可以从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语言训练】亲密数

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...