求最小公倍数

作者:追风剑情 发布于:2016-5-5 10:30 分类:Algorithms

最小公倍数和最大公约数存在以下关系:

最大公因数×最小公倍数=两数的乘积

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace GCDTest
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. Console.WriteLine("GcdLcm()");
  12. Console.WriteLine("{0}和{1}的最小公倍数={2}", 28, 14, GcdLcm(28, 14));
  13. Console.WriteLine("{0}和{1}的最小公倍数={2}", 58, 14, GcdLcm(58, 14));
  14. Console.WriteLine("{0}和{1}的最小公倍数={2}", 99, 21, GcdLcm(99, 21));
  15.  
  16. Console.WriteLine("NormalLcm()");
  17. Console.WriteLine("{0}和{1}的最小公倍数={2}", 28, 14, NormalLcm(28, 14));
  18. Console.WriteLine("{0}和{1}的最小公倍数={2}", 58, 14, NormalLcm(58, 14));
  19. Console.WriteLine("{0}和{1}的最小公倍数={2}", 99, 21, NormalLcm(99, 21));
  20.  
  21. Console.Read();
  22. }
  23.  
  24. /// <summary>
  25. /// 辗转相除法求a和b的最大公约数
  26. /// </summary>
  27. public static int EuclidGcd(int a, int b)
  28. {
  29. if (b > a)
  30. {
  31. int tmp = a;
  32. a = b;
  33. b = tmp;
  34. }
  35.  
  36. while (b != 0)
  37. {
  38. int tmp_b = b;
  39. b = a % b;
  40. a = tmp_b;
  41. }
  42.  
  43. return a;
  44. }
  45.  
  46. /// <summary>
  47. /// 求a和b的最小公倍数
  48. /// 缺点: 如果a、b过大,会导致乘积溢出。
  49. /// </summary>
  50. public static int GcdLcm(int a, int b)
  51. {
  52. int r = (a * b) / EuclidGcd(a, b);
  53. return r;
  54. }
  55.  
  56. /// <summary>
  57. /// 求a和b的最小公倍数
  58. /// 缺点: 如果a非常小,b非常大,会导致while循环相当漫长。
  59. /// </summary>
  60. public static int NormalLcm(int a, int b)
  61. {
  62. int r = a;
  63. while (r % b != 0)
  64. {
  65. r += a;
  66. }
  67. return r;
  68. }
  69. }
  70. }

运行结果

111111.png

标签: Algorithms

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号