1050: QAQ的公式求解(二)
时间限制: 1 Sec 内存限制: 128 MB
提交: 167 解决: 26
[提交][状态][讨论版]
题目描述
QAQ又给了你一个公式,即:f[i]=f[i−1]+2∗∑ij=1j
(i>=2
)。
请你告诉他f[n]
。
输入
第一行输入一个整数T
,代表有T组测试数据。
每组数据输入三个整数f[1]、n
,分别代表上面提到的信息。
注:1<=T<=10000,1<=f[1],n<=109
。
输出
对每组测试数据,输出一个整数代表最后的结果。
由于结果很大,请对109+7
取余。
样例输入
3
1 6
3 6
10 10
样例输出
111
113
448
仔细推可以推出公式,逆元计算~~~
AC代码 :
#include<cstdio>
typedef long long LL;
const LL mod = 1e9 + 7;
LL KSM(LL a,LL b){
LL cut = 1, n = a;
while(b){
if(b & 1)
cut = cut * n % mod;
b /= 2;
n = n * n % mod;
}
return cut;
}
int main()
{
int T;
LL a,n;
scanf("%d",&T);
while(T--){
scanf("%lld %lld",&a,&n);
LL ans = ((KSM(n,3) * 2 % mod + KSM(n,2) * 3 % mod + n) % mod * KSM(6,mod - 2) % mod + (n * n % mod + n) % mod * KSM(2,mod - 2) % mod - 2)% mod;
ans = (ans + a) % mod;
printf("%lld\n",ans);
}
return 0;
}