HDU 4704 Sum(费马小定理,组合数学,快速幂)
2017-06-30 15:24
465 查看
Sum
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2738 Accepted Submission(s): 1140
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.
思想:根据组合数学,总是为2^n,根据费马小定理缩小n的范围,再矩阵快速幂即可求出答案。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstring> #include<string> #include<algorithm> using namespace std; #define ms(a,b)memset(a,b,sizeof(a)) #define eps 1e-10 #define inf 1e8 typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; const ll M=1000000007; ll mod_pow(ll x,ll n) { ll ans=1; while(n>0) { if(n&1) ans=(ans*x)%M; x=x*x%M; n>>=1; } return ans; } int main() { ll a,b,n; string s; ll ans=0; while(cin>>s) { ans=0; for(int i=0;i<s.length();i++) { ans=ans*10+s[i]-'0'; ans%=(M-1); } ans--; cout<<mod_pow(2,ans)<<endl; } return 0; }
JAVA:(TLE)
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { BigInteger n; Scanner cin=new Scanner(System.in); while(cin.hasNextBigInteger()){ n=cin.nextBigInteger(); n=n.subtract(BigInteger.ONE); n=n.mod(new BigInteger("1000000006")); System.out.println(mod_pow(new BigInteger("2"),n,new BigInteger("1000000007"))); } } public static BigInteger mod_pow(BigInteger x,BigInteger n,BigInteger mod) { BigInteger res=new BigInteger("1"); while(n.compareTo(BigInteger.ZERO)>0) { if(n.mod(new BigInteger("2")).compareTo(BigInteger.ONE)==0) { res=res.multiply(x); res=res.mod(mod); } x=x.multiply(x); x=x.mod(mod); n=n.divide(new BigInteger("2")); } return res; } }
相关文章推荐
- hdu 4704 Sum(组合,费马小定理,快速幂)
- hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925
- 【HDU - 4704】Sum 【隔板法+费马小定理降幂】
- hdu 5363 组合数学 快速幂
- hdu 4366 Card Collector(组合数学:容斥定理)
- HDU 4704 SUM 整数快速幂+费马小定理
- Hdu 4704 Sum -- 快速幂+高精度处理
- HDU 1796 How many integers can you find [容斥定理] 【组合数学】
- 【欧拉降幂公式+快速幂】HDU_4704_Sum
- hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)
- hdu 4704 Sum/杭电2013年多校第十场1009 快速幂+循环
- 【hdu 5894】【组合数学 lucas 费马小求逆元】 【m个人坐n个围成一周的位置每个人距离至少为k,求方法数】
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- HDU--4704 Sum【费马小定理,快速幂】
- hdu 4135 Co-prime (组合数学:容斥定理+欧拉函数)
- [HDU 4704] Sum · 费马小定理 & 快速幂
- hdu 4704 Sum (十进制快速幂)
- hdu 4704--sum(多校赛第十场)快速幂
- HDU_4704_Sum_隔板原理、二项式定理、同余定理、费马小定理、快速幂
- HDU 3037 Saving Beans(组合数学+Lucas定理)