#include <iostream>
#include <cmath>

unsigned largest_prime_factor(unsigned n)
{
    unsigned lpf = 0;
    unsigned stop = sqrt(n);
    for (unsigned i=2; i<=stop; ++i)
        if (n%i==0) {
            lpf = i;
            while (n%i==0) { n/= i; }
            stop = sqrt(n);
        }
    return n==1 ? lpf : n;
}

int main()
{
    std::cout << largest_prime_factor(2147483647) << "\n";
    std::cout << largest_prime_factor(4294967291) << "\n";
    std::cout << largest_prime_factor(4294967294) << "\n";
    std::cout << largest_prime_factor(65536) << "\n";
    std::cout << largest_prime_factor(2*2*2*7*13*19) << "\n";
}