求最大公约数Greatest Common Divisor(GCD)

辗转相除法的理论基础:欧几里德算法。

定理:gcd(a,b) = gcd(b,a mod b)  前提:a > b  

证明:
a可以表示成 a = kb + r,则r = a % b 
假设d是a,b的一个公约数,则有 
a  % d =0, b % d = 0,而r = a - kb,因此 r % d  = (a - kb)  % d  = 0
因此d是(b, a % b)的公约数,
即a 和 b的公约数也是a对b求模的结果的公约数 

假设d 是(b,a % b)的公约数,则 
b % d  = 0, r % d = 0,但是a = kb +r 
因此 a % d  = (kb +r ) % d = 0 
因此d也是(a,b)的公约数 

#include using namespace std; int GCD(int a, int b) { int Remainder; while( b != 0 ) { Remainder = a % b; a = b; b = Remainder; } return a; } int main() { int x, y; cout << "This program allows calculating the GCD/n"; cout << "Value 1: "; cin >> x; cout << "Value 2: "; cin >> y; cout << "/nThe Greatest Common Divisor of " << x << " and " << y << " is " << GCD(x, y) << endl; return 0; }

你可能感兴趣的:(私C/C++代码库,算法)