4.Python练习 (20200525)

Python练习(20200525)

1.求两个数的最大公约数,使用辗转相除法

  ① 减法:用两个数中较大的数减去较小的数,反复进行上述步骤,直到两个数的值相等,如果最终两个数相同,则这个数就是最大公约数。

 1 # 方法一:采用递归函数
 2 def func(x,y):
 3     if x == y:
 4         return '最大公约数:%s'%x
 5     else:
 6         if x>y:
 7             x = x-y
 8             return func(x,y)
 9         elif x<y:
10             y = y-x
11             return func(x,y)
12 num1 = int(input('num1:'))
13 num2 = int(input('num2:'))
14 res = func(num1,num2)
15 print(res)
16 # =>num1:18
17 # =>num2:48
18 # =>最大公约数:6
19 
20 # 方法二:采用while循环
21 def func(x,y):
22     while True:
23         if x == y:
24             return '最大公约数:%s'%x
25         elif x > y:
26             x = x-y
27         elif x < y:
28             y = y-x
29 num1 = int(input('num1:'))
30 num2 = int(input('num2:'))
31 res = func(num1,num2)
32 print(res)
33 # =>num1:48
34 # =>num2:36
35 # =>最大公约数:12

  ② 除法:两个整数中最大的能够被整除的除数。

 1 from functools import reduce
 2 def func(x,y):
 3     lis1 = list(range(2,101))
 4     lis2 = []
 5     tag = True
 6     while tag:
 7         for i in lis1:
 8             while True:
 9                 x1 = x%i
10                 y1 = y%i
11                 if x1 == 0 and y1 == 0:
12                     lis2.append(i)
13                     print(lis2)
14                     x = x/i
15                     y = y/i
16                 else:
17                     break
18         else:
19             tag = False
20     print(lis2)
21     res = reduce(lambda x,y:x*y,lis2)
22     return '最大公约数:%s'%res
23 num1 = int(input('num1:'))
24 num2 = int(input('num2:'))
25 res = func(num1,num2)
26 print(res)
27 # =>num1:49
28 # =>num2:98
29 # =>[7]
30 # =>[7, 7]
31 # =>[7, 7]
32 # =>最大公约数:49

 

posted @ 2020-05-25 18:29  星落……  阅读(93)  评论(0)    收藏  举报