最大公约数欧几里德算法(辗转相除法)

本文深入探讨了交换两个变量值的技巧,避免使用额外的变量,并介绍了欧几里得算法来计算两个整数的最大公约数,提供了解决问题的高效方法。
部署运行你感兴趣的模型镜像

交换两个变量的值,不采用第三个变量(= = !当年年少无知的我想破了脑袋都没想到)

void swap(int *a, int *b)
{ 
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

最大公约数欧几里德算法

int gcd(int m, int n)
{
        int r;

        if ((m * n)  == 0)
                goto error;

        r = m % n;

        while(r) {
                m = n;
                n = r;
                r = m % n;
        }

        return n;

        error:
                printf("\nerror,the ");
                if (m)
                        printf("second");
                else
                        printf("first");
                printf(" parameter is equal with zero\n");

                return -1;
}

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

辗转相除法,也叫欧几里德算法,是求个自然数最大公约数的一种方法。在 Java 中,有多种方式可以使用辗转相除法实现求最大公约数。 ### 方式一:使用循环实现 ```java package com.example.gcd; import java.util.Scanner; public class GCD { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt(); while (b > 0) { int r = a % b; a = b; b = r; } System.out.println("最大公约数是" + a); } } ``` 此代码通过 `Scanner` 类从控制台获取个整数 `a` 和 `b`,然后利用 `while` 循环不断更新 `a` 和 `b` 的,直至 `b` 为 0,此时 `a` 的即为最大公约数 [^1]。 ### 方式二:封装成方法使用循环实现 ```java class Main { // 辗转相除法个数最大公约数 private static int getGcd(int num1, int num2) { while (num1 % num2 != 0) { int mod = num1 % num2; num1 = num2; num2 = mod; } return num2; } public static void main(String[] args) { int result = getGcd(12, 8); System.out.println("最大公约数是" + result); } } ``` 该代码将辗转相除的逻辑封装在 `getGcd` 方法中,通过传入个整数,在 `while` 循环持续更新 `num1` 和 `num2` 的,当 `num1 % num2` 为 0 时,`num2` 就是最大公约数 [^2]。 ### 方式三:使用递归实现 ```java public class Main { public static int getGreatestCommomDivisor(int x, int y) { if (x == 0) { return y; } int big = x > y ? x : y; int small = x > y ? y : x; return getGreatestCommomDivisor(big % small, small); } public static void main(String[] args) { System.out.println("最大公约数是" + getGreatestCommomDivisor(12, 8)); } } ``` 此代码采用递归的方式实现辗转相除法。在 `getGreatestCommomDivisor` 方法,若 `x` 为 0,则返回 `y`;若不为 0,则找出较大数和较小数,递归调用 `getGreatestCommomDivisor` 方法,直到满足终止条件 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值