Core Java

Check For Consecutive Integers Number Sum Example

Determining whether a given positive integer can be represented as the sum of two or more consecutive integers is a classic problem in number theory and algorithm design. Such numbers are interesting because they reveal properties about sequences and arithmetic progressions, and the problem has practical applications in coding interviews and mathematical puzzles. In this example we will demonstrate how you can check if a number sum can come from consecutive integers.

1. Introduction to the Problem

The problem is: Given a positive integer n, determine if it can be expressed as the sum of two or more consecutive positive integers. For example:

  • 15 can be expressed as 1 + 2 + 3 + 4 + 5 (five consecutive numbers)
  • 9 can be expressed as 4 + 5
  • 10 cannot be expressed as the sum of two or more consecutive integers

The challenge is to find an efficient way to check this without enumerating all possible sequences.

2. Brute-Force Approach

The brute-force method involves checking every possible sequence of consecutive numbers starting from 1 up to n/2 and seeing if any sequence sums up to n. Let’s understand the code that implements this approach:

public class ConsecutiveSumBruteForce {
    public static boolean isSumOfConsecutive(int n) {
        for (int start = 1; start <= n / 2; start++) {
            int sum = 0;
            for (int num = start; sum < n; num++) {
                sum += num;
                if (sum == n && (num - start + 1) >= 2) {
                    return true; // Found a sequence of two or more numbers
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        int[] testNumbers = {9, 10, 15, 16, 21};
        for (int num : testNumbers) {
            System.out.println(num + " is sum of consecutive integers? " + isSumOfConsecutive(num));
        }
    }
}

2.1 Code Explanation

The given Java class ConsecutiveSumBruteForce checks whether a number can be expressed as the sum of two or more consecutive positive integers. The method isSumOfConsecutive(int n) uses a brute-force approach where it iterates through possible starting numbers (from 1 to n/2) and for each start, it keeps adding consecutive numbers until the sum is greater than or equal to n. If the sum equals n and the count of terms is at least 2, it returns true, indicating that n can be represented as such a sum. The main method tests this function with a list of integers and prints whether each number satisfies the condition or not.

2.2 Code Output

The output of the above program demonstrates how the brute-force approach evaluates each number to determine if it can be expressed as the sum of two or more consecutive integers. For each test case, the result indicates whether a valid consecutive sum sequence was found (true) or not (false).

9 is sum of consecutive integers? true
10 is sum of consecutive integers? false
15 is sum of consecutive integers? true
16 is sum of consecutive integers? false
21 is sum of consecutive integers? True

3. Optimized Approach

There is a well-known mathematical property: A number n can be expressed as a sum of two or more consecutive integers if and only if n is not a power of 2. This property can be proved mathematically by representing the sum of k consecutive numbers starting from x as:

n = x + (x+1) + (x+2) + ... + (x + k - 1) = k * x + (k * (k - 1)) / 2

For some integer x and k >= 2. Using this, you can derive conditions for n to be expressed as the sum of consecutive integers. The key takeaway is that if n is a power of two, it cannot be expressed as the sum of two or more consecutive integers; otherwise, it can.
Let’s understand the code that implements this optimized approach:

public class ConsecutiveSumOptimized {

    // Function to check if a number is a power of 2
    private static boolean isPowerOfTwo(int n) {
        return (n & (n - 1)) == 0;
    }

    public static boolean isSumOfConsecutive(int n) {
        if (n < 3) return false;  // smallest sum of 2 consecutive positive integers is 1 + 2 = 3
        return !isPowerOfTwo(n);
    }

    public static void main(String[] args) {
        int[] testNumbers = {9, 10, 15, 16, 21};
        for (int num : testNumbers) {
            System.out.println(num + " is sum of consecutive integers? " + isSumOfConsecutive(num));
        }
    }
}

3.1 Code Explanation

The ConsecutiveSumOptimized class provides an efficient way to determine whether a given number can be expressed as the sum of two or more consecutive positive integers. The core idea is based on the mathematical insight that only powers of 2 cannot be written as such sums. The isPowerOfTwo(int n) method uses a bitwise trick—checking if n AND n - 1 equals zero—to determine if a number is a power of 2. In the isSumOfConsecutive(int n) method, numbers less than 3 are immediately ruled out, and for all others, it returns true if the number is not a power of 2. The main method tests this logic on a sample set of numbers, printing whether each can be expressed as a sum of consecutive integers.

3.2 Code Output

Let us look at the output of the above optimized code:

9 is sum of consecutive integers? true
10 is sum of consecutive integers? false
15 is sum of consecutive integers? true
16 is sum of consecutive integers? false
21 is sum of consecutive integers? True

4. Conclusion

The problem of checking whether a number can be expressed as the sum of two or more consecutive integers can be solved using a straightforward brute-force approach, which is easy to understand but inefficient for large numbers. The optimized approach leverages a fascinating mathematical property about powers of two to quickly determine the answer with just a constant time complexity. Understanding such properties can help solve similar problems more efficiently.

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Oldest
Newest Most Voted
S M
S M
1 year ago

10=1+2+3+4

Back to top button