C语言、Java、Python经典例题之最大公约数
有这么一些经典例题可以在C语言/C++、Java、Python编程语言中作为基础知识展示,例如求最大公约数、素数、9×9乘法表、百钱买百鸡、斐波那契数列、汉诺塔问题等,通过这些问题基本、简便的解决方式对于某个知识点的诠释,可以让我们更深刻地熟记并多样化地运用到其他更为复杂的习题中,所以想要学好编程语言请牢记这些经典基本的例题,最好能将代码背下来,提升自己对代码的熟悉度。
这篇文章将 求最大公约数(最小公倍数)问题 通过C语言/C++、Java、Python编程语言的多种解决方式进行汇总,方便进行总结。
描述
输入两个正整数m和n,计算其最大公约数。 |
输入
输入数据只有一组,在一行上输入两个正整数m和n(m,n<100000000)。 |
输出
在一行上输出m和n的最大公约数。 |
输入示例
36 48 |
输出示例
12 |
分析
求最大公约数可以用“辗转相除法”,方法如下: |
完成代码:
C#
#include<stdio.h> int main() { int m , n , i; //输入两个数m,n scanf("%d" , &m); scanf("%d" , &n); //从其中一个数开始递减,直到两个数能够整除那个数,跳出循环,那个数即为两个数的最大公约数 for(i=m;i>=1;i--) if(m%i==0 && n%i==0) break; printf("%d\n",i); return 0; }
C++
#include<iostream> using namespace std; //标准命名空间std int main() { int m , n , r , t; int m1 , n1; cout<< "请输入第1个数:"; cin>> m; cout<< "请输入第2个数:"; cin>> n; m1 = m; n1 = n; //保存原始数据供输出使用 if(m < n) { //m,n交换值 t = m; m = n; n = t; } do { r = m % n; m = n; n = r; }while(r != 0) cout<< m1 << "和" << n1 << "的最大公约数是" << m; return 0; } //求两个数的最小公倍数,只需将两数相乘除以最大公约数即可,即 m1*n1/m。
//递归调用 #include<iostream> using namespace std; int gcd1(int x, int y) { if(y == 0) return x; else return gcd1(y, x%y); } int main() { int a, b; cout<<"输入两个整数:"; cin>> a >> b; int g = gcd1(a,b); cout<<"最大公约数为:"<< g << endl; return 0; } /* 递归函数的一般形式 函数类型 递归函数名f(形参x) { if(满足结束条件) 结果 = 初值; else 结果 = 含f(x-1)的表达式 : 递归方程; 返回结果; } */
//函数 //求最小公倍数 #include<iostream> using namespace std; //编写函数 int sct(int m, int n) { int temp, a, b; //将较大数放到前面 if(m < n) { temp = m; m = n; n = temp; } a = m; b = n; //运用辗转相除法 while(b != 0) { temp = a % b; a = b; b = temp; } //返回最小公倍数,其中 m*n 是最大公约数 return(m * n / a); } int main() { int x, y, g; cout<<"请输入两个整数:"; cin >> x >> y; g = sct(x , y); cout << "最小公倍数为:" << g << endl; return 0; }
Java
import java.util.Scanner; public class Demo { public static void main(String[] args) { System.out.print("请输入a和b"); //以空格作为分隔符 Scanner scan = new Scanner(System.in); int a = scan.nextInt(); int b = scan.nextInt(); int middle1,middle2,middle3; middle1=a; middle2=b; middle3=0; //运用辗转相除法 for (int i=0;i<i+1;i++) { middle3=middle1%middle2; if(middle3==0) break; else{ middle1=middle2; middle2=middle3; } } System.out.println("最大公约数为:"+middle2); } }
Python
n1 = int(input("输入第1个数字:")) n2 = int(input("输入第2个数字:")) m = n1 n = n2 if m < n: t = m m = n n = t r = m % n while r != 0: m = n n = r r = m % n print(n1, "和", n2, "的最大公约数为", n)
#定义一个函数 def hcf(x, y): """该函数返回两个数的最大公约数""" #获取最小值 if x>y: smaller = y else: smaller = x for i in range(1, smaller + 1): if((x % i == 0) and (y % i ==0)): hcf = i return hcf n1 = int(input("输入第1个数字:")) n2 = int(input("输入第2个数字:")) #调用函数 print(n1, "和”, n2, "的最大公约数为", hcf(n1, n2))