回答
(請注意,計算gcd(a,b)
的時候,我們可以假設,a <= b
;如果這是不正確的,我們可以只交換它們)
歐幾里德算法肯定是計算GCD的最有效方式。但是,如果你需要另外兩個(低效率)的方式來計算gcd(a,b)
,也有很多:
從
a
啓動和下去的時候,測試每個數,看是否都劃分和a
b
。黃金比化
a
和b
(獲得質數的多集),並返回這些多集的交集的產品。查找
a
的所有因數,並測試它們是否從a
開始分隔b
並且正在關閉。查找
lcm(a,b)
通過測試,其中b, 2*b, 3*b, ...
是整除a
,並返回a*b/(lcm(a,b))
。
1和4可能最容易實現,因爲它們不涉及因式分解。
重要的是要注意一些邊緣情況:所有x > 0
的gcd(0,x) = x
,而gcd(0,0)
未定義。技術上,我想gcd(a,b) = gcd(abs(a), abs(b))
涵蓋的情況下輸入可能是負面的。
事實上,歐幾里得是最有效的,但正如我所說,需要3個版本的GCD。 - 無論如何,謝謝,這是我需要的。 –
是的,抱歉,認爲它。 –
這是三個最常用的算法:
public static uint FindGCDModulus(uint value1, uint value2)
{
while(value1 != 0 && value2 != 0)
{
if (value1 > value2)
{
value1 %= value2;
}
else
{
value2 %= value1;
}
}
return Math.Max(value1, value2);
}
public static uint FindGCDEuclid(uint value1, uint value2)
{
while(value1 != 0 && value2 != 0)
{
if (value1 > value2)
{
value1 -= value2;
}
else
{
value2 -= value1;
}
}
return Math.Max(value1, value2);
}
public static uint FindGCDStein(uint value1, uint value2)
{
if (value1 == 0) return value2;
if (value2 == 0) return value1;
if (value1 == value2) return value1;
bool value1IsEven = (value1 & 1u) == 0;
bool value2IsEven = (value2 & 1u) == 0;
if (value1IsEven && value2IsEven)
{
return FindGCDStein(value1 >> 1, value2 >> 1) << 1;
}
else if (value1IsEven && !value2IsEven)
{
return FindGCDStein(value1 >> 1, value2);
}
else if (value2IsEven)
{
return FindGCDStein(value1, value2 >> 1);
}
else if (value1 > value2)
{
return FindGCDStein((value1 - value2) >> 1, value2);
}
else
{
return FindGCDStein(value1, (value2 - value1) >> 1);
}
}
這是選擇之一:
public static int gcd(int x, int y) {
int result = 0;
if (x<0) {
x = -x;
}
if (y<0) {
y = -y;
}
if (x == 0){
result = y;
}
if (y == 0){
result = x;
}
for (int i = 1; i < x+1; i++) {
if (x % i == 0) {
if (y % i == 0) {
result = i;
}
}
}
return result; }
- 1. 使用歐幾里德算法的最大公約數?
- 2. 超過兩個數字的歐幾里德最大公約數
- 3. 歐幾里德算法(JS)
- 4. Python中的歐幾里德算法/ GCD
- 5. GCD,歐幾里德的算法
- 6. 歐幾里德遞歸算法
- 7. 爪哇 - 歐幾里德算法
- 8. 序言擴展歐幾里德算法
- 9. 如何編寫一個實現歐幾里得計算最大公約數(m,n)的算法的函數?
- 10. 曼哈頓,歐幾里德和切比雪夫在A *算法
- 11. 在Excel中計算歐幾里德方向的公式
- 12. 計算平方歐幾里德距離
- 13. GCD - 歐幾里德算法和分解算法分析
- 14. python中的歐幾里德算法(減法)
- 15. 擴展歐幾里德算法和乘法逆的概念
- 16. 質數的歐幾里德引理
- 17. 歐幾里得算法
- 18. 歐幾里德距離c#
- 19. 歐幾里德距離點
- 20. 如何處理擴展歐幾里德算法的結果
- 21. 需要歐幾里德算法的遞歸版本
- 22. 我的擴展歐幾里德算法(python)有什麼問題?
- 23. 歐幾里德的GCD空間複雜度算法
- 24. 使用歐幾里德算法的GCD程序
- 25. 二進制GCD算法對歐幾里德的算法在現代計算機
- 26. 查找勾股數:歐幾里德式
- 27. 歐幾里德距離數學錯誤
- 28. 歐幾里德距離遞歸函數
- 29. 使用OpenCL的歐幾里德距離
- 30. csv文件的歐幾里德距離
你至少應該說明你試圖尋找替代品。 – wonko79
我明顯做到了。大多數只是歐幾里得的變體。 –
這個問題似乎是題外話題,因爲它是關於做海報的數學作業。 –