mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
documetnation for positive divisors
This commit is contained in:
parent
6173a6a701
commit
f432c0f584
@ -1,34 +1,39 @@
|
||||
/// C++ Program to calculate number of divisors.
|
||||
|
||||
#include<iostream>
|
||||
#include<vector>
|
||||
|
||||
/**
|
||||
* @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.
|
||||
* <br/>Let N = P1^E1 * P2^E2 ... Pk^Ek
|
||||
* <br/>Therefore. number-of-divisors(N) = (E1+1) * (E2+1) ... (Ek+1).
|
||||
* <br/>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.
|
||||
* <br/>N = 36
|
||||
* <br/>36 = (3^2 * 2^2)
|
||||
* <br/>number_of_positive_divisors(36) = (2+1) * (2+1) = 9.
|
||||
* <br/>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.
|
||||
* <br/>N = -36
|
||||
* <br/>-36 = -1 * (3^2 * 2^2)
|
||||
* <br/>number_of_positive_divisors(-36) = (2+1) * (2+1) = 9.
|
||||
* <br/>list of positive divisors of -36 = 1, 2, 3, 4, 6, 9, 12, 18, 36.
|
||||
*
|
||||
**/
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* Algorithm
|
||||
*/
|
||||
int number_of_positive_divisors(int n) {
|
||||
std::vector<int> prime_exponent_count;
|
||||
for (int i=2; i*i <= n; i++) {
|
||||
for (int i = 2; i * i <= n; i++) {
|
||||
int prime_count = 0;
|
||||
while (n % i == 0) {
|
||||
prime_count += 1;
|
||||
@ -44,13 +49,16 @@ int number_of_positive_divisors(int n) {
|
||||
|
||||
int divisors_count = 1;
|
||||
|
||||
for (int i=0; i < prime_exponent_count.size(); i++) {
|
||||
divisors_count = divisors_count * (prime_exponent_count[i]+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;
|
||||
|
Loading…
Reference in New Issue
Block a user