Express a number as sum of consecutive numbers
Last Updated :
04 Oct, 2021
Given a number N, write a function to express N as sum of two or more consecutive positive numbers. If there is no solution, output -1. If there are multiple solution, then print one of them.
Examples:
Input : N = 10
Output : 4 + 3 + 2 + 1
Input : N = 8
Output : -1
Input : N = 24
Output : 9 + 8 + 7
Sum of first n natural numbers = n * (n + 1)/2
Sum of first (n + k) numbers = (n + k) * (n + k + 1)/2
If N is sum of k consecutive numbers, then
following must be true.
N = [(n+k)(n+k+1) - n(n+1)] / 2
OR
2 * N = [(n+k)(n+k+1) - n(n+1)]
Below is the implementation based on above idea.
C++
#include <bits/stdc++.h>
using namespace std;
void printConsecutive( int last, int first)
{
cout << first++;
for ( int x = first; x<= last; x++)
cout << " + " << x;
}
void findConsecutive( int N)
{
for ( int last=1; last<N; last++)
{
for ( int first=0; first<last; first++)
{
if (2*N == (last-first)*(last+first+1))
{
cout << N << " = " ;
printConsecutive(last, first+1);
return ;
}
}
}
cout << "-1" ;
}
int main()
{
int n = 12;
findConsecutive(n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void printConsecutive( int last, int first)
{
System.out.print(first++);
for ( int x = first; x<= last; x++)
System.out.print( " + " + x);
}
static void findConsecutive( int N)
{
for ( int last = 1 ; last < N; last++)
{
for ( int first = 0 ; first < last; first++)
{
if ( 2 *N == (last-first)*(last+first+ 1 ))
{
System.out.print(N+ " = " );
printConsecutive(last, first+ 1 );
return ;
}
}
}
System.out.print( "-1" );
}
public static void main(String[] args)
{
int n = 12 ;
findConsecutive(n);
}
}
|
Python3
def printConsecutive(last, first):
print (first, end = "")
first + = 1
for x in range (first, last + 1 ):
print ( " +" , x, end = "")
def findConsecutive(N):
for last in range ( 1 , N):
for first in range ( 0 , last):
if 2 * N = = (last - first) * (last + first + 1 ):
print (N, "= " , end = "")
printConsecutive(last, first + 1 )
return
print ( "-1" )
n = 12
findConsecutive(n)
|
C#
using System;
class GfG
{
static void printConsecutive( int last, int first)
{
Console.Write(first++);
for ( int x = first; x <= last; x++)
Console.Write( " + " +x);
}
static void findConsecutive( int N)
{
for ( int last = 1; last < N; last++)
{
for ( int first = 0; first < last; first++)
{
if (2 * N == (last - first)
* (last + first + 1))
{
Console.Write(N + " = " );
printConsecutive(last, first + 1);
return ;
}
}
}
Console.Write( "-1" );
}
public static void Main ()
{
int n = 12;
findConsecutive(n);
}
}
|
PHP
<?php
function printConsecutive( $last , $first )
{
echo $first ++;
for ( $x = $first ; $x <= $last ; $x ++)
echo " + " , $x ;
}
function findConsecutive( $N )
{
for ( $last = 1; $last < $N ; $last ++)
{
for ( $first = 0; $first < $last ; $first ++)
{
if (2 * $N == ( $last - $first ) *
( $last + $first + 1))
{
echo $N , " = " ;
printConsecutive( $last , $first + 1);
return ;
}
}
}
echo "-1" ;
}
$n = 12;
findConsecutive( $n );
?>
|
Javascript
<script>
function printConsecutive(last, first)
{
document.write(first++);
for (let x = first; x<= last; x++)
document.write( " + " + x);
}
function findConsecutive(N)
{
for (let last = 1; last < N; last++)
{
for (let first = 0; first < last; first++)
{
if (2 * N == (last - first) *
(last + first + 1))
{
document.write(N + " = " );
printConsecutive(last, first + 1);
return ;
}
}
}
document.write( "-1" );
}
let n = 12;
findConsecutive(n);
</script>
|
Output:
12 = 3 + 4 + 5
Reference :
https://math.stackexchange.com/questions/139842/in-how-many-ways-can-a-number-be-expressed-as-a-sum-of-consecutive-numbers
Share your thoughts in the comments
Please Login to comment...