求最大公约数
if a < b:
for i in range(1,a+1):
if a%i == 0,b%i == 0:
print(i)
else:
for j in range(1,b+1):
if a%j == 0,b%j == 0:
print(j)
不知道哪里错了 为什么循环不可以直接写range(1,a+1)呢??求解答
1、您的两个同时满足的条件表达式,中间要用 and
;
2、if 下的语句,要有一个单位的缩进
,您没有。
3、求的是最大公约数
,您的算法有遗漏
。您先自己捋捋看。
用 a, b = 18, 99 试炼——
您的代码是打印输出了所有公约数
。需要修改,只输出最大公约数
。
#!/sur/bin/nve python
# coding: utf-8
a, b = 18, 99
if a < b:
for i in range(1,a+1):
if a%i == 0 and b%i == 0:
print(i)
else:
for j in range(1,b+1):
if a%j == 0 and b%j == 0:
print(j)
优化:设置一个最大公约数变量 max_factor
,存储最大公约数。找到更大的,重新赋值给她
。最后输出 max_factor 。
代码运行效果截屏图片
代码
#!/sur/bin/nve python
# coding: utf-8
a, b = 18, 99
if b < a:
a, b = b, a # b < a ,交换a、b的值。
max_factor = 0
for i in range(1, a+1):
if a%i == 0 and b%i == 0:
if i > max_factor:
max_factor = i
print(max_factor)
最大公约数可以使用欧几里得算法进行求解,即用较小的数去除较大的数,然后用余数再去除较小的数,依此类推,直到余数为0,此时的较小的数即为最大公约数。代码如下:
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
a, b = b, a % b
return a
关于循环中range函数的使用问题,range函数可以产生指定范围的数字序列。具体来说,常用的用法有三种:
需要注意的是,range函数中的参数应为整数,不能为浮点数。如果需要产生一段浮点数序列,可以使用列表推导式或numpy库中的linspace函数。例如:
import numpy as np
# 产生步长为1的整数序列
for i in range(10):
print(i)
# 产生步长为2的整数序列
for i in range(0, 10, 2):
print(i)
# 产生从10到1的整数序列
for i in range(10, 0, -1):
print(i)
# 产生0到1的浮点数序列,共11个点,包括端点
np.linspace(0, 1, 11)
# 产生0到1的浮点数序列,共10个点,不包括端点
np.linspace(0, 1, 10, endpoint=False)
# 产生0到1的浮点数序列,步长为0.1
np.arange(0, 1, 0.1)