Smallest triangular number larger than p
Given n number of buckets and each bucket is numbered from 1 to n and flowers in it are equal to triangular numbers. You have to choose the bucket which is left with minimum flower after picking ‘p’ flowers from it.
First bucket contains only 1 flower, second bucket contains 3, third bucket contains 6 and so on following a pattern of n(n+1)/2.
Examples :
Input : p = 4
Output : bucket 3
Explanation :
Buckets with flowers : 1 3 6 10 ....
So, bucket 3 is left with only two flowers after
selecting p flowers from it which is minimum.
Input : p = 10
Output : bucket 4
Explanation :
Bucket with flowers : 1 3 6 10 15 ...
So, selecting 10 flowers from 4th bucket leave
it with 0 flowers.
Approach :
Observing the input/output of different cases, bucket number can be calculated using formula :
n = ceil( (sqrt(8*p+1)-1)/2 ) ;
How does it work?
We need smallest n such than n*(n+1)/2 >= p
So we need to find roots of equation n2 + n – 2*p >= 0.
By applying the formula discussed here, we get n = ceil( (sqrt(8*p+1)-1)/2 )
C++
#include<bits/stdc++.h>
using namespace std;
int findBucketNo( int p)
{
return ceil ( ( sqrt ( 8*p + 1 ) -1 ) / 2 ) ;
}
int main()
{
int p = 10 ;
cout << findBucketNo(p);
return 0;
}
|
Java
import java.lang.System.*;
class GFG {
static int findBucketNo( int p)
{
return ( int )Math.ceil((
Math.sqrt( 8 *p + 1 ) - 1 ) / 2 ) ;
}
public static void main(String[] args)
{
int p = 10 ;
System.out.println(findBucketNo(p));
}
}
|
Python 3
import math
def findBucketNo(p):
return math.ceil( ( math.sqrt(
8 * p + 1 ) - 1 ) / 2 )
p = 10
print (findBucketNo(p))
|
C#
using System;
class GFG {
static int findBucketNo( int p)
{
return ( int )Math.Ceiling((
Math.Sqrt( 8*p + 1 ) -1 ) / 2 );
}
static public void Main ()
{
int p = 10 ;
Console.WriteLine(findBucketNo(p));
}
}
|
PHP
<?php
function findBucketNo( $p )
{
return ceil ( ( sqrt( 8 * $p +
1 ) -1 ) / 2 ) ;
}
$p = 10 ;
echo (findBucketNo( $p ));
?>
|
Javascript
<script>
function findBucketNo( p)
{
return Math.ceil( ( Math.sqrt( 8 * p + 1 ) -1 ) / 2 ) ;
}
let p = 10 ;
document.write(findBucketNo(p));
</script>
|
Time Complexity : O(logn)
Auxiliary Space: O(1) as it is using constant space for variables
Last Updated :
19 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...