密碼

【簡要題意】求Σi=1ni22i\Sigma^n_{i=1}i^22^i mod 1e9+7mod \ 1e9+7的值,n<=1e9n<=1e9

【分析】線性複雜度的算法顯然是好想的。低於線性的算法有兩種:

1.數論
2.推式子

這道題是後者,證明過程如下:
Sn=12+422+923+.....+n22n設S_n=1*2+4*2^2+9*2^3+.....+n^2*2^n
2Sn=122+423+924+......+n22n+1則2S_n=1*2^2+4*2^3+9*2^4+......+n^2*2^{n+1}
Sn=n22n+1(12+322+523+........(2n1)2n)相減整理可得到S_n=n^2*2^{n+1}-(1*2+3*2^2+5*2^3+........(2n-1)*2^n)
Tn=(12+322+523+........(2n1)2n)再設T_n=(1*2+3*2^2+5*2^3+........(2n-1)*2^n)
Tn=(2n3)2n+1+6同理乘二再相減T_n=(2n-3)*2^{n+1}+6
Sn=(n22n+3)2n+16回到原式得S_n=(n^2-2n+3)*2^{n+1}-6

【code】

# include<bits/stdc++.h>
# define int long long
using namespace std;
const int mod=1000000007;
int pw(int x,int n)
{
	int ans=1;
	while (n) {
		if (n&1) ans=ans*x%mod;
		x=x*x%mod;
		n>>=1;
	}
	return ans%mod;
}
signed main()
{
	int n; cin>>n;
	n=((pw(2,n+1)*(((n*n%mod-2*n%mod+3)+mod)%mod)-6)+mod)%mod;
	cout<<n;
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章