Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Euler program in Java

Tags:

java

I just started with solving Project Eulers problems. Even though this one is very simple. I want to take your opinion on the best solution.

The problem:

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.

This is how I coded it:

package com.problem.one.ten;
public class NaturalNumber {

    public static void main(String args[])  {
        int sum=0;
        for(int i=0; i<1000; i++) {
            if((i%3 == 0) || (i%5 == 0)){
                sum += i;
            }
        }
        System.out.println(sum);
    }
}
like image 688
t0mcat Avatar asked Nov 09 '10 18:11

t0mcat


People also ask

How do you write Euler's number in Java?

exp() is used to return the Euler's number e raised to the power of a double value. Here, e is an Euler's number and it is approximately equal to 2.718281828459045.

What is Euler's method formula?

y=y(xi)+f(xi,y(xi))(x−xi).

Where Euler method is used?

Euler's method is used for approximating solutions to certain differential equations and works by approximating a solution curve with line segments.

What is the method of solving ode by Euler's method?

The Euler method is a first-order method, which means that the local error (error per step) is proportional to the square of the step size, and the global error (error at a given time) is proportional to the step size.


2 Answers

A better solution is a simple application of inclusion-exclusion principle. The sum of all numbers we are interested in is (1) the sum of all numbers divisible by 3, plus (2) the sum of all numbers divisible by 5, minus (3) the sum of all numbers divisible by 15. Each of the 3 sums is a sum of an arithmetic progression, which is relatively easy to find. Basically, you don't need a loop.

The number of non-negative integers divisible by n below N is exactly [(N - 1) / n] + 1. The maximal such number is n * ([(N - 1) / n], therefore by the arithmetic progression sum formula, their sum is [(N - 1) / n] * ([(N - 1) / n] + 1) * n / 2.

For our case, we have got:

  1. N = 1000, n = 3, [(N - 1) / n] = 333, sum = 333*334*3/2.
  2. N = 1000, n = 5, [(N - 1) / n] = 199, sum = 199*200*5/2.
  3. N = 1000, n = 15, [(N - 1) / n] = 66, sum = 66*67*15/2.

The final result is 233168.

Perhaps an even better solution exists.

like image 198
Vlad Avatar answered Oct 31 '22 00:10

Vlad


It looks fine, though I would put sum in main. It's not a big deal on such a simple program. But in general, you should declare variables in the narrowest possible scope.

like image 37
Matthew Flaschen Avatar answered Oct 30 '22 22:10

Matthew Flaschen