• 公约数和公倍数


    求最小公倍数算法

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

    求最大公约数算法

    (1)辗转相除法

    有两整数ab

    ① a%b得余数c

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

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

    /*
    求最小公倍数算法:
    
    最小公倍数=两整数的乘积÷最大公约数
    求最大公约数算法:
    (1)辗转相除法
    有两整数a和b:
    ① a%b得余数c
    ② 若c=0,则b即为两数的最大公约数
    ③ 若c≠0,则a=b,b=c,再回去执行①
    */
    
    #include <stdio.h>
    
    int common_divisor_func(int num1, int num2);
    
    int main()
    {
        int n;
        int num1, num2;
        int common_divisor, common_multiple;
        scanf("%d", &n);
        while(n--)
        {
            scanf("%d%d", &num1, &num2);
            common_divisor = common_divisor_func(num1, num2);
            common_multiple = num1 * num2 / common_divisor;
            printf("%d %d
    ", common_divisor, common_multiple);
        }
        getchar();
        return 0;
    }
    
    int common_divisor_func(int num1, int num2)
    {
        int c;
        int tmp;
        c = num1 % num2;
        while(num2 != 0)
        {
            c = num1 % num2;
            num1 = num2;
            num2 = c;
        }
    
        return num1;
    }
    //比较递归计算最小公倍数
    //注意必须a > b
    
    int gcd(int a, int b)
    {
        if(b == 0)
        {
            return a;
        }
        else
        {
            return gcd(b, a % b);
        }
    }

    这个算法看起来其实并不是很难,但是到了实际应用的时候可能要考虑很多的东西,比如两个很大的数的最小公倍数有可能已经超出了int的范围了,这个时候就要使用long long或者__int了

    还有那个

    common_multiple = num1 * num2 / common_divisor;

    有的时候可以先除后乘。



    计算一个数的所有的约数
    int arr[100];
    int i;
    for(i = 0;i * i < sqrt(num);i++)
    {
        if(num % i == 0)
        {
            arr[top++] = i;
            srr[top++] = num / i;
        }
    }


  • 相关阅读:
    又见回文 字符串
    学密码学一定得学程序 KMP
    学密码学一定得学程序 KMP
    KMP简单应用
    KMP简单应用
    用ALAssetsLibrary将过滤后图片写入照片库
    iOS 8版本信息与屏幕尺寸
    屏幕适配的那些坑
    从工程中删除Cocoapods
    AVCaptureSession 照相时获取 AVCaptureVideoPreviewLayer尺寸
  • 原文地址:https://www.cnblogs.com/virusdefender/p/3384895.html
Copyright © 2020-2023  润新知