zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    C#中提供的精准测试程序运行时间的类Stopwatch
    [转]SQLite数据库扫盲
    [转]c# 使用ChartDirector绘图的一些个人体会
    [转]SQLite内存数据库
    SQL Server 各种查询语句执行返回结果
    [转]浅谈 BigInteger
    [转]SQLite数据库连接方式
    ASP.NET 3.5 开发大全DOC版
    好像昨天不见了100块钱。
    热烈庆祝本人昨天终于申请得了google ad
  • 原文地址:https://www.cnblogs.com/xiaobao5161/p/10537080.html
Copyright © 2011-2022 走看看