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: 2 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(n2) 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 ap * bq * cr … 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 ap * bq * cr … 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 ap. Divisors are 1, a, a2, …. ap. The count of divisors is p+1. Now let us take a slightly more complicated case apbp. The divisors are :
1, a, a2, …. ap
b, ba, ba2, …. bap
b2, b2a, b2a2, …. b2ap
bq, bqa, bqa2, …. bqap
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 * 32 * 51. 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:-
Output: Politness of 90 = 5 Politness of 15 = 3
Time complexity: O(sqrt(n))
Auxiliary space: O(1)
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 firstname.lastname@example.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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Find minimum number to be divided to make a number a perfect square
- Find the smallest number whose digits multiply to a given number n
- Find n'th number in a number system with only 3 and 4
- Find the Largest number with given number of digits and sum of digits
- Find count of digits in a number that divide the number
- Find if a number is divisible by every number in a list
- Find maximum number that can be formed using digits of a given number
- Given a number N in decimal base, find number of its digits in any base (base b)
- Find the largest good number in the divisors of given number N
- Find M-th number whose repeated sum of digits of a number is N
- Given number of matches played, find number of teams in tournament
- Find the number of ways to divide number into four parts such that a = c and b = d
- Find the maximum number of composite summands of a number
- Find the number of jumps to reach X in the number line from zero
- Find the number of integers x in range (1,N) for which x and x+1 have same number of divisors
- Find the total number of composite factor for a given number
- Find third number such that sum of all three number becomes prime
- Find the number of positive integers less than or equal to N that have an odd number of digits
- Find smallest number with given number of digits and sum of digits under given constraints
- Find Next number having distinct digits from the given number N