常见算法:C语言求最小公倍数和最大公约数三种算法

转载 2013年05月11日 23:51:53

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接

求最小公倍数算法

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

求最大公约数算法

(1)辗转相除法

有两整数ab

① a%b得余数c

② c=0,则b即为两数的最大公约数

③ 若c≠0,则a=bb=c,再回去执行①

例如求2715的最大公约数过程为:

27÷15 1215÷12312÷30因此,3即为最大公约数

  1. #include<stdio.h>  
  2. void main()   /*  辗转相除法求最大公约数 */   
  3. {   
  4.    int m, n, a, b, t, c;  
  5.    printf("Input two integer numbers:\n");  
  6.    scanf("%d%d", &a, &b);  
  7.    m=a;   n=b;  
  8.    while(b!=0)  /* 余数不为0,继续相除,直到余数为0 */   
  9.    { c=a%b; a=b;  b=c;}  
  10.    printf("The largest common divisor:%d\n", a);  
  11.    printf("The least common multiple:%d\n", m*n/a);  
  12. }  

⑵ 相减法

有两整数a和b:

① 若a>b,则a=a-b

② 若a<b,则b=b-a

③ 若a=b,则a(或b)即为两数的最大公约数

④ 若a≠b,则再回去执行①

例如求27和15的最大公约数过程为:

27-15=12( 15>12 ) 15-12=3( 12>3 )

12-3=9( 9>3 ) 9-3=6( 6>3 )

6-3=3( 3==3 )

因此,3即为最大公约数

  1. #include<stdio.h>  
  2. void main ( )  /* 相减法求最大公约数 */  
  3. {    
  4.    int m, n, a, b, c;  
  5.     printf("Input two integer numbers:\n");  
  6.    scanf ("%d,%d", &a, &b); m=a; n=b;   
  7.      /* a, b不相等,大数减小数,直到相等为止。*/    
  8.    while ( a!=b)   
  9.          if (a>b)  a=a-b;        
  10.          else  b=b-a;   
  11.    printf("The largest common divisor:%d\n", a);  
  12.    printf("The least common multiple:%d\n", m*n/a);  
  13. }  

⑶穷举法

有两整数a和b:

① i=1

② 若a,b能同时被i整除,则t=i

③ i++

④ 若 i <= a(或b),则再回去执行②

⑤ 若 i > a(或b),则t即为最大公约数,结束

改进:

① i= a(或b)

② 若a,b能同时被i整除,则i即为最大公约数,

结束

③ i--,再回去执行②

有两整数a和b:

① i=1

② 若a,b能同时被i整除,则t=i

③ i++

④ 若 i <= a(或b),则再回去执行②

⑤ 若 i > a(或b),则t即为最大公约数,结束

改进:

① i= a(或b)

② 若a,b能同时被i整除,则i即为最大公约数,

结束

③ i--,再回去执行②

  1. #include<stdio.h>  
  2. void main ()  /* 穷举法求最大公约数 */  
  3. {    
  4.    int  m, n, a, b, i, t;   
  5.    printf("Input two integer numbers:\n");  
  6.    scanf ("%d,%d", &a, &b); m=a;  n=b;   
  7.    for (i=1; i<= a; i++)    
  8.        if ( a%i == 0 && b%i ==0 )    t=i;  
  9.    printf("The largest common divisor:%d\n", t);  
  10.    printf("The least common multiple:%d\n", m*n/t);  
  11. }   
  12. /*  改进后的 
  13.    for (t= a; t>0; t-- )     
  14.        if ( a%t == 0 && b%t ==0 )    break;  
  15. */  

  1. //穷举法求最小公倍数  
  2.      for (i= a; ; i++ )  
  3.          if ( i % a == 0 && i % b ==0 )     break;  
  4.      printf("The least common multiple:%d\n", i )  
  5.    
  6. //多个数的最大公约数和最小公倍数  
  7.      for (i= a; i>0; i-- )  
  8.          if (a%i==0&&b%i==0&&c%i==0)     break;  
  9.      printf("The largest common divisor:%d\n", i);  
  10.      for (i= a; ; i++ )  
  11.          if (i%a==0&&i%b==0&&i% c==0)    break;  
  12.      printf("The least common multiple:%d\n", i )  

欧几里得算法求解最大公约数和最小公倍数

欧几里得算法求解最大公约数和最小公倍数(C++ 语言)
  • luozhen07
  • luozhen07
  • 2015年07月28日 12:55
  • 1044

求最大公约数和最小公倍数(递归算法及非递归算法)

最近做题目发现一些题目需要求数的最大公约数和最小公倍数,想想最大公约数和最小公倍数平时做数学的时候感觉不是很难,但是突然要编程来实现,却一下子不知所措了,后来看了下别人写的,发现其实也不算特别难。最小...
  • hduzhouli
  • hduzhouli
  • 2014年11月25日 19:59
  • 2041

java代码求n个数的最小公倍数,HDOJ 2028,3种方法实现

题目链接点击打开链接 题目大意为:求n个正整数的最小公倍数 解题思路:求最小公倍数的方法我们在数学中学到过,我知道的有2种方法分别是 (1)求最大公约数法 (2)使用辗转相除法求 比如:下图为求 2 ...
  • Dragon_Dai_2017
  • Dragon_Dai_2017
  • 2017年04月20日 20:13
  • 1940

最大最小公倍数 java 蓝桥杯

问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 ...
  • qq_34594236
  • qq_34594236
  • 2016年04月18日 11:16
  • 1575

蓝桥杯--求3个数的最小公倍数

细心的人不难发现,这个坑爹的蓝桥杯的OJ做的如此之粗糙与恶劣,还设置了坑爹的VIP,想钱之疯魔程度,简直是不忍直视啊。题目上面说1~N-1, 后面给的样例就变成的从1~N里面筛选,这种赤裸裸的扇自己脸...
  • u010458863
  • u010458863
  • 2014年02月18日 22:56
  • 1406

蓝桥杯 - 算法训练 最大最小公倍数 C语言实现

算法训练 最大最小公倍数 首先,本博客转载于“娜一笑最倾城”,对他的分析加上自己的理解,加上标记锁定代码和思路。 思路:若n 和 n-1和n-2 三个数 两两互质的话,那么结果就是这三个数...
  • qq_34845121
  • qq_34845121
  • 2017年02月13日 23:27
  • 362

穷举法求最大公约数和最小公倍数

穷举法(也叫枚举法),穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。①定义1:对两个正整数a,b如果能在区间[a...
  • johnWcheung
  • johnWcheung
  • 2017年05月31日 13:00
  • 987

常见算法:C语言求最小公倍数和最大公约数三种算法

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 ...
  • wangtiewei
  • wangtiewei
  • 2016年03月16日 21:57
  • 565

python最小公倍数与最大公约

m=int(raw_input('please input a integer m')) n=int(raw_input('please input a integer n')) if m>n: m...
  • liyan123hn
  • liyan123hn
  • 2014年08月20日 20:25
  • 2612

常见算法:C语言求最小公倍数和最大公约数三种算法

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 ...
  • WEI_GW2012
  • WEI_GW2012
  • 2014年10月28日 10:33
  • 533
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常见算法:C语言求最小公倍数和最大公约数三种算法
举报原因:
原因补充:

(最多只允许输入30个字)