转载请注明出处:http://blog.csdn.net/a1dark
分析:一道找规律+数论的题、题目意思就是问你有多少种可以满足下面条件的数字组合、从小到大分析出来、你会发现是一个杨辉三角形、再相加、你就会发现答案是2的(N-1)次方、所以要求的就是2^n-1%M、一样就能看出来这是一个二分快速幂问题、当然由于底数是2、也可以用费马最小定理来做、我是直接二分快速幂搞定的、
#include<stdio.h>
#define MOD 1000000007
char st[100001];
long long int sum;
int main(){
while(scanf("%s",st)!=EOF){
int i=0,j;
sum=0;
while(st[i]!=' '){
sum=sum*10;
sum+=(st[i]-'0');
i++;
sum=sum%(MOD-1);
}
sum=sum-1;
long long int temp=2,ret=1;
while(sum){
if(sum&1)ret=ret*temp%MOD;
temp=temp*temp%MOD;
sum>>=1;
}
printf("%lld
",ret);
}
return 0;
}