A polite number is a positive integer that can be written as the sum of two or more consecutive positive integers. Given N, find the N-th polite number.
Examples:
Input : 4 Output : 7 Explanation: The first 3 are 3(1+2), 5(2+3), 6(1+2+3). Input : 7 Output : 11 Explanation: 3, 5, 6, 7, 9, 10, 11.
There exist an interesting pattern that only powers of 2 are not present in series of Polite numbers. Based on this fact, there exist below formula (Lambek–Moser theorem) for N-th polite number.
Here to find Nth polite number we have to take n as n+1 in the above equation
The inbuilt log function computes log base-e, so dividing it by log base-e 2 will give log base-2 value.
Given below is the implementation of the above approach:
// CPP program to find Nth polite number #include <bits/stdc++.h> using namespace std;
// function to evaluate Nth polite number double polite( double n)
{ n += 1;
double base = 2;
return n + ( log ((n + ( log (n) /
log (base))))) / log (base);
} // driver code int main()
{ double n = 7;
cout << ( int )polite(n);
return 0;
} |
// Java program for finding N-th polite number import java.io.*;
class GFG {
// function to find N-th polite number
static double polite( double n)
{
n += 1 ;
double base = 2 ;
return n + (Math.log((n + (Math.log(n) /
Math.log(base))))) / Math.log(base);
}
// driver code
public static void main(String[] args)
{
double n = 7 ;
System.out.println(( int )polite(n));
}
} |
import math
# function to find Nth polite number def Polite(n):
n = n + 1
return ( int )(n + (math.log((n + math.log(n, 2 )), 2 )))
# Driver code n = 7
print Polite(n)
|
// Java program for finding // N-th polite number using System;
class GFG {
// Function to find N-th polite number
static double polite( double n)
{
n += 1;
double base1 = 2;
return n + (Math.Log((n + (Math.Log(n) /
Math.Log(base1))))) /
Math.Log(base1);
}
// Driver code
public static void Main(String []args)
{
double n = 7;
Console.Write(( int )polite(n));
}
} // This code is contributed by // Smitha Dinesh Semwal |
<?php // PHP program to find // Nth polite number // function to evaluate // Nth polite number function polite( $n )
{ $n += 1;
$base = 2;
return $n + (log(( $n + (log( $n ) /
log( $base ))))) / log( $base );
} // Driver code $n = 7;
echo ((int)polite( $n ));
// This code is contributed by Ajit. ?> |
<script> // Javascript program to find // Nth polite number // function to evaluate // Nth polite number function polite(n)
{ n += 1;
let base = 2;
return n + (Math.log((n + (Math.log(n) /
Math.log(base))))) / Math.log(base);
} // Driver code n = 7; document.write(parseInt(polite(n))); // This code is contributed by _saurabh_jaiswal. </script> |
Output:
11
Time complexity: O(1)
Auxiliary space: O(1)
Reference: Wikipedia