51NOD 1013 3的冪的和

2021-08-18 12:55:15 字數 947 閱讀 5728

求:3^0 + 3^1 +...+ 3^(n) mod 1000000007

input

輸入乙個數n(0 <= n <= 10^9)
output

輸出:計算結果
input示例

3
output示例

40

很簡單,這個題目是乙個前n項求和的題

首先寫出求和公式發現分母上有個2劃開後可以變成3^n/2-1/2鑑於他是乙個整型數而3^n/2-1/2=(long long)3^n/2成立,然後就想當然這樣做了。但是忽略了後面的那個mod。

我們的乘方是這樣定義的:

當乙個數在做乘方運算時,我們規定了每一步的計算都不能溢位。所以3^1=3 % mod; 3^2=((3 %mod) * (3%mod))%mod;而問題就出在了這裡

舉乙個簡單的例子。如果我們用3^n/2去mod乙個17的話。

n=2時 (int)3^2/2 mod 17=(3^2-1)/2 mod 17=4是不錯。

n=4時 (int)3^3/2mod 17 = 5 而

(3^3-1)/2 mod 17= 4

wa就來自於這裡

然後想了想這個除法結合著這樣的乘方也是有概率會出錯的。所以索性的將除以2轉化為乘以2的逆元2^-1。標準的除法中,2的逆元為二分之一。但是在乙個有限域中,除法的逆元就不一定是分數了

我們只要保證2*x % mod ==1 這個x就是在mod範圍內2的逆元了

解出方程 x=500000004.

粘上**:

#include#define gp 1000000007

typedef long long ll;

ll mult(ll num,ll k)

return ans;

}int main()

提交 ac。

51nod 1013 3的冪的和

求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果input示例 3output示例 40思路 根據等比數列和的公式,本題的解為 3 n 1 1 2 1000000007。如果x與y的積除以z所得的餘數為1,即xy 1 ...

51 nod 1013 3的冪的和

1013 3的冪的和 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果input示例 3output示例 40思路為快速冪加逆元,至於...

51 Nod 1013 3的冪的和

1013 3的冪的和 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果input示例 3output示例 40題意 思路 明顯的等比數...