|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Peteryo01223 于 2021-1-7 18:13 编辑
原题目:
编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如 gcd(x, y) 返回值为参数 x 和参数 y 的最大公约数。
小甲鱼的标准答案:
def gcd(x, y):
while y:
t = x % y
x = y
y = t
return x
我的问题:如果不用欧几里得算法,我这个思路行么?为何报错了呀?
def gcd(x,y): #定义
a = range[0:int(x)] # a 是一个 0 到 x 之间的整数
b = range[0:int(y)] # b 是一个 0 到 x 之间的整数
if a == b and x%a == 0 and y%b == 0: # a和b相等的时候,且 a 和 b 分别能被 x 和 y 整除
return x # 返回 x,或者返回 y 也行吧
print (gcd(6,8))
报错内容:
Traceback (most recent call last):
File "C:/Users/user/Desktop/20210107c.py", line 6, in <module>
print (gcd(6,8))
File "C:/Users/user/Desktop/20210107c.py", line 2, in gcd
a = range[0:int(x)] # a 是一个 0 到 x 之间的整数
TypeError: 'type' object is not subscriptable
再次请教各位高手。
本帖最后由 jackz007 于 2021-1-7 20:29 编辑
你这个代码既没有循环,又没有对 x 的处理,最后却要返回 x,怎么能够做到?
不过,我似乎明白了你的意思,就是通过枚举的方法,从 x,y 中较小的那一个起,从大往小逐一枚举,到 1 终止,如果 x、y 数能够同时整除枚举出来的某一个数,那么,这个除数自然就是最大公约数了。
楼主试试这个代码
- #coding:gbk
- def gcd(x , y): #定义
- if x > y :
- x , y = y , x
- for a in range(x , 1 , -1):
- if x % a == 0 and y % a == 0:
- break
- return a
- print(gcd(6,8))
- print(gcd(96,80))
复制代码
|
|