Я пытался заставить это работать в течение нескольких дней, и я до сих пор не могу понять ошибку. Когда я выводю код, он печатает, но он не найдет дружественных пар (делитель first == second и наоборот).C ошибка программы - вывод 0
#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>
int sumDivisors(int num);
int sumDivisors(int num)
{
int counter, total;
for(counter = 1; counter < num; counter++)
{
if(num % counter == 0)
{
total += counter;
}
}
return (total);
}
int main(void)
{
int higher, lower, lowx, lowy, x, y, numOfPairs = 0;
printf("This program finds all amicable numbers within a range. \n");
printf("Please enter a lower limit: \n");
scanf("%d", &lower);
printf("Please enter a higher limit: \n");
scanf("%d", &higher);
for(lowx = lower; lowx <= higher; lowx++)
{
for(lowy = lower; lowy <= higher; lowy++)
{
if(sumDivisors(lowx) == sumDivisors(lowy))
{
numOfPairs++;
printf("Pair #%d: (%d, %d)\n", numOfPairs, lowx, lowy);
}
}
}
printf("There are %d amicable pairs from %d to %d\n", numOfPairs, lower, higher);
system("pause");
return (0);
}
Рассмотрим написание внутренний цикл как 'для (Lowy = lowx + 1; Лоуи <= выше; Лоуи ++)', чтобы избежать повторений. –
Хорошая точка, она делает ее более эффективной. Благодаря! – Submersed24
При дальнейшем мышлении вы можете неверно истолковать определение дружественных чисел, которые являются [двумя разными цифрами, так что сумма соответствующих делителей каждого равна другому числу] (https://en.wikipedia.org/ вики/Amicable_numbers). Вы можете найти список первых пар в [OEIS - A063990] (http://oeis.org/A063990). Посмотрите на это [Q & A] (http://stackoverflow.com/a/28268160/4944425) для более интересной оптимизации. –