1
package Exercises;
import java.math.BigInteger;
public class LargestPrimeFactor {

    public static void main(String[] args) {
        BigInteger x = new BigInteger ("600851475143");
        BigInteger prime = new BigInteger ("0");

        for (BigInteger i = new BigInteger("2"); i.compareTo(x.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (x.mod(i) == new BigInteger ("0"))
                if (isPrime(i))
                    prime = i;
        }
        System.out.println(prime);
    }

    public static boolean isPrime (BigInteger number)
    {
        for (BigInteger i = new BigInteger("2"); i.compareTo(number.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (number.mod(i) == new BigInteger("0"))
                return false;
        }
        return true;
    }
}

so I'm trying to find the largest prime factor for 600851475143 but when i run it it doesn't display anything and it keeps running how can i fix this ?

JRG
  • 4,037
  • 3
  • 23
  • 34

1 Answers1

2

There is a bug here. if (x.mod(i) == new BigInteger ("0")) suppose x=2, i=2, then x%i=0, but here will return a false, due to == will compare the address of the variable not the value.equals is a preferred one.


As @Zabuza suggested, I found a resource about the difference between == and equals.

caisil
  • 363
  • 2
  • 14