• C#求最小公倍数与最大公约数


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Main
    {
        /*
        假设x和y的最大公约数是m,最小公倍数是n,则xy=mn
        分析:n=(x/m*y/m)*m=xy/m 
        1、公约数
            公约数,亦称“公因数”。它是一个能被若干个整数同时均整除的 整数。
            如果一个整数同时是几个整数的 约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。
            求两个数最大公约数的方法
        倍数关系
            若较大数是较小数的 倍数,那么较小数就是这两个数的最大公约数。
        互质关系
            若这两个数是 互质数,那么它们的最大公约数就是1.
        2、公倍数
            公倍数(common multiple)指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。
        公倍数举例
            A和B A/B=C 如果A能被B整除,则A为B和C的公倍数 
            两个数A和B,它们的公倍数就是既是A的倍数又是B的倍数的数,即能同时被A、B整除的数  
            比如说:12和15,它们的公倍数是60,120,180,等等  
            在这些公倍数中最小的那一个就叫最小公倍数,就是60。
        */
        class Program
        {
            public static bool IsEven(int number)
            {
                return number % 2 == 0;
            }
            public static int GetMax(int a, int b)
            {
                return a > b ? a : b;
            }
            public static int GetMin(int a, int b)
            {
                return a < b ? a : b;
            }
            static void Main(string[] args)
            {
                Console.WriteLine("请输入两个正整数:");
                bool num1ok = int.TryParse(Console.ReadLine(), out int num1);
                bool num2ok = int.TryParse(Console.ReadLine(), out int num2);
                if (!(num1ok && num2ok))
                {
                    Console.WriteLine("输入格式不正确!");
                    return;
                }
                int a = num1, b = num2, max = 0, min = 0;
                if (a == b)
                {
                    Console.WriteLine("最大公约数和最小公倍数都是:{0}", a);
                    return;
                }
    
                max = GetMax(a, b);
                min = GetMin(a, b);
                /*while (IsEven(a) && IsEven(b))//更相减损术算法
                {
                    a = a / 2;
                    b = b / 2;
                }
                while (max - min != min)
                {
                    a = min;
                    b = max - min;
                    max = GetMax(a, b);
                    min = GetMin(a, b);
                }*/
    
                while (max % min != 0)//辗转相除算法
                {
                    a = min;
                    b = max % min;
                    max = GetMax(a, b);
                    min = GetMin(a, b);
                }
                Console.WriteLine("最大公约数是:{0},最小公倍数是:{1}", min, num1 * num2 / min);
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    透视投影矩阵的推导
    选择排序
    递归运动函数的实现
    插入排序
    基本光照模型
    顶点法向量从物体坐标系变换到世界坐标系
    Phong和BlinnPhong光照模型
    unity3d使用脚本保存屏幕截图
    【转】C++11常用特性的使用经验总结
    右手坐标系下LookAt视图矩阵的推导
  • 原文地址:https://www.cnblogs.com/xiaobao5161/p/10537080.html
Copyright © 2020-2023  润新知