最大公约数和数字n倍相加

问题1:编写一个程序计算s=a+aa+aaa+aaaa+...+aa..aa(例如2+22+222+2222+22222)的值,其中a属于正整数且a<=9,要求输入数字n和相加的数的个数m

def get_sum(n, m):
    res = 0
    while m > 0:
        res += int('1' * m) * n
        m -= 1
    return res


print(get_sum(2, 5))
python实现

问题2:求两个数的最大公约数。

辗转相除法:欧几里德算法又称辗转相除法。以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。

例如:1997 / 615 = 3 (余 152)

615 / 152 = 4(余7)

152 / 7 = 21(余5)

7 / 5 = 1 (余2)

5 / 2 = 2 (余1)

2 / 1 = 2 (余0)

至此,最大公约数为1。

def get_max_common_num(m, n):
    if m == 0 or n == 0:
        raise ValueError
    while n != 0:
        m, n = n, m % n
    return m


print(get_max_common_num(1997, 615))
print(get_max_common_num(8251, 6105))
辗转相除法

 

posted @ 2019-10-17 23:16  walle_zhao  阅读(274)  评论(0编辑  收藏  举报