1. 程式人生 > >C語言輾轉相除法(歐幾里德演算法)求最大公約數

C語言輾轉相除法(歐幾里德演算法)求最大公約數

演算法敘述:

設(a,b)表示a和b的最大公約數

若c為a/b的餘數(c=a%b)

則(a,b)=(b,c).

#include<stdio.h>
int gcd(int a,int b)
{
	return b ? gcd(b,a%b) : a;
	
}
int main()
{
	int a,b;
	while(scanf("%d%d",&a,&b)!=EOF)
	      printf("%d\n",a>b?gcd(a,b):gcd(b,a));
	return 0;
}

其次,最小公倍數 = a*b / 最大公約數

相關推薦

C語言輾轉除法演算法大公約數

演算法敘述: 設(a,b)表示a和b的最大公約數 若c為a/b的餘數(c=a%b) 則(a,b)=(b,c). #include<stdio.h> int gcd(int a,int b

C語言輾轉除/減法演算法大公約數小公倍數

#include <stdio.h> #include <stdlib.h> //題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 //採用任何兩種演算法來完成上述題目,並比較2種演算法的時間複雜度和空間複雜度。 int main() { int

輾轉除法演算法java實現

輾轉相除法,又叫歐幾里得演算法,是用以計算兩個非負整數的最大公約數,在數學課本上是見過了,程式又是怎樣實現的。其實,只需4行。 計算兩個非負整數 p 和 q 的最大公約數:若q 是 0,則最大公約數為

算法--大公約數

clas pan nbsp 歐幾裏德 bsp sig while turn 最大 unsigned int Gcd(unsigned int M,unsigned int N) { unsigned int Rem; while(N > 0)

大公因子輾轉除法原理擴充套件的演算法

while(n != 0) { r = m % n; m = n; n = r; } printf("Their greatest common divisor is %d.\n", m);

C Looooops+poj2115

The input consists of several instances. Each instance is described by a single line with four integers A, B, C, k separated by a single space. The integ

同餘定理演算法

如果  (a-b)%m==0  那麼 a%m==0  b%m==0 a,b關於模m同餘。   求最大公約數 #include "pch.h" #include<iostream> #include<cstdio> #include<

同餘方程擴充套件演算法

同餘方程 時間限制: 1 Sec  記憶體限制: 128 MB 題目描述 求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。 輸入 輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。 輸出 輸出只有一行,包含

BZOJ ~ 1385 ~ Division expression 演算法

題解 原式化為情況下最有可能。然後看能否把x2的約去即可。當然不能把上面那個數字乘出來了,它太大了,所以我們拿上面的每一個數字和x2去約GCD即可。 #include<bits/stdc+

解同餘+擴充套件理解

首先給出方程 ax=b mod n 求解 x 即可以轉換為 ax+ny=b 可以將n看為b 則變成了 ax+by=c //a,b,c已知,求解整數解x,y 若該方程有解,則可以得出c%gcd(a,b)=0,gcd(a,b)表示a和b的最大公約數,我們這裡叫他k 這

四行程式碼大公約數演算法

本文要介紹的不是普通的歐幾里德演算法(輾轉相除法),而是利用位操作實現的歐幾里得演算法。 利用位操作實現歐幾里得演算法主要有以下兩個優點:1.程式碼量少  2.效率高。 首先,歐幾里德演算法求最大公約數的做法是: ⒈ 令r為a/b所得餘數(0 <

關於大公約數的三種解法之一演算法

亞歷山大時期的歐幾里得所著的《幾何原本》中這樣定義了最大公約數的演算法,兩個不全為0的非負整數m,n的最大公約數記為gcd(m,n),代表能夠整除(即餘數為0)m,n的最大正整數。歐幾里得演算法的方法就是重複應用下列等式,一直到m  mod n等於0。            

演算法(輾轉除法大公約數程式碼

    求解最大公約數依據如下定理:gcd(a,b) = gcd(b,a mod b) (不妨設a>b 且r=a mod b ,r不為0); 兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。 程式碼: 非遞迴演算法: int gcd(in

C語言輾轉除法大公約數 小公倍數

// dizhi.cpp : 定義控制檯應用程式的入口點。 //   #include "stdafx.h" #include <stdio.h> int CommonDivisor(int x, int y);//最大公約數 int CommonMultiple(in

擴充套件演算法乘法逆元C語言

#include <stdio.h>   int ExtendedEuclid( int f,int d ,int *result);   int main()   {   int x,y,z;   z = 0;   printf("輸入

輾轉除法 費馬小定理 尤拉定理 擴充套件演算法簡介

證明:對於(2),p是素數,a是整數且gcd(a,p)=1即他們的最大公約數是1。由於a, 2a, 3a, ……,(p-1)a 模p的餘數都不相同。否則若(i*a) mod p=(j*a) mod p其中 1 =< i < j <= p-1 則p|(j-i)*a, 而gcd(a,p)=1,那

輾轉除法gcd大公約數

輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),縮寫為GCD,是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數

POJ-1061-青蛙的約會 擴充套件演算法

原題連結: http://poj.org/problem?id=1061 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定

HDU-2669-Romantic 擴充套件演算法

原題連結: http://acm.hdu.edu.cn/showproblem.php?pid=2669 The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Trees

POJ-2142-The Balance 擴充套件演算法

原題連結: Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspiri