N-th polite number

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.

 f(n) = n+ \left \lfloor log_2 (n+ log_2 n) \right \rfloor
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:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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));
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

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)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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.
?>

chevron_right



Output:

11

Reference: Wikipedia



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.