HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavaMinor

Project Euler #6 in Java

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
projecteulerjava

Problem

Project Euler #6:


The sum of the squares of the first ten natural numbers is,


\$1^2+2^2+ ... + 10^2 = 385\$


The square of the sum of the first ten natural numbers is,


\$(1+2+ ... + 10)^2 = 55^2 = 3025\$


Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is \$3025 − 385 = 2640\$.


Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

Here is my solution:

public class DifferenceFinder {

    private static final int MAX = 100;

    public static void main(String[] args) {
        long time = System.nanoTime();
        int result = MAX * (MAX + 1) / 2;
        result *= result;
        for(int i = 1; i <= MAX; i++) {
            result -= i * i;
        }
        time = System.nanoTime() - time;
        System.out.println("Result: " + result
                + "\nTime used to calculate in nanoseconds: " + time);
    }

}


It simply does:

$$(1+2+ ... + 100)^2-1^2-2^2- ... -100^2$$

Output:


Result: 25164150

Time used to calculate in nanoseconds: 2231

Questions:

  • Is the simplest solution the most efficient one?



  • Does it smell?

Solution

The sum of the first \$n\$ numbers is \$\frac{n(n+1)}{2}\$. The sum of the squares of the first \$n\$ numbers is \$\frac{n(n+1)(2n+1)}{6}\$. So the difference in the question can be expressed as \$\frac{n^2(n+1)^2}{4} - \frac{n(n+1)(2n+1)}{6} = \frac{(3n+2)(n-1)n(n+1)}{12}\$.

This solution is likely the most efficient.

Context

StackExchange Code Review Q#78273, answer score: 3

Revisions (0)

No revisions yet.