long integer - Java - Can't make ProjectEuler 3 Work for a very big number (600851475143) -
resolution:
turns out there (probably) "nothing wrong" code itself; inefficient. if math correct, if leave running done friday, october 14, 2011. i'll let know!
warning: may contain spoilers if trying solve project euler #3.
the problem says this:
the prime factors of 13195 5, 7, 13 , 29.
what largest prime factor of number 600851475143 ?
here's attempt solve it. i'm starting java , programming in general, , know isn't nicest or efficient solution.
import java.util.arraylist; public class improved { public static void main(string[] args) { long number = 600851475143l; // long number = 13195l; long check = number - 1; boolean prime = true; arraylist<number> allprimes = new arraylist<number>(); { (long = check - 1; > 2; i--) { if (check % == 0) { prime = false; } } if (prime == true && number % check == 0) { allprimes.add(check); } prime = true; check--; } while (check > 2); system.out.println(allprimes); } }
when number
set 13195, program works fine, producing result [29, 13, 7, 5] should.
why doesn't work larger values of number
?
closely related (but not dupe): "integer number large" error message 600851475143
the code slow; correct run unacceptably large amount of time (about n^2/2
iterations of innermost loop input n
). try computing factors smallest largest, , divide out each factor find it, such as:
for (i = 2; i*i <= n; ++i) { if (n % == 0) { allprimes.add(i); while (n % == 0) n /= i; } } if (n != 1) allprimes.add(n);
note code add prime factors, without explicit check primality.
Comments
Post a Comment