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]!='\0'){

            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\n",ret);

    }

    return 0;

}


 

 

你可能感兴趣的:(HDU)