设计一个子函数,找出任意2个整数的最大公约数,并在主函数中调用此函数。
时间: 2023-05-31 21:19:02 浏览: 208
C语言程序设计-求出两个非零正整数的最大公约数,并作为函数值返回
5星 · 资源好评率100%
### 回答1:
好的,下面是一个设计子函数的例子,用于找出任意2个整数的最大公约数,并在主函数中调用此函数:
```python
def gcd(a, b):
"""
找出a和b的最大公约数
"""
if b == 0:
return a
else:
return gcd(b, a % b)
# 在主函数中调用gcd函数
a = 24
b = 36
print("最大公约数为:", gcd(a, b))
```
这个函数使用递归的方式来计算最大公约数。如果b等于0,则返回a,否则递归调用gcd函数,将b和a%b作为参数传递给它。在主函数中,我们可以将任意两个整数作为参数传递给gcd函数,并打印出结果。
### 回答2:
什么是最大公约数?
最大公约数是指两个或多个整数之间的最大公约数,即可以同时整除这些整数的最大正整数。
如何找到任意2个整数的最大公约数?
有几种方法可以找到最大公约数,例如:
1.穷举法:从较小的数开始,依次向下找到两个数都能整除的最大的数,即为最大公约数。
2.辗转相除法:用较大的数除以较小的数,得到余数,再用除数去除余数。持续这个过程,直到余数为0,最后的除数即为最大公约数。
3.更相减损术:用较大的数减去较小的数,得到差值,再用较小的数去减去差值。持续这个过程,直到两个数相等,最后的值即为最大公约数。
接下来,我们实现用辗转相除法找到任意2个整数的最大公约数的子函数:
#include <stdio.h>
int gcd(int a, int b) //子函数名称叫做gcd,参数为2个整数a和b
{
int r = a % b;
while (r != 0) //当余数不为0时,继续除法计算
{
a = b;
b = r;
r = a % b;
}
return b; //返回最大公约数b
}
在主函数中,我们可以调用该子函数来求出任意2个整数的最大公约数:
#include <stdio.h>
int gcd(int a, int b);
int main()
{
int a, b;
printf("请输入2个整数:\n");
scanf("%d%d", &a, &b);
int result = gcd(a, b); //调用子函数gcd
printf("%d和%d的最大公约数为%d\n", a, b, result);
return 0;
}
通过上面的代码,我们便可以轻松地求出任意2个整数的最大公约数了。
### 回答3:
最大公约数也叫最大公因数,是指两个或多个整数共有约数中,最大的一个。本题要求设计一个子函数,用来找出任意2个整数的最大公约数,并在主函数中调用此函数。
方法一:辗转相除法
辗转相除法,也称欧几里得算法,是求最大公约数的一种方法。假设a和b分别为两个整数,且a>b,有如下公式:
1. a%b=r(r为余数)
2. 若r=0,则b即为最大公约数
3. 若r≠0,则将a赋值为b,将b赋值为r,然后继续执行1,2两步。
接下来就可以用这个方法写一个子函数,代码如下:
```python
# 辗转相除法求最大公约数的函数,a和b分别为两个整数,返回它们的最大公约数
def gcd(a, b):
if b == 0:
return a # 如果b为0,a即为最大公约数
else:
return gcd(b, a % b) # 否则将a赋值为b,b赋值为a%b,重新执行函数
```
在主函数中调用该函数,代码如下:
```python
if __name__ == '__main__':
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
print("{}和{}的最大公约数为:{}".format(num1, num2, gcd(num1, num2)))
```
方法二:更相减损法
更相减损法是求最大公约数的另一种方法。假设a和b分别为两个整数,且a>b,有如下公式:
1. 若a、b都是偶数,则gcd(a, b)=2×gcd(a/2, b/2)
2. 若a是偶数,b是奇数,则gcd(a, b)=gcd(a/2, b)
3. 若a是奇数,b是偶数,则gcd(a, b)=gcd(a, b/2)
4. 若a、b都是奇数,则gcd(a, b)=gcd((a-b)/2, b)(又因为a-b是偶数,所以可以继续化简)
接下来就可以用这个方法写一个子函数,代码如下:
```python
# 更相减损法求最大公约数的函数,a和b分别为两个整数,返回它们的最大公约数
def gcd(a, b):
if a == b:
return a
elif a % 2 == 0 and b % 2 == 0:
return 2 * gcd(a/2, b/2)
elif a % 2 == 0 and b % 2 != 0:
return gcd(a/2, b)
elif a % 2 != 0 and b % 2 == 0:
return gcd(a, b/2)
elif a > b:
return gcd((a-b)/2, b)
else:
return gcd((b-a)/2, a)
```
在主函数中调用该函数,代码如下:
```python
if __name__ == '__main__':
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
print("{}和{}的最大公约数为:{}".format(num1, num2, gcd(num1, num2)))
```
两种方法都可以求出最大公约数,但第一种方法更为常用和简单。
阅读全文