#1635: Stein's Algorithm算法


1654953-8@g.puiching.edu.mo (P6A27陳康騰)

School : Pui Ching Middle School
ID : 2482
IP address : [192.168.120.33]
Last Login :
2024-06-28 21:12:53
b315. 求解最大公因數(大數版) | From: [192.168.120.33] | Post Date : 2024-06-20 21:27

Stein's Algorithm算法介紹(維基百科):https://en.wikipedia.org/wiki/Binary_GCD_algorithm

Stein's Algorithm算法介紹(百度百科):https://baike.baidu.com/item/Stein%E7%AE%97%E6%B3%95/7874057

對於題目大數也可以使用Uint64(其實不用這麽多位):https://www.w3schools.com/go/go_integer_data_type.php

  1. 大整數運算:當需要處理超出常規整數範圍的數字時,例如在計算機科學、密碼學、數學等領域,可以使用Uint64_t來執行大整數運算,例如乘法、除法和模運算。

  2. 數據存儲:當需要存儲大數字或具有大範圍的計數器值時,可以使用 uint64_t 作為數據類型。這在計算機系統、嵌入式系統和大數據處理中非常有用。

  3. 效能優化:在某些情況下,使用Uint64_t可以提高程式的效能。例如,當處理大型數組或迭代次數很多的循環時,使用Uint64_t可以減少溢出或精度損失的風險。(來自ChatGpt)

下面是 Stein's Algorithm 的步驟:

  1. 首先,檢查兩個數字是否為0。若其中一個數為0,則另一個數即為最大公因數。若兩個數皆為0,則最大公因數為0。

  2. 檢查兩個數字是否都是偶數。若是,則最大公因數的值是2乘以兩個數字各自除以2後的最大公因數,即 gcd(a, b) = 2 * gcd(a/2, b/2)。

  3. 若其中一個數為偶數,則最大公因數的值是該數除以2後與另一個數的最大公因數相等,即 gcd(a, b) = gcd(a/2, b) 或 gcd(a, b) = gcd(a, b/2)。

  4. 若兩個數均為奇數,則最大公因數的值是兩個數的差值的最大公因數的兩倍,即 gcd(a, b) = 2 * gcd((a-b)/2, b) 或 gcd(a, b) = 2 * gcd(a, (b-a)/2)。

  5. 重複執行步驟2至步驟4,直到兩個數相等。此時的數即為最大公因數。

輾轉相除法Stein's Algorithm算法:

  1. 質因數分解法:將兩個數字分別進行質因數分解,然後找出它們的公共質因數,將這些質因數相乘即可得到最大公因數。

  2. 記錄法:通過將較小的數字依次除以可能的公因數,並將能夠整除的公因數記錄下來,直到找到最大公因數。

  3. 輾轉相減法:也稱為經典歐幾里德算法的變體,它通過反覆相減較大的數字來計算最大公因數,直到兩個數相等。

  4. 使用遞迴:可以使用遞迴算法來計算最大公因數。例如,使用輾轉相除法的遞迴實現,每次將較大的數字除以較小的數字,直到兩個數相等。(來自ChatGpt)

 

 
ZeroJudge Forum