转载请注明出处: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; }