HDU--4704 Sum【费马小定理,快速幂】
2015-02-15 11:50
567 查看
Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1642 Accepted Submission(s): 698
Problem Description
Sample Input
2
Sample Output
2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases.
/* 题意: 给定一个数n 将其分解,Si 表示将n拆成i个数的方案数 求sum( si ) 1<=i<=n; 分析: 隔板原理, n个木棍,n-1个缝, 分成1份则是C(n-1,0); 分成2份则是C(n-1,1); 分成3份则是C(n-1,2); ... 分成n份则是C(n-1,n-1); ans = sum( C(n-1,i) ) (0<=i<=n-1) =2^(n-1); 由于要取模 而且 2 与 mod 互质 ,因此可以用费马小定理来降幂 根据费马小定理:(2,MOD)互质,则2^(p-1)%p=1,于是我们可以转化为: 2^(n-1)%MOD=2^((n-1)%(MOD-1))%MOD,从而用快速幂求解。 */ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define MOD 1000000007 char str[100010]; long long pow(long long n){ long long a=1,b=2; while(n){ if(n&1){ a=a*b%MOD; } n>>=1; b=b*b%MOD; } return a; } int main(){ while(scanf("%s",str)!=EOF){ int len=strlen(str); long long n=0; for(int i=0;i<len;i++) n=(n*10+str[i]-'0')%(MOD-1);//注意 printf("%I64d\n",pow(n-1)); } return 0; }
相关文章推荐
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
- HDU 4704 Sum 费马小定理+快速幂
- HDU_4704_Sum_隔板原理、二项式定理、同余定理、费马小定理、快速幂
- [HDU 4704] Sum · 费马小定理 & 快速幂
- HDU 4704 SUM 整数快速幂+费马小定理
- hdu - 4704 - Sum(费马小定理)
- HDU 4704 Sum (隔板原理 + 费马小定理)
- 数论+快速幂-hdu-4704-Sum
- hdu 4704 sum 费马小定理
- HDU 4704 Sum(费马小定理,组合数学,快速幂)
- HDU 4704 Sum (费马小定理)
- HDU 4704 Sum (费马小定理)
- [数论]HDU 4704 Sum 费马小定理
- HDU - 4704 Sum (费马小定理 + 快速幂)
- hdu 4704 sum 大整数取模+费马小定理+数快速幂
- Hdu 4704 Sum -- 快速幂+高精度处理
- hdoj 4704 Sum 【费马小定理 + 快速幂】
- HDU 4704 Sum 费马小定理
- hdu 4704 Sum(费马小定理)