Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 306
  • Last Modified:

Project Euler Problem #5

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
pzozulka
Asked:
pzozulka
  • 4
  • 3
  • 3
2 Solutions
 
CPColinSenior Java ArchitectCommented:
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
 
ozoCommented:
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
 
pzozulkaAuthor Commented:
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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
CPColinSenior Java ArchitectCommented:
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
 
pzozulkaAuthor Commented:
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
 
ozoCommented:
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
 
CPColinSenior Java ArchitectCommented:
Looks like I misunderstood what the code is trying to do. I'll bow out.
0
 
pzozulkaAuthor Commented:
Hmmm...that makes sense. Am I on the right track to assume to iterate i by approximately "increase amount" rather than "i++"?
0
 
pzozulkaAuthor Commented:
Thanks for your help CPColin.
0
 
ozoCommented:
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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now