Project Euler Problem 1
The following is my solution to the first Project Euler problem. Project Euler is a large list of programming problems of varying complexities with an emphasis on mathematics.
The problem is as follows:
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.
Java code:
package projecteuler1;
import java.util.HashSet;
/**
*
* @author Eynar Roshev
*/
public class ProjectEuler1 {
public static void main(String[] args) {
ProjectEuler1 pe1 = new ProjectEuler1();
HashSet<Integer> m3 = pe1.multiples(3, 1000);
HashSet<Integer> m5 = pe1.multiples(5, 1000);
HashSet<Integer> m3m5 = new HashSet<Integer>(m3);
m3m5.addAll(m5);
int sum = 0;
for (Integer i: m3m5) {
sum += i;
}
System.out.println(sum);
}
HashSet<Integer> multiples(int n, int range) {
HashSet<Integer> list = new HashSet<Integer>();
int increment = 1;
int multiple = n * increment;
while (multiple < range) {
list.add(multiple++);
increment++;
multiple = n * increment;
}
return list;
}
}
We define a function to calculate the multiples of \(n\) in a given range and apply it for \(n \in \{3, 5\}\) which gives us two sets m3 and m5, containing the multiples of 3 and 5 respectively. We use sets because there may be overlapping multiples between both collections – which we do not want.
m3m5 is the union of m3 and m5, and we calculate the sum of the values of this set.