public class Euler3 {
    static long solve(long n) {
        long largest = 0;
        while (n % 2 == 0) {
            largest = 2;
            n /= 2;
        }
        for (long d = 3; d * d <= n; d += 2) {
            while (n % d == 0) {
                largest = d;
                n /= d;
            }
        }
        if (n > 1)
            largest = n;
        return largest;
    }

    public static void main(String[] args) {
        assert solve(13195) == 29 : "Checkpoint failed for n=13195";
        System.out.println(solve(600851475143L));
    }
}
