首页 > 编程语言 >求最大公公约数(最大公因数)—— 欧几里得算法

求最大公公约数(最大公因数)—— 欧几里得算法

时间:2024-10-16 14:25:53浏览次数:8  
标签:约数 int 欧几里得 算法 最大公约数 余数 公因数

求最大公因数

求两数的最大公因数通常的做法是对两个数因式分解,找出共同的素数,然后求出最大公因数(GCD)。但是当数字越大时,因式分解就越困难,此时,使用欧几里得算法就能高效求出其最大公因数。

欧几里得算法

欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。

基本思想

两个正整数ab,它们的最大公约数(gcd(a,b))ba除以b得到的余数的最大公约数(gcd(b,a%b))相同。

通过不断用较小的数替换较大的数,并取余数,最终在余数为0时找到最大公约数。

举例说明

以求1112695这两个数的最大公约数为例:

  • 首先用较大的数字除以较小的数字,求出余数,也就是堆两个数字进行模运算。得到余数417

  • 接下来再用除数695和余数417进行模运算,结果为278

  • 继续进行同样的操作,对417278作模运算,结果为139。

  • 278139作模运算,结果为0,也就是说278可以被139整除。

  • 余数为0时,最后一次运算中的除数139就是1112695的最大公约数。

算法实现

#include "iostream"
using namespace std;
/*欧几里得算法—求最大公约数—迭代实现*/
int gcd(int a, int b){
	while (b != 0){
		int tmp = a;
		a = b;
		b = tmp % b;
	}
	return a;
}
/*欧几里得算法—求最大公约数—递归实现*/
int gcd_dg(int a, int b){
	return b == 0 ? a : gcd_dg(b, a % b);
}

int main(){
	cout << gcd(1112, 695) << endl;
	cout << gcd_dg(1112, 695) << endl;
	system("pause");
	return 0;
}

标签:约数,int,欧几里得,算法,最大公约数,余数,公因数
From: https://www.cnblogs.com/1873cy/p/18469778

相关文章

  • 蓝桥杯数论通关系列(四)拓展欧几里得算法
    一.贝祖等式给定a,b均为整数,一定存在一组整数x,y使得a,b满足a*x+b*y=gcd(a,b)=c。而拓展欧几里得算法就是求出这组整数(x,y)的算法。二.拓展欧几里得算法首先先回顾一下欧几里得算法,欧几里得算法是计算两个数最大公因数的计算方法,如果要求gcd(a,b)的话,可以不断将其变为gcd(......
  • 约数
    定义:如果\(a\)是\(b\)的约数,即\(a\bmodb=0\),记为\(a\midb\)。如果\(a\midb\)并且\(a\midc\),那么\(a\mid(bx+cy)\)1.最大公约数记\(\gcd(a,b)\)为\((a,b)\)。显然\(d\mid(a,b)\)等价于,\(d\mida\)且\(d\midb\)显然\((a,b)=(a+b,......
  • Acwing-246. 区间最大公约数
    本蒟蒻的第二篇题解qwq.题目大意:给定一个长度为\(N\)的数组,需要在数组上进行两种操作:1.Clrd,表示把\(A[l],A[l+1],...,A[r]\)都加上\(d\).2.Qlr,表示询问\(A[l],A[l+1],...,A[r]\)的最大公约数\((GCD)\).错误解法:如果你是一个只会打暴力的小蒟蒻(就像我),看......
  • 最大公约数与最小公倍数
    设\(a_1,a_2\)是两个整数,如果\(d|a_1,\d|a_2\),那么\(d\)就称为\(a_1\)和\(a_2\)的公约数,其中最大的称为\(a_1\)和\(a_2\)的最大公约数,记作\((a_1,a_2)\)。一般地,可以类似地定义\(k\)个整数\(a_1,a_2,\cdots,a_k\)的公约数和最大公约数,后者记作\((a_1,\cdots,......
  • C++入门基础知识90(实例)——实例15【求两数的最大公约数】
    成长路上不孤单......
  • 求最大公约数的三种算法
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intgcdByBruteForce(inta,intb){for(inti=min(a,b);i>0;--i){if(a%i==0&&b%i==0){returni;......
  • 最大公约数与最小公倍数
    前言:  最大公约数(最大公因数)是指两个或多个整数共有约数中最大的一个。最小公倍数是指两个或多个整数的公倍数里最小的那一个。最大公约数记为(a,b),最小公倍数是已知几个数的公倍数,且是最小的那一个。1.法一:辗转相除法 #include<stdio.h>intmain(){inta,b;......
  • 信息学奥赛初赛天天练-92-CSP-S2023阅读程序2-动态数组、反转函数、埃氏筛法、欧拉筛
    2023CSP-S阅读程序2判断题正确填√,错误填⨉;除特殊说明外,判断题1.5分,选择题3分,共计40分)01#include<iostream>02#include<cmath>03#include<vector>04#include<algorithm>05usingnamespacestd;0607longlongsolve1(intn){08vector<bo......
  • 信息学奥赛初赛天天练-92-CSP-S2023阅读程序2-动态数组、反转函数、埃氏筛法、欧拉筛
    2023CSP-S阅读程序2判断题正确填√,错误填⨉;除特殊说明外,判断题1.5分,选择题3分,共计40分)01#include<iostream>02#include<cmath>03#include<vector>04#include<algorithm>05usingnamespacestd;0607longlongsolve1(intn){08vector<boo......
  • 一个线性筛的多功能组合:筛法求质数+约数个数+约数和
    F:\BC\2024\9>main1活动代码页:9362 2X2=43 3X2=6 3X3=94X2=85 5X2=10 5X3=15 5X5=256X2=127 7X2=14 7X3=21 7X5=35 7X7=498X2=169X2=18 9X3=2710X2=2011 11X2=22 11X3=33 11X5=55 11X7=77 11X11=12112X2=2413 13X2=26 13X......