最大公因數
最大公因數(英語:,)也稱最大公約數(英語:,)是數學詞彙,指能够整除多個整數的最大正整数。而多個整数不能都为零。例如8和12的最大公因数为4。
整数序列的最大公因数可以記為或。
求兩個整數最大公因數主要的方法:
兩個整數的最大公因數和最小公倍數()的關係為:
兩個整數的最大公因數可用於計算兩數的最小公倍數,或分數化簡成最簡分數。
兩個整數的最大公因數和最小公倍數中存在分配律:
在直角坐標中,兩頂點為的線段會通過個格子點。
概述
例子
54和24的最大公因数是多少?
数字54可以表示為几组不同正整數的乘積:
故54的正因數為。
同樣地,24可以表示為:
故24的正因數為。
这两组数列中的共同元素即为54和24的公因数:
其中的最大數6即為54和24的最大公因數,記為:
互质数
如果两数的最大公因数为1,那么这两个数互質。例如,9和28就是互质数。
几何角度的说明
假设有一个大小为24乘60的矩形区域,这个区域可以按照不同的大小划分正方形网格:1乘1、2乘2、3乘3、4乘4、6乘6、12乘12。因此,12是24和60的最大公因数。大小为24乘60的矩形区域,可以按照12乘12的大小划分正方形网格,一边有两格()、另一边有五格()。
计算
程式代碼
數字之間的最大公因數之所有因數是該組數字所有的公因數。
以下使用輾轉相除法實現。
C#
private int GCD(int a, int b) {
if(0 != b) while(0 != (a %= b) && 0 != (b %= a));
return a + b;
}
C++
运行时计算实现:
template < typename T >
T GCD(T a, T b) {
if(b) while((a %= b) && (b %= a));
return a + b;
}
编译时计算实现:
#include <iostream>
#include <type_traits>
template<typename T, std::enable_if_t<std::is_integral<T>::value, T> a, std::enable_if_t<std::is_integral<T>::value, T> b>
struct HCF{
public:
static const T value=HCF<T, (a>b? b: a), (a>b? a%b: b%a)>::value;
};
template<typename T, std::enable_if_t<std::is_integral<T>::value, T> a>
struct HCF<T, a, 0>{
public:
static const T value=a;
};
int main(){
std::wcout<<HCF<int, 12, 64>::value<<std::endl;//Output: 4
}
C
int GCD(int a, int b)
{
if (b)
while((a %= b) && (b %= a));
return a + b;
}
Java
private int GCD(int a, int b) {
if(b==0) return a;
return a % b == 0 ? b : GCD(b, a % b);
}
Python
GCD = lambda a, b: (GCD(b, a % b) if a % b else b)
政治用法
最大公約數又指一社會中不同陣營勉強所達之共同利益。
参考文献
- Gustavo Delfino, "Understanding the Least Common Multiple and Greatest Common Divisor", Wolfram Demonstrations Project, Published: February 1, 2013.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.