Solved

Project Euler Problem #5

Posted on 2014-02-12
10
291 Views
Last Modified: 2014-02-12
What is wrong with my code.  I can find numbers as long as divisor is lower than 19. When I try divisor = 19 or higher, I don't get anything returned:

public class SmallestMultiple{

     public static void main(String []args){

             int divisor=20;
             long i=1L;
             Boolean found = false;
             
             while(true)
             {
                 i++;
                 for(int j=divisor;j>0;j--)
                 {
                     if((i % j) == 0) 
                     {
                         if(j == 1) 
                         {
                             System.out.println(" " + i + " ");
                             found = true;
                             break;
                         }
                     }
                     else
                     {
                         break;
                     }  
                 }
                 
                 if(found)
                 {
                     System.out.println("Found\n");
                     break;
                 }
             }
    }
}
/*
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
*/

Open in new window

0
Comment
Question by:pzozulka
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
10 Comments
 
LVL 14

Expert Comment

by:CPColin
ID: 39854795
You're breaking after the first iteration of the loop, no matter what. Take out this block and see how it behaves:

                     else
                     {
                         break;
                     }  

Open in new window

0
 
LVL 84

Accepted Solution

by:
ozo earned 500 total points
ID: 39854804
When I run it for divisor=20, I get
 232792560
Found

But counting up to 232792560 may be slow.
You may want to think about a more efficient way to do it.
 divisor=23, divisor=25, divisor=27, divisor=29,  divisor=31,  divisor=32, etc. would be even slower with this method.
0
 
LVL 8

Author Comment

by:pzozulka
ID: 39854832
CPColin: That block of code is there to break the loop if I cannot evenly divide by any of the numbers between 20 - 1 (counting down). So I do intentionally want to break out of the loop if I cannot evenly divide.

Ozo: Perhaps I wasn't getting an answer because I was using an online java compiler that has a timeout set: http://www.compileonline.com/compile_java_online.php

I'm just happy the logic is correct. I'm sure there are an infinite many other ways to do this -- some more efficient -- and some less (based on what I've seen on stackoverflow).
0
How Do You Stack Up Against Your Peers?

With today’s modern enterprise so dependent on digital infrastructures, the impact of major incidents has increased dramatically. Grab the report now to gain insight into how your organization ranks against your peers and learn best-in-class strategies to resolve incidents.

 
LVL 14

Expert Comment

by:CPColin
ID: 39854841
I do intentionally want to break out of the loop if I cannot evenly divide.

The code, as you have it right now, breaks out of the loop as soon as the first number fails to divide evenly. Is that what you want?
0
 
LVL 8

Author Comment

by:pzozulka
ID: 39854851
Yes, I think so because what's the point of continuing to attempt to divide by any other numbers between 1 - 20 if one of them already failed.
0
 
LVL 84

Assisted Solution

by:ozo
ozo earned 500 total points
ID: 39854860
Assuming that you wanted to break out of the loop as soon as the first number fails to divide evenly, which would be consistent with a result of 2520 for d=10,
you might want to look at when and by how much the result increases as you increase d.
If you notice any patterns, that may give you some clues to ways to do it that would be less prone to timeouts.
0
 
LVL 14

Expert Comment

by:CPColin
ID: 39854865
Looks like I misunderstood what the code is trying to do. I'll bow out.
0
 
LVL 8

Author Comment

by:pzozulka
ID: 39854868
Hmmm...that makes sense. Am I on the right track to assume to iterate i by approximately "increase amount" rather than "i++"?
0
 
LVL 8

Author Comment

by:pzozulka
ID: 39854869
Thanks for your help CPColin.
0
 
LVL 84

Expert Comment

by:ozo
ID: 39854930
If you can find an appropriate "increase amount", that may be one way to gain efficiency.
A smaller "increase amount" may take longer, but too large an "increase amount" may risk skipping past the smallest solution.
If you can see any relationship between the results for different divisor values, it may give you some hints about how some possible "increase amount" may work.
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Tagging and Merging on Branch 1 68
Regarding swagger API 1 61
Where to place postgres JDBC driver jar on tomcat 8 70
How to fix  socket closed error 11 64
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question