Express a number as sum of consecutive numbers
Last Updated :
23 Jul, 2025
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++
// C++ program to print a consecutive sequence
// to express N if possible.
#include <bits/stdc++.h>
using namespace std;
// Print consecutive numbers from
// last to first
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";
}
// Driver code
int main()
{
int n = 12;
findConsecutive(n);
return 0;
}
Java
// Java program to print a consecutive sequence
// to express N if possible.
import java.util.*;
class GFG
{
// Print consecutive numbers from
// last to first
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");
}
// Driver code
public static void main(String[] args)
{
int n = 12;
findConsecutive(n);
}
}
// This code is contributed by umadevi9616
Python3
# Python3 program to print a consecutive
# sequence to express N if possible.
# Print consecutive numbers
# from last to first
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")
# Driver code
n = 12
findConsecutive(n)
# This code is contributed by Shreyanshi Arun.
C#
// C# program to print a consecutive sequence
// to express N if possible.
using System;
class GfG
{
// Print consecutive numbers from
// last to first
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");
}
// Driver code
public static void Main ()
{
int n = 12;
findConsecutive(n);
}
}
// This code is contributed by vt_m
PHP
<?php
// PHP program to print a consecutive
// sequence to express N if possible.
// Print consecutive numbers from
// last to first
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";
}
// Driver Code
$n = 12;
findConsecutive($n);
// This code is contributed by nitin mittal
?>
JavaScript
<script>
// Javascript program to print a consecutive
// sequence to express N if possible.
// Print consecutive numbers from
// last to first
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");
}
// Driver Code
let n = 12;
findConsecutive(n);
// This code is contributed by _saurabh_jaiswal
</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
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem