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 <stdio.h>
#include <math.h>
#include <stdbool.h>

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)
				printf("%u, ", i);
			else
				printf("%u, %u, ", i, num / i);
			sum += i + (i == (j = num / i) ? 0 : j);
		}
	}

	printf("sum divisors = %u number * 2 = %u\n", sum, num * 2);

	return sum;
}

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

int main()
{
	printf("%u\n", isDeficient(21));
	printf("%u\n", isDeficient(20));

	return 0;
}




/*
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
...