/*
В задачата се говори за приятелски числа, които са такива, при които сумата от делителите на едното число е равна на второто число, а сумата от делителите на второто число е равна на първото.
Пример:
Числата 1184 и 1210 са приятелски. Ако вземем делителите на 1184:
Делители на 1184: 1, 2, 4, 8, 16, 32, 37, 74, 148, 296, 592, 1184.
Сумата от тях: 1 + 2 + 4 + 8 + 16 + 32 + 37 + 74 + 148 + 296 + 592 + 1184 = 1210.
И за числото 1210:
Делители на 1210: 1, 2, 5, 10, 11, 22, 55, 110, 121, 242, 605, 1210.
Сумата от тях: 1 + 2 + 5 + 10 + 11 + 22 + 55 + 110 + 121 + 242 + 605 + 1210 = 1184.
Тези числа са приятелски, защото сумата на делителите на едното число дава другото число и обратно.
Как да решим задачата:
Програмата трябва да намери приятелски числа в даден диапазон.
За всяко число изчисляваме сумата на неговите делители (без самото число).
След това проверяваме дали тези две числа са приятелски, т.е. ако сумата от делителите на едното число е равно на второто и обратното.
Примерен алгоритъм:
За всяко число i от 1 до N:
Изчисляваме сумата на делителите на i.
Ако тази сума е число j и ако сумата от делителите на j е равно на i, то числата i и j са приятелски.
Ще напиша примерен код за решаване на задачата на езика C#:
*/
using System;
class Program
{
static int SumOfDivisors(int number)
{
int sum = 0;
for (int i = 1; i <= number / 2; i++)
{
if (number % i == 0)
{
sum += i;
}
}
return sum;
}
static void Main()
{
int limit = 10000; // Може да промените лимита
for (int i = 1; i < limit; i++)
{
int sumDivisorsI = SumOfDivisors(i);
if (sumDivisorsI > i) // Проверяваме само за числа по-големи от i
{
int sumDivisorsJ = SumOfDivisors(sumDivisorsI);
if (sumDivisorsJ == i)
{
Console.WriteLine($"Приятелски числа: {i} и {sumDivisorsI}");
}
}
}
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎