Project Euler #1:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Here is my solution:
public class MultipleFinder {
private static final int MAX_NUMBER = 1000;
private static final int[] MULTIPLES = new int[] { 3, 5 };
public static void main(String[] args) {
long time = System.nanoTime();
int sum = 0;
for(int multiple : MULTIPLES) {
sum += triangle((MAX_NUMBER - 1) / multiple) * multiple;
}
sum -= triangle((MAX_NUMBER - 1) / (MULTIPLES[0] * MULTIPLES[1])) * (MULTIPLES[0] * MULTIPLES[1]);
System.out.println("Result: " + sum + "\nTime used for calculation in nanoseconds: " + (System.nanoTime() - time));
}
private static int triangle(int i) {
return (i + 1) * i / 2;
}
}
Output:
Result: 233168
Time used for calculation in nanoseconds: 51764
Questions:
- Is there a way to increase efficiency?
- Is there a way to change the code so that I get the correct solution when I add a
multiple
?