×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
Problems
Submissions
Rank
Forum
Contest
Login
Register
New Thread
解題報告
#1635: Stein's Algorithm算法
1654953-8@g.puiching.edu.mo
(P6A27陳康騰)
School : Pui Ching Middle School
ID : 2482
×
傳送站內訊息
To:
Subject:
Content:
IP address : [192.168.120.33]
Last Login :
2024-11-15 09:20:16
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
大整數運算:當需要處理超出常規整數範圍的數字時,例如在計算機科學、密碼學、數學等領域,可以使用Uint64_t來執行大整數運算,例如乘法、除法和模運算。
數據存儲:當需要存儲大數字或具有大範圍的計數器值時,可以使用 uint64_t 作為數據類型。這在計算機系統、嵌入式系統和大數據處理中非常有用。
效能優化:在某些情況下,使用Uint64_t可以提高程式的效能。例如,當處理大型數組或迭代次數很多的循環時,使用Uint64_t可以減少溢出或精度損失的風險。(來自ChatGpt)
下面是 Stein's Algorithm 的步驟:
首先,檢查兩個數字是否為0。若其中一個數為0,則另一個數即為最大公因數。若兩個數皆為0,則最大公因數為0。
檢查兩個數字是否都是偶數。若是,則最大公因數的值是2乘以兩個數字各自除以2後的最大公因數,即 gcd(a, b) = 2 * gcd(a/2, b/2)。
若其中一個數為偶數,則最大公因數的值是該數除以2後與另一個數的最大公因數相等,即 gcd(a, b) = gcd(a/2, b) 或 gcd(a, b) = gcd(a, b/2)。
若兩個數均為奇數,則最大公因數的值是兩個數的差值的最大公因數的兩倍,即 gcd(a, b) = 2 * gcd((a-b)/2, b) 或 gcd(a, b) = 2 * gcd(a, (b-a)/2)。
重複執行步驟2至步驟4,直到兩個數相等。此時的數即為最大公因數。
輾轉相除法Stein's Algorithm算法:
質因數分解法:將兩個數字分別進行質因數分解,然後找出它們的公共質因數,將這些質因數相乘即可得到最大公因數。
記錄法:通過將較小的數字依次除以可能的公因數,並將能夠整除的公因數記錄下來,直到找到最大公因數。
輾轉相減法:也稱為經典歐幾里德算法的變體,它通過反覆相減較大的數字來計算最大公因數,直到兩個數相等。
使用遞迴:可以使用遞迴算法來計算最大公因數。例如,使用輾轉相除法的遞迴實現,每次將較大的數字除以較小的數字,直到兩個數相等。(來自ChatGpt)
ZeroJudge Forum