定義:
最大公因數,也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個。簡單概況就是兩個數或多個數能被取余為0的最大的數字。
先簡單來算兩個數的最大公約數
C語言:
兩種方法:(1)枚舉法 (2)輾轉相除法
/* * 利用枚舉法求出兩個數的最大公約數 * 思想:先找出兩個數的最小值,因為兩數的最大公約數一定要比兩數的最小值還要小,所以先求出兩數的最小值 * 在和兩個數同時取余,若和兩個數同時取余都為0,那么在當前階段它就是最大公約數,直到for循環結束,即是兩個數的最大公約數 */ #include <stdio.h> int main() { int a,b; int min; scanf("%d %d",&a,&b); if(a<b) { min=a; } else { min=b; } int gcd = 0; int i; for(i = 1;i < min; i++) { if(a % i == 0&& b % i == 0) gcd = i; } printf("%d 和 %d 的最大公約數是 %d\n",a,b,gcd); } /* * 利用輾轉相除法求最大公約數 * 舉例: * a b t(a%b) * 12 18 12 * 18 12 6 * 12 6 0 * 6 0 * 如上述所示當b為0時,計算結束,a就是最大公約數 * 否則,計算a%b,讓a = b,b = a%b * 回到第一步 */ #include <stdio.h> int main() { int a,b; int t; scanf("%d %d",&a,&b); while (b != 0) { t = a % b; a = b; b = t; } printf("gcd = %d\n",a); }
C++:
兩種方法:(1)algorithm(算法)庫 (2)遞歸法
/* * 利用algorithm算法庫直接算出 */ #include <iostream> #include <algorithm> using namespace std; int main() { int a,b; cin>>a>>b; cout<<a<<" 和 "<<b<<" 的最大公約數為 "<<__gcd(a,b); } /* * 利用遞歸法計算a,b的最大公約數 * 思想:先判斷a%b是否為0,如果為零那么執行gcd,否則直接返回b */ #include <iostream> using namespace std; int gcd(int a,int b) { return a%b?gcd(b,a%b):b; } int main() { int a,b; cin>>a>>b; cout<<a<<" 和 "<<b<<" 的最大公約數為 "<<gcd(a,b); }
