Problem
背景
廖氏如神 (pcsh710742) 在作業中遇到一題,用手算會算到天昏地暗,而問題是這樣子的:
$a^{13337} \equiv n \mod 2^{64}$其中 $n= 2015 + 2 \times (\text{The last 2 digit of your student ID number})$,請找到 $a < 2^{64}$ 的其中一組解。
問題描述
模數 $2^{64}$ 看起來不大,但對於 Ghz 為 CPU 運算速度單位的電腦而言還是要跑非常久的。因此將問題簡化:
$a^{23333} \equiv n \mod 2^{20}$現在給予一個 $n$,請求出一組 $a$,測資中保證答案唯一。
Sample Input
|
|
Sample Output
|
|
Solution
除了偶數無解外,奇數都至少有一個解。而這一題的題目數據恰好奇數都只有一解,那麼就不必處理多組解或者是字典順序最小的,只要專心找到符合的解即可。
- 暴力建表 $O(2^{20})$ 建完,之後直接查找。
- 篩選正解,依序窮舉從最低位到最高位 (二進制下) 為 0 還是 1,由於次方會不斷地推移,高位結果不影響低位的對應。窮舉時保留低位符合的解,並且不斷地篩選掉不可能的解方案,複雜度 $O(20 k)$,$k$ 是難以估計的數字。
- 快速假解,類似篩選正解的做法,但只保留其中一組解進行,複雜度 $O(20)$。這個解法是有點毛病的,但目前找不到反例。
快速假解
|
|
篩選正解
|
|