取模運算加快速冪法(hdu1420)

2021-09-10 09:04:31 字數 950 閱讀 8929

集訓進行了將近2個禮拜,這段時間以恢復性訓練為主,我一直在密切關注大家的訓練情況,目前為止,對大家的表現相當滿意,首先是絕大部分隊員的訓練積極性很高,其次,都很遵守集訓紀律,最後,老隊員也起到了很好的帶頭作用,這裡特別感謝為這次dp專題練習賽提供題目和測試資料的集訓隊隊長xhd同學.

特別高興的是,跟隨集訓隊訓練的一批新隊員表現非常好,進步也比較顯著,特別是訓練態度大大超出我的預期,我敢說,如果各位能如此堅持下去,絕對前途無量!

考慮到新隊員還沒有經過系統訓練,我這裡特別新增一道簡單題:

給定三個正整數a,b和c(a,b,c<=1000000),求a^b mod c的結果.

希望各位都能體會到比賽中ac的快樂,絕對的量身定製,很高的待遇喲,呵呵…

input

輸入資料首先包含乙個正整數n,表示測試例項的個數,然後是n行資料,每行包括三個正整數a,b,c。

output

對每個測試例項請輸出計算後的結果,每個例項的輸出佔一行。

sample input

32 3 4

3 3 5

4 4 6

sample output02

4分析,用到的公式,ab%c=(a%cb%c)%c;但乘數太多次,若乙個個相乘將超時,所以要用到快速密法,將a^b mod c中的b轉化為二進位制(因為指數增長是最快的,可以大大節省時間)詳見ac**

ac**:

#includeusing namespace std;

int asd(int a, int b, int c)

sum = (sum%c*sum%c) % c;

b >>= 1;

} return ans; cout << ans << endl;

}int main()

for (int q = 0; q < n; q++)

deletep;

}

快速冪取模運算

1.如果b是偶數,我們可以記k a2 mod c,那麼求 k b 2 mod c 就可以了。2.如果b是奇數,我們也可以記k a2 mod c,那麼求 k b 2 mod c a mod c k b 2 mod c a mod c就可以了。那麼我們可以得到以下演算法 演算法4 int ans 1 a...

快速冪運算和快速冪取模運算

如果我們要求乙個數x的n次冪,樸素的想法是讓n個x相乘。對與n很大的情況,會造成一定的時間浪費。這裡講解一下o nlogn 的快速冪解法 我們考察a 11 次方。我們將它的冪用二進位制形式表示 11轉化為二進位制是1011 也就是a 1011。我們將它再做一步轉換。二進位制 數字轉化成對應1相加的形...

HDU 2817 快速冪取模

二分法,時間複雜度 o logn 用兩個模版,非遞迴的用時少,但是不太理解。好吧,等比數列又名幾何數列 等差數列又名算術序列 arithmetic or geometric sequences 兩個最基本公式 a b c a c b c c 和 a b c a c b c c 遞迴 15ms inc...