欧几里德算法计算最大公因数

欧几里德算法计算最大公因数

算法通过连续计算余数知道余数是0为止没最后的非零余数就是最大公因数.

/***************************************************
code writer	:	EOF
code file	:	gcd.c
code date	:	2014.09.18
e-mail		:	[email protected]

description	:
	This is a implementation of GCD :)
	If there is something wrong with my code,
please touch me by e-mail. Thank you.
****************************************************/

unsigned int gcd(unsigned int x,unsigned int y)
{
	unsigned int rem = 0;

	/*
	**	set the bigger one as "x"
	** the smaller one is "y".
	*/
	if(x < y)
	{
		rem	= x;
		x   	= y;
		y	= rem;
	}

	/*
	**	The min non-zero reminder is GCD.
	*/
	for(rem = 0; y > 0;)
	{
		rem = x % y;

		x = y;
		y = rem;
	}

	return x;
}

测试程序:

#include <stdio.h>

#include "gcd.h"

int main()
{
	printf("gcd(1989,1590) :%d\n",gcd(1989,1590));
	return 0;
}

但丁的小舟 德拉克罗瓦 1822年 油画 189×246厘米 巴黎卢浮宫藏

德拉克罗瓦1822年创作的、取材于但丁名著《神曲》的油画《但丁小舟》(又译《但丁和维吉尔共渡冥河》),画面上,头戴月桂花环的诗人维吉尔正引导他的伙伴但丁乘小舟穿越地狱;船头,一围裹着长条蓝布的赤身男子为其摇橹。浪花翻卷的河水中,几个被罚入地狱者紧紧抓住小船不放;其中还有一个女子,水珠在她身上闪光。近看,那些飞溅的水花其实就是红绿互补色中黄色和白色的涂点。如此精练的手法,如此真实的效果,不能不令观者惊叹。艺术史家认为,《但丁小舟》的悲剧性感受是对米开朗琪罗和鲁本斯的缅怀,其所表现出来的画家的执拗个性则奠定了德拉克洛瓦在法国浪漫主义画派中的先行者地位。

时间: 2024-10-06 00:40:03

欧几里德算法计算最大公因数的相关文章

欧几里德算法(求最大公因数)

//说明: //欧几里德算法:计算两个证书的最大公因数(假设M>N) //输入:M,N //输出:最大公因数 #include<iostream> using namespace std; void main() { cout<<"Input M and N:"<<endl; int M,N; cin>>M>>N; int rem; while(N>0) { rem=M%N; M=N; N=rem; } cout&

欧几里德算法(最大公约数算法)完整分析

欧几里德算法又称为辗转相除法,用于计算两个非负整数的最大公因数.其伪代码如下: gcd(a, b) //要求保证传入的a>=b if(b == 0) return a return gcd(b, a % b) 首先说明这个函数能返回a与b的最大公因数.但是我们不从代码到原理,我们要从原理返回代码.(下面的出现的所有符号均为非负整数) 在a与b均非0且a>=b的情况下,若c是a和b的最大公因数(c>0),那么就有c|a和c|b的同时成立.显然a=i*c,b=j*c,此处应满足1<=j

扩展欧几里德算法

文章来源:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b 很大的时候,枚举显得那么的na?ve ,那怎么做? 欧几里德有个十分又用的定理: gcd(a, b) = gcd(b , a%b) ,这样,我们就可以在几乎是 log 的时间复杂度里求解出来 a 和 b 的最大公约数了

欧几里德与扩展欧几里德算法(转)

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a

POJ 2773 Happy 2006 (分解质因数+容斥+二分 或 欧几里德算法应用)

Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10309   Accepted: 3566 Description Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD) is 1. For instance, 1, 3, 5, 7, 9...are a

欧几里德与扩展欧几里德算法

转自网上大牛博客,讲的浅显易懂. 原文地址:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有

算法总结之欧几里德算法

算法总结之欧几里德算法 1.欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数. 其计算原理依赖于下面的定理: gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 代码实现: 1 int gcd(int a,int b) 2 { 3 return b==0?a:gcd(b,a%b); 4 } 2.扩展欧几里德算法 基本算法: 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y,

欧几里德算法

欧几里德算法,又叫辗转相除法,最初见于东汉出现的<九章算术>,被用来求两个整数a,b的最大公约数,下面我们来介绍这个算法的原理和用法. 算法原理:设我们要求整数(a,b)的公约数为x,不妨设a>=b. 因为x为a和b的公约数,同时a可以表示为a=k*b+r,即r=a-k*b,那么我们很容易看出x也是r的公约数:记  r = a mod b. 反之,如果我们知道 x 是 b,a mod b的公约数,将上式做简单变换得:a = k * b + r,那么由此可知 x 也是 a,b 的公约数.

欧几里德与扩展欧几里德算法 Extended Euclidean algorithm

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a