/** * @file * @brief C++ Program to calculate number of divisors * * This algorithm use the prime factorization approach. * Any number can be written in multiplication of its prime factors. *
Let N = P1^E1 * P2^E2 ... Pk^Ek *
Therefore. number-of-divisors(N) = (E1+1) * (E2+1) ... (Ek+1). *
Where P1, P2 ... Pk are prime factors and E1, E2 ... Ek are exponents respectively. * * Example:- *
N = 36 *
36 = (3^2 * 2^2) *
number_of_positive_divisors(36) = (2+1) * (2+1) = 9. *
list of positive divisors of 36 = 1, 2, 3, 4, 6, 9, 12, 18, 36. * * Similarly if N is -36 at that time number of positive divisors remain same. * * Example:- *
N = -36 *
-36 = -1 * (3^2 * 2^2) *
number_of_positive_divisors(-36) = (2+1) * (2+1) = 9. *
list of positive divisors of -36 = 1, 2, 3, 4, 6, 9, 12, 18, 36. * **/ #include #include /** * Algorithm */ int number_of_positive_divisors(int n) { std::vector prime_exponent_count; for (int i = 2; i * i <= n; i++) { int prime_count = 0; while (n % i == 0) { prime_count += 1; n /= i; } if (prime_count != 0) { prime_exponent_count.push_back(prime_count); } } if (n > 1) { prime_exponent_count.push_back(1); } int divisors_count = 1; for (int i = 0; i < prime_exponent_count.size(); i++) { divisors_count = divisors_count * (prime_exponent_count[i] + 1); } return divisors_count; } /** * Main function */ int main() { int n; std::cin >> n; if (n < 0) { n = -n; } if (n == 0) { std::cout << "All non-zero numbers are divisors of 0 !" << std::endl; } else { std::cout << "Number of positive divisors is : "; std::cout << number_of_positive_divisors(n) << std::endl; } }