How to determine whether a given number is a deficient number in C++

1 Answer

0 votes
//  21 divisors = (1, 3, 7) : 1 + 3 + 7 = 11 : 11 < 21 = Deficient
//  21 divisors = (1, 3, 7, 21) : 1 + 3 + 7 + 21 = 32 : 32 < 21 * 2 = Deficient


#include <iostream>
#include <cmath>

unsigned SumNumberProperDivisors(const unsigned num) {
	unsigned sum = 0;

	for (unsigned i = 1, j; i <= sqrt(num); i++) {
		if (num % i == 0) {
			if (num / i == i)
				std::cout << i << " ";
			else
				std::cout << i << " " << num / i << " ";
			sum += i + (i == (j = num / i) ? 0 : j);
		}
	}

	std::cout << "sum divisors = " << sum << " number * 2 = " << num * 2 << "\n";

	return sum;
}

bool isDeficient(const unsigned num) {
	return SumNumberProperDivisors(num) < (2 * num);
}

int main()
{
	std::cout << "\n" << isDeficient(21) << "\n";
	std::cout << "\n" << isDeficient(20) << "\n";
}




/*
run:

1 21 3 7 sum divisors = 32 number * 2 = 42
1

1 20 2 10 4 5 sum divisors = 42 number * 2 = 40
0

*/

 



answered Nov 17, 2022 by avibootz
...