[hdu6467]简单数学题

简单数学题

题解

题目已经说得很明显了,就是一道数学推导的题,虽然我也不知道为什么我会推错

容易得到F_{n}=\sum_{i=1}^{n}\sum_{j=i}^{n}i*C_{j}^{i}F_{n+1}=\sum_{i=1}^{n+1}\sum_{j=i}^{n+1}i*C_{i,j},将两者相减

\tiny F_{n+1}-F_{n}=\sum_{i=1}^{n+1}i*C^{i}_{n+1}=\sum_{i=1}^{n+1} (n+1)!/((i-1)!(n-i+1)!) =(n+1)\sum_{i=1}^{n+1}C^{i-1}_{n}= (n+1)2^n

F_{n}-F_{n-1}=n*2^{n-1},可以通过这个求出F_nF_{n}=\sum_{i=1}^{n}i*2^{i-1}

将其扩大2倍2F_{n}= \sum_{i=1}^{n}i*2^i,再相减得F(n)=n2^n-\sum_{i=0}^{n-1}2^i=n2^n-(2^n-1)=(n-1)2^n+1

源码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long LL;
const LL mo=1000000007;
LL n;
int qkpow(int a,LL s){
	int t=1;
	while(s){
		if(s&1)t=1ll*a*t%mo;
		a=1ll*a*a%mo;s>>=1;
	}
	return t;
}
signed main(){
	while(scanf("%lld",&n)!=EOF)
		printf("%lld\n",(1ll*(n-1LL)%mo*qkpow(2,n)%mo+1)%mo); 
	return 0;
}/*
F(n)=\sum_{i=1}^{n}\sum_{j=i}^{n}(i*C(i,j))
F(n+1)=\sum_{i=1}^{n+1}\sum_{j=i}^{n+1}(i*C(i,j))
F(n+1)-F(n)=\sum_{i=1}^{n+1}i*C(i,n+1)
=\sum_{i=1}^{n+1} (n+1)!/((i-1)!(n-i+1)!) 
=(n+1)\sum_{i=1}^{n+1}C(i-1,n) 
=(n+1)\sum_{i=0}^{n}C(i,n)
=(n+1)2^n
F(n)-F(n-1)=n*2^(n-1)
F(n)=\sum_{i=1}^{n}i*2^(i-1)
2F(n)=\sum_{i=1}^{n}i*2^i
F(n)=n*2^n-\sum_{i=0}^{n-1}2^i
F(n)=n*2^n-(2^n-1)
F(n)=(n-1)2^n+1
*/ 

谢谢!!!

posted @ 2022-06-15 20:34  StaroForgin  阅读(5)  评论(0)    收藏  举报  来源