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

 

 

分析

 

 

 

求最大公约数可以用“辗转相除法”,方法如下:
(1)比较两数m和n,并使m大于n;
(2)将m作为被除数,n作为除数,相除后余数为r;
(3)循环判断r,若r = 0,则n为最大公约数,结束循环,若r ≠ 0,执行步骤m ← n,n ← r和步骤(2)。
也可以用递归调用和函数。

 完成代码:

 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))

 

posted @ 2020-09-26 17:13  哦呦aholic  阅读(394)  评论(0编辑  收藏  举报