最小公倍数与最大公约数的求解(c语言)


最小公倍数的求解

1、最小公倍数=两整数的乘积÷最大公约数


2、穷举法

  • i = 0
  • 若i能同时被a,b整除,则i即为最小公约数,
  • 否则 i++,再回去执行第二步
    代码如下
int main()}{
  int a,b,c;
  scanf("%d %d", &a, &b);
  int i;
  for(i = 0; ;i++){
    if(i%a == 0 && i%b == 0) break;
  }
/*
  for (i = 0; i > 0; i--)
    if ( i%a == 0 && i%b == 0 && i%c == 0)    break;//多个数也可以求,只需增加判断条件。
*/
  printf("The least common multiple  %d\n", i);
  return 0;
}

最大公约数的求解

最大公约数主要使用三个方法:

  • 辗转相除法(包括使用递归的方法)
  • 相减法
  • 穷举法

辗转相除法

大致思路

  • a%b得余数c
  • 若c=0,则b即为两数的最大公约数
  • 若c≠0,则a=b, b=c(a取b原来的值,b取余数),再回去执行第一步
    不使用递归写法如下
#include<stdio.h>
int main(){
  int a,b,c;
  scanf("%d %d", &a, &b);
  while(b!=0){
    c = a%b;
    a = b;
    b = c;
  }
  printf("The largest common divisor  %d\n", a);
  printf("The least common multiple  %d\n", m*n/a); //最大公约数与最小公倍数相乘等于两数乘积
  return 0;
}

递归写法如下

int gcd(int a, int b){
    return b==0 ? a : gcd(b, a%b);
}

相减法

大致思路

  • 若a>b,则a=a-b
  • 若a<b,则b=b-a
  • 若a=b,则a(或b)即为两数的最大公约数
  • 若a≠b,则再回去执行第一步
    代码如下
#include<stdio.h>
int main (){
  int a, b;
  scanf("%d %d", &a, &b);
  while(a != b){
    if(a > b) a = a-b;
    else b = b-a;
  }
  printf("The largest common divisor  %d\n", a);
  return 0;
}

穷举法

从两个数中小的那个开始向下穷举,直到满足条件。

  • i = a(或b)
  • 若a,b能同时被i整除,则i即为最大公约数,
  • 否则 i--,再回去执行第二步
int main(){
  int a, b;
  scanf("%d %d", &a, &b);
  int t;
  for (t = a; t > 0; t--)
    if ( a%t == 0 && b%t == 0 )    break;
/*
  for (t = a; t > 0; t--)
    if ( a%t == 0 && b%t == 0 && c%t == 0)    break;//多个数也可以求,只需增加判断条件。
*/
  printf("The largest common divisor  %d\n", t);
  return 0;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM