HDU 4704 Sum

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


原文地址:https://www.cnblogs.com/pangblog/p/3301589.html