CodeInside
@CodeInside

Почему неправильный результат выполнения функции?

Число называется совершенным, если сумма всех его делителей равна ему самому. Нужно написать поиск таких чисел во введенном интервале.
int a, b;
cin >> a >> b;

	printf("Perfect numbers of range [%d;%d]:\n", a, b);
	for (int i = a; i <= b; i++)//перебор всех чисел в интервале
	{
		int sum = 0;//при каждом новом числе сумма обнуляется
		for (int j = 2; j < abs(i); j++)
			if (abs(i) % j == 0)//делитель - число, которое делит первичное число без остатка
			{
				sum += j;
			}
		if (sum == i)
			cout << i << '\t';
	}

Результат всегда 0. Какие диапазоны только не брал. Какую логическую ошибку допустил?
Да, знаю, что для отрицательных чисел не подойдёт, ибо сумма всегда будет положительной. Но и с положительными числами алгоритм неправильно работает.
  • Вопрос задан
  • 1076 просмотров
Решения вопроса 1
@MiiNiPaa
Совершенное число́ (др.-греч. ἀριθμὸς τέλειος) — натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого́ числа).


Единицу забыли. Она тоже делитель.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы