For Euler challenges requiring large numbers I'd really recommend a language that supports them natively, e.g Python (learning the basics, essentially programming in C-style, should not be too hard).

It also sort of seems to me that the algorithm might be not quite as efficient as possible (checking is_prime means trying to divide with the same values over and over).

Think about it.

For example, the prime factors of 38962 are 2, 7, 11, 11 and 23. The largest prime factor is 23. Do you really need to check all (odd) numbers all the way up to sqrt(38962) = 197 ? (It should be possible to find the prime factors using modulus around 13 times, not 98 * some_n times.)