Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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)