輕院 2180GJJ的日常之沈迷數學 逆元求除法取余
阿新 • • 發佈:2017-08-18
str fault 題目 == 求助 利用 整數 targe print
Submit: 281 Solved: 21
SubmitStatusWeb Board
題目鏈接:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2180
題目大意:求數列 k0,k1,k2...kn的和,即等比數列的前n項和對1e9+7取余的結果。
解題思路:等比數列前N項和為 ,因此只要能夠取余即可求得結果。利用擴展GCD求q-1關於mod的逆元然後快速冪取模計算即可。
代碼:
1 const int inf = 0x3f3f3f3f; 2 const int maxn = 1e6 + 5; 3 int k, n; 4 5 void ext_gcd(ll a, ll b, ll &d, ll &x, ll &y){6 if(b == 0){ 7 d = a; x = 1; y = 0; 8 } 9 else{ 10 ext_gcd(b, a % b, d, y, x); y -= x * (a / b); 11 } 12 } 13 ll pow_mod(ll a, ll b, ll m){ 14 if(b == 0) return 1; 15 ll tmp = pow_mod(a, b / 2, m); 16 ll ans = tmp * tmp % mod; 17 if(b & 1) ans = a % mod * ans % mod;18 return ans % mod; 19 } 20 void solve(){ 21 if(k == 1){ 22 printf("%d\n", (n + 1) % mod); 23 return; 24 } 25 ll a = k - 1; 26 ll b = mod, d, x, y; 27 ext_gcd(a, b, d, x, y); 28 if(x < 0) x = x + (abs(x) / mod + 1) * mod; 29 x %= mod; 30 ll tmp = pow_mod(k, n + 1, mod); 31 ll ans = (tmp * x - x) % mod ; 32 ans %= mod; 33 printf("%lld\n", ans); 34 } 35 int main(){ 36 int t = 1; 37 while(scanf("%d %d", &k, &n) != EOF){ 38 printf("Case %d: ", t++); 39 solve(); 40 } 41 }
題目:
GJJ的日常之沈迷數學
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 281 Solved: 21
SubmitStatusWeb Board
Description
GJJ每天都要膜拜一發數學大佬,因為GJJ的數學太差了。這不,GJJ又遇到難題了,他想求助WJJ,但是WJJ這幾天忙於追妹子,哪有時間給他講題, 於是GJJ求助於熱愛ACM的你,Acmer們能幫幫他嗎?問題是求: k^0 + k^1 +...+ k^(n) mod p (0 < k < 100, 0 <= n <= 10^9, p = 1000000007) 例如:6^0 + 6^1 +...+ 6^(10) mod 1000000007 (其中k = 6, n = 10, p = 1000000007)
Input
輸入測試數據有多組,每組輸入兩個整數k, nOutput
每組測試數據輸出:Case #: 計算結果Sample Input
2 1 6 10Sample Output
Case 1: 3 Case 2: 72559411輕院 2180GJJ的日常之沈迷數學 逆元求除法取余