【发布时间】:2016-11-06 13:53:42
【问题描述】:
我有一个代码可以找到一个数字的除数之和,但我无法将它应用于我不断增加的 n 并分别打印所有数字。
代码是
long div(int n) {
long sum = 0;
int square_root = sqrt(n);
for (int i = 1; i <= square_root; i++) {
if (n % i == 0) {
sum += i;
if (i * i != n) {
sum += n / i;
}
}
}
return sum - n;
}
在我的 main() 上,我需要有一个从 1 开始到我的 MAXCYC 的 ac 数字,即 28。n 从 2 到 MAXNUM,即 10000000。程序需要找到所有完美、友好和善于交际的数字并用它们各自的对打印它们。
示例输出:
长度为 2 的循环:12285 14595 12285
循环长度5:12496 14288 15472 14536 14264 12496
for (int n = 2; n <= MAXNUM; n++) {
long sum = div(n);
long res = div(sum);
if (res <= MAXNUM) { // Checking if the number is just sociable
int c = 0;
while (c <= MAXCYC && n != res) {
res = div(sum);
c++;
}
if (c <= MAXCYC) {
printf("Cycle of length %d: ", c);
printf("%ld ", sum);
do {
printf("%ld ", res);
res = div(res);
}
while (sum < res);
printf("%ld ", sum);
c += c - 2;
printf("\n");
}
}
}
我只得到循环长度为 1、2 的对,并且没有超过。而且它甚至没有正确打印它,因为它说 Cycle of length 0: 在所有结果中没有增加。我认为问题出在第一次打印之前的 f 中,但我无法让它以一种只要 my 你们认为我应该改变什么?
(n == sum) 它打印 长度为 1 的循环:xx 对
(n == res && sum 它打印 长度为 2 的循环:xyx 对
(res 它打印 Cycle of length c: xyz ... x(包括第一个 x 的 c 个对数) p>
【问题讨论】:
-
这个程序的输入是什么?
-
@thecoder 运行的时候,应该是从 n = 2 开始,一直走到 n
-
并打印任何长度的所有周期,直到 28?
-
就是这样,先生。
标签: c