def solution(): count = 0 x = 2 while True: y = 1 if digits_2(int(math.pow(x, y))) > y: break while True: p = int(math.pow(x, y)) l = digits_2(p) if l == y: count += 1 print(x, y, l) if l < y: break y += 1 x += 1 return count + 1 # 1^1
def solution_2(): count = 0 for x in xrange(2, 100): for y in xrange(1, 100): p = int(math.pow(x, y)) l = digits_2(p) # print(x, y, l) if l == y: count += 1 print(x, y, p) if l > y: break return count + 1 # 1^1
def sqrt_z(i, ndigits=4): """ calculate sqrt of i, which is an integer digit by digit calculation @param i @param ndigits precision after decimal point. 4 by default """ p = 0 reminder = 0 sqrtRoot = 0 numAfterDecimal = 0 digitBeforeDecimal = [] digitAfterDecimal = [] # before decimal while True: numDigits = digits_2(i) if i == 0: break elif numDigits == 1 or numDigits == 2: bringDown = i i = 0 else: if numDigits % 2 == 1: k = 10 ** (numDigits - 1) else: k = 10 ** (numDigits - 2) bringDown = i / k i = i - bringDown * k l = math.ceil(numDigits / 2.0) x, reminder, p = digitByDigitSqrt(bringDown, reminder, p) if ndigits < 10: sqrtRoot += x * 10 ** (l - 1) digitBeforeDecimal.append(x) if reminder == 0 and i == 0: break # after decimal while True: if reminder == 0: break bringDown = 0 x, reminder, p = digitByDigitSqrt(bringDown, reminder, p) numAfterDecimal += 1 if ndigits < 10: sqrtRoot += x * 10 ** (-1 * numAfterDecimal) digitAfterDecimal.append(x) if numAfterDecimal >= ndigits: break return sqrtRoot, digitBeforeDecimal, digitAfterDecimal
def getFourDigitNumbers(x): fourDigitNumbers = {} n = 1 while True: Pxn = P(x, n) lenP = digits_2(Pxn) if lenP == 4: front, end = getTwoParts(Pxn) if front not in fourDigitNumbers: fourDigitNumbers[front] = set([end]) else: fourDigitNumbers[front].add(end) if lenP > 4: break n += 1 return fourDigitNumbers
def test(): x = 8 # try 2, 8, 9, 10 for y in xrange(1, 24): p = int(math.pow(x, y)) l = digits_2(p) print(l, y)