K-序列求和 (逆元)
生活随笔
收集整理的這篇文章主要介紹了
K-序列求和 (逆元)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
走著
題目描述
定義S(n) = 12 + 22 + … + n2,輸出S(n) % 1000000007。
注意:1 < n < 1e18。
輸入描述:
多組輸入,輸入直到遇到EOF為止;
第一行輸入一個正整數n。
輸出描述:
輸出S(n) % 1000000007的結果。
輸入
1
2
1000
輸出
1
5
333833500
思路
逆元 加 公式
公式:
AC
#include<bits/stdc++.h> #define N 100005 #define ll long long using namespace std; const int mod = 1000000007; ll extgcd(ll a, ll b, ll &x, ll &y){ //擴展歐幾里得;計算a%b,a關于b的逆元X,b關于a的逆元Y ll d = a;if(b == 0){x = 1;y = 0;}else{d = extgcd(b, a % b, y, x);y -= a / b * x;}return d; //返回a%b } ll inv(ll a, ll mod){ //求a對mod的逆元 ll x, y;int d = extgcd(a, mod, x, y);if(d != 1)return -1;elsereturn (x + mod) % mod;} int main() {ll n;while (cin >> n) {ll inv_6 = inv(6, mod);ll t1 = n % mod;ll t2 = (n + 1) % mod;ll t3 = ((2 * (n % mod)) % mod + 1) % mod;//除六轉化成逆元,相乘 ll t4 = inv_6 % mod;ll aa = (t1 * t2) % mod;ll bb = (t3 * t4) % mod;ll ans = (aa * bb) % mod;cout << ans << endl;}return 0; }總結
以上是生活随笔為你收集整理的K-序列求和 (逆元)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断能被N整除的字符串
- 下一篇: A-ID and password