From charlesreid1

Revision as of 09:02, 1 July 2017 by Admin (talk | contribs)

This is problem 1 on Project Euler: https://projecteuler.net/problem=1

Question

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.

Approach

Two-part problem: enumerating multiples of 3 or 5, and summing them up.

Data structure:

  • Use a set to store integers and avoid duplicates.

Task 1: generate all multiples of b, up to a given maximum N.

  • Given a maximum N, biggest number t hat can be a multiple of b is N/b.
  • Generate numbers from 1 to N/b.
  • Multiply them by b to generate numbers up to N that are multiples.

Task 2: sum them up.

  • Iterate over your set using a generator.

Code

import java.util.Set;
import java.util.HashSet;

public class Euler {
	public static void main(String[] args) { 
		// Maximum
		int max = 100;
		
		// Multiples list
		int[] multiplesList = {3,5};
		
		// Results set
		Set<Integer> s = new HashSet<Integer>();

		// From 1 up to and including (max-1)/multiple (not max/multiple-1)
		for(int m=0; m<multiplesList.length; m++) { 
			int multiple = multiplesList[m];
			for(int i=1; i<=((max-1)/multiple); i++) { 
				int num = i*multiple;
				s.add(num);
			}
		}
		
		// Sum them all up
		int sum = 0;
		for(Integer i : s) { 
			sum += i;
		}
		System.out.println("sum = "+sum);
	}

}