本题是要我们看懂题意:
S(k)是表示从{x1,x2,x3....xk)中选取k个可以使得x1+x2+x3+...xk=N,问我们求(S(1)+S(2)+....S(k))%Mod=?,Mod=10^9+7;
简要分析:
s(k) 意思从集合中选取k个元素可以使得他们的和为N,这就相当,ans=(S(1)+S(2)+...S(k))%Mod,这就相当于把数字N拆分有多少种方案,答案是2^(N-1)。
代码:
#include<stdio.h>
#include<string.h>
#define Mod 1000000007
typedef __int64 LL;
char st[100001];
LL quick_pow(LL a,LL k)
{
LL ans=1;
while(k){
if(k&1) ans=(ans*a)%Mod;
a=(a*a)%Mod;
k>>=1;
}
return ans;
}
int main()
{
int n;
LL sum;
while(scanf("%s",st)!=EOF){
n=strlen(st);
sum=0;
for(int i=0;i<n;i++){
sum=(sum*10+(st[i]-'0'))%(Mod-1);
}
sum=(sum+Mod-2)%(Mod-1);
printf("%I64d\n",quick_pow(2,sum));
}
return 0;
}