密码

【简要题意】求Σi=1ni22i\Sigma^n_{i=1}i^22^iΣi=1ni22i mod 1e9+7mod \ 1e9+7mod 1e9+7的值,n&lt;=1e9n&lt;=1e9n<=1e9

【分析】线性复杂度的算法显然是好想的。低于线性的算法有两种:

1.数论
2.推式子

这道题是后者,证明过程如下:
设Sn=1∗2+4∗22+9∗23+.....+n2∗2n设S_n=1*2+4*2^2+9*2^3+.....+n^2*2^nSn=12+422+923+.....+n22n
则2Sn=1∗22+4∗23+9∗24+......+n2∗2n+1则2S_n=1*2^2+4*2^3+9*2^4+......+n^2*2^{n+1}2Sn=122+423+924+......+n22n+1
相减整理可得到Sn=n2∗2n+1−(1∗2+3∗22+5∗23+........(2n−1)∗2n)相减整理可得到S_n=n^2*2^{n+1}-(1*2+3*2^2+5*2^3+........(2n-1)*2^n)Sn=n22n+1(12+322+523+........(2n1)2n)
再设Tn=(1∗2+3∗22+5∗23+........(2n−1)∗2n)再设T_n=(1*2+3*2^2+5*2^3+........(2n-1)*2^n)Tn=(12+322+523+........(2n1)2n)
同理乘二再相减Tn=(2n−3)∗2n+1+6同理乘二再相减T_n=(2n-3)*2^{n+1}+6Tn=(2n3)2n+1+6
回到原式得Sn=(n2−2n+3)∗2n+1−6回到原式得S_n=(n^2-2n+3)*2^{n+1}-6Sn=(n22n+3)2n+16

【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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值