Project Euler Problem 99 Solution
Comparing two numbers written in index form like and is not difficult, as any calculator would confirm that .
However, confirming that would be much more difficult, as both numbers contain over three million digits.
Using base_exp.txt (right click and ‘Save Link/Target As…’), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.
NOTE: The first two lines in the file represent the numbers in the example given above.
As the question notes, it would be difficult to evaluate these exponents directly as they contain over three million digits each. Therefore, we must find a way to reduce these exponents to a manageable size.
To do so, we use the identity . Since if $ b a$, this will serve as an approximation of calculating the exponents directly.
#!/usr/bin/env python import os from math import log10 largest = [0, 0] for i, line in enumerate(open(os.path.join(os.path.dirname(__file__), 'base_exp.txt'))): a, x = list(map(int, line.split(','))) if x * log10(a) > largest: largest = [x * log10(a), i+1] print(largest)
$ time python3 largest-exponent.py real 0m0.025s user 0m0.020s sys 0m0.004s
Questions? Comments? Send me an email: [email protected]