The code stops looping at 71 and tells me that the biggest prime factor is 846269833, however this is not the correct. What is the problem with the code here? Also are there any ways to make the code more efficient?
That is simple to see if we know it, but it is a potentially very serious error.
Michel ten Voorde wrote:There are two problems with your code, and one of them is trivial. Hint: line 19. . . .
I have a simple rule of thumb about that sort of error, but I shall keep quiet about it just for now.
Michel ten Voorde wrote:There are two problems with your code, and one of them is trivial. Hint: line 19.
Furthermore, try to understand what happens inside the if-branch (at line 9). Something is missing.
I've fixed the problem at line 19 (doh!). But I can't seem to figure out the problem with the if-branch. I'd appreciate another hint...
Also I want to try redoing this by creating a separate class that finds prime numbers. But first I want to make this one work as long as my logic/code isn't too far off.
Stick a bunch of "System.out.println" statements in there, to see what 'guess' becomes each time, and what ranges your loops cover.
I will tell you that I believe your method will not work for 30, but it will work for 35...
What I found was that your original code would fail for any number that had more than two prime factors. Take 30. You find (in order) it is divisible by 2, 3, and 5. That leaves you 'guesses' of 15, 10, and 6. You then test (one at a time) to see if each of those are prime. None are, so your code fails.
I think your code could be adapted...you've got a lot of the right ideas. You take your starting number, and find the smallest number you can that will divide into it. What you're left with will either be prime, or composite. If it is prime, you know you're done. It would have to be the largest prime factor, since you always factor out the smallest.
If what you are left with is composite (i.e. not prime), then start over, trying to find ITS smallest prime factor.
My solution to this was 40 lines, including 2 lines of comments and 5 blank lines. I also put all my curly braces on lines by themselves, which makes it a longer than it could be.
That is the first class to find factors.
This one is to check if they are prime numbers.
And that's the main(?) code.
I've tested it with several different numbers and it seems to work. I also got the correct answer on Project Euler. Still, if there are any improvements that can be made up on it (I'm sure there's a ton), please feel free. I don't know if I've used classes efficiently, so I'd like some comment on that too. Also I got a yellow squiggly under every Vector, stating that it's an Obsolete Collection. When I googled it I realized it has something to do with the fact that Vectors are no longer used. Some explanation on this would be appreciated.
All in all, thanks for the help!
Example: you are trying to factorise 1077232094708723979137 and you find it divides by 7. Divide it by 7 and you get 153890299244103425591, but that itself divides by 7. It's 7 × 7 × 21984328463443346513. I don't know whether that last number is prime; I just hit the number pad until I had a big-looking number!
There is no need for anblock. You can writeSimpler, and much better style.
You can then use these to find you prime factors.