Largest exponential : Problem 99 : Project Euler
Comparing two numbers written in index form like 211 and 37 is not difficult, as any calculator would confirm that 211 = 2048 < 37 = 2187.
However, confirming that 632382518061 > 519432525806 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.
However, confirming that 632382518061 > 519432525806 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.
This is on of the easiest problem of Project Euler! Instead of calculating a^x and b^y actually to determine which one is greater, use the fact from analysis that log x is an increasing function. therefore if a^x > b^y => x*log a > y*log b
Python Code
import math
def largestExponential():
maxBE = 0.0
maxLineNumber = 0
lineNumber = 1
val = 0.0
f = open('base_exp.txt','r')
for line in f:
t = line[0:len(line)-1]
mylist = t.split(",")
val = float(mylist[1])*math.log(float(mylist[0]))
if maxBE <= val:
maxBE = val
maxLineNumber = lineNumber
lineNumber = lineNumber + 1
print("Maximum value at line Number",maxLineNumber)
largestExponential()
No comments:
Post a Comment