Given an integer n. Find politeness of number **n**. Politeness of a number is defined as the number of ways it can be expressed as the sum of consecutive integers.

Input: n = 15 Output: 3 Explanation: There are only three ways to express 15 as sum of consecutive integers i.e., 15 = 1 + 2 + 3 + 4 + 5 15 = 4 + 5 + 6 15 = 7 + 8 Hence answer is 3 Input: n = 9; Output: 1 There are two ways of representation: 9 = 2 + 3 + 4 9 = 4 + 5

**Naive approach** is to run a loop one inside another and find the sum of every consecutive integers up to n. Time complexity of this approach will be O(n^{2}) which will not be sufficient for large value of n.

**Efficient** approach is to use factorization. We factorize the number n and count the number of odd factors. Total number of odd factors (except 1) is equal to politeness of the number. Refer this for proof of this fact. In general if a number can be represented as a^{p} * b^{q} * c^{r} … where a, b, c, … are prime factors of n. If a = 2 (even) then discard it and count total number of odd factors which can be written as **[(q + 1) * (r + 1) * …] – 1** (Here 1 is subtracted because single term in representation is not allowed).

How does above formula work? The fact is, if a number is expressed as a^{p} * b^{q} * c^{r} … where a, b, c, … are prime factors of n, then number of divisors is (p+1)*(q+1)*(r+1) ……

To simplify, let there be one factor and number is expressed as a^{p}. Divisors are 1, a, a^{2}, …. a^{p}. The count of divisors is p+1. Now let us take a slightly more complicated case a^{p}b^{p}. The divisors are :

1, a, a^{2}, …. a^{p}

b, ba, ba^{2}, …. ba^{p}

b^{2}, b^{2}a, b^{2}a^{2}, …. b^{2}a^{p}

…………….

…………….

b^{q}, b^{q}a, b^{q}a^{2}, …. b^{q}a^{p}

The count of above terms is (p+1)*(q+1). Similarly, we can prove for more prime factors.

**Illustration : ** For n = 90, decomposition of prime factors will be as follows:-

=> 90 = 2 * 3^{2} * 5^{1}. The power of odd prime factors 3, 5 are 2 and 1 respectively. Apply above formula as: (2 + 1) * (1 + 1) -1 = 5. Hence 5 will be the answer. We can crosscheck it. All odd factors are 3, 5, 9, 15 and 45.

Below is the program of above steps:-

## C++

// C+ program to find politeness of number #include<iostream> using namespace std; // A function to count all odd prime factors // of a given number n int countOddPrimeFactors(int n) { int result = 1; // Eliminate all even prime factor of number of n while (n%2 == 0) n /= 2; // n must be odd at this point, so iterate for only // odd numbers till sqrt(n) for (int i = 3; i*i <= n; i += 2) { int divCount = 0; // if i divides n, then start counting of // Odd divisors while (n%i == 0) { n /= i; ++divCount; } result *= divCount + 1; } // If n odd prime still remains then count it if (n > 2) result *= 2; return result; } int politness(int n) { return countOddPrimeFactors(n) - 1; } // Driver program to test above function int main() { int n = 90; cout << "Politness of " << n << " = " << politness(n) << "\n"; n = 15; cout << "Politness of " << n << " = " << politness(n) << "\n"; return 0; }

## Java

// Java program to find politeness of a number public class Politeness { // A function to count all odd prime factors // of a given number n static int countOddPrimeFactors(int n) { int result = 1; // Eliminate all even prime factor of number of n while (n%2 == 0) n /= 2; // n must be odd at this point, so iterate // for only odd numbers till sqrt(n) for (int i = 3; i*i <= n; i += 2) { int divCount = 0; // if i divides n, then start counting of // Odd divisors while (n%i == 0) { n /= i; ++divCount; } result *= divCount + 1; } // If n odd prime still remains then count it if (n > 2) result *= 2; return result; } static int politness(int n) { return countOddPrimeFactors(n) - 1; } public static void main (String[] args) { int n = 90; System.out.println("Politness of " + n + " = " + politness(n)); n = 15; System.out.println("Politness of " + n + " = " + politness(n)); } } // This code is contributed by Saket Kumar

## Python

# Python program to find politeness of number # A function to count all odd prime factors # of a given number n def countOddPrimeFactors(n) : result = 1; # Eliminate all even prime factor of # number of n while (n % 2 == 0) : n /= 2 # n must be odd at this point, so iterate # for only odd numbers till sqrt(n) i = 3 while i * i <= n : divCount = 0 # if i divides n, then start counting # of Odd divisors while (n % i == 0) : n /= i divCount = divCount + 1 result = result * divCount + 1 i = i + 2 # If n odd prime still remains then count it if (n > 2) : result = result * 2 return result def politness( n) : return countOddPrimeFactors(n) - 1; # Driver program to test above function n = 90 print "Politness of " ,n ," = ", politness(n) n = 15 print "Politness of ",n , " = ", politness(n) # This code is contributed by Nikita Tiwari.

Output:Politness of 90 = 5 Politness of 15 = 3

**Time complexity: **O(sqrt(n))

**Auxiliary space: **O(1)

**Reference:** Wikipedia

This article is contributed by Shubham Bansal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.