HDU 5793 A Boring Question(快速幂+求逆元)
2016-08-04 19:08
281 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5793
这道题就是给你一个公式,然后再给数据范围给你,然后求答案。
这道题的公式推到最后就是一个等比数列的求和公式,也就是说,输入n和m,然后从m的0次方一直加到n次方的和就是答案。
但是由于这道题的数据太大了,有1e9,所以我们不可能用for循环一直加到最后,所以根据公式,我们需要用到快速幂来求m^n。用快速幂求出来之后,我们根据等比数列的求和公式,就成了(1-m^n)/(1-m)%mod。因为还要对1e9+7取模,所以mod=1e9+7。但是因为要取模,所以直接当做除法来做会出错,所以,要把(1-m)和mod的逆元求出来,当做乘法来做。所以求逆元,其实就是求倒数。所以(1-m)和mod就是其倒数。
这道题就是给你一个公式,然后再给数据范围给你,然后求答案。
这道题的公式推到最后就是一个等比数列的求和公式,也就是说,输入n和m,然后从m的0次方一直加到n次方的和就是答案。
但是由于这道题的数据太大了,有1e9,所以我们不可能用for循环一直加到最后,所以根据公式,我们需要用到快速幂来求m^n。用快速幂求出来之后,我们根据等比数列的求和公式,就成了(1-m^n)/(1-m)%mod。因为还要对1e9+7取模,所以mod=1e9+7。但是因为要取模,所以直接当做除法来做会出错,所以,要把(1-m)和mod的逆元求出来,当做乘法来做。所以求逆元,其实就是求倒数。所以(1-m)和mod就是其倒数。
#include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<string> #include<queue> #include<map> #define ll long long #define maxn 50010 const int mod=1e9+7; using namespace std; int T; ll n,m; ll X,y; ll mi(ll x, ll a, int p) { ll ans=1; x=x%p; while(a>0) { if(a&1) ans=(ans*x)%p; x=(x*x)%p; a>>=1; } return ans; } ll gcd(ll a,ll b) { int t,d; if(b==0) { X=1; y=0; return a; } d=gcd(b,a%b); t=X; X=y; y=t-(a/b)*y; return d; } int main() { scanf("%d",&T); while(T--) { scanf("%lld %lld",&n,&m); gcd(m-1,mod); if(X<0) X+=mod; ll ans=(mi(m,n+1,mod)-1)*X%mod; printf("%lld\n",ans); } return 0; }
相关文章推荐
- HDU 5793 A Boring Question【快速幂+逆元】
- Hdu 5793 A Boring Question【暴力打表+找规律+求逆元+快速幂+快速积】
- HDU 5793 A Boring Question (找规律 : 快速幂+逆元)
- HDU 5793 A Boring Question(推公式+求逆元)——2016 Multi-University Training Contest 6 (1001)
- HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)
- HDU 5793 A Boring Question (逆元+快速幂+费马小定理) ---2016杭电多校联合第六场
- HDU 5793 A Boring Question (逆元)
- hdu 5793 A Boring Question(2016 Multi-University Training Contest 6——快速幂取模)
- HDU 5793 A Boring Question (快速幂 + 乘法逆元 + 费马小定理)
- HDU 5793 A Boring Question(快速幂&求逆元)
- HDOJ 5793 A Boring Question(快速幂+逆元+数学推导)
- HDU 5793 A Boring Question (找规律+快速幂)
- 打表找规律+快速幂+求逆元______A Boring Question(hdu 5793 2016多校第六场)
- hdu 5793 A Boring Question (数学 + 快速幂 + 乘法逆元)
- hdu 5793 A Boring Question 数学
- HDU-5793-A Boring Question-打表找规律加模逆元
- HDU 5793 - A Boring Question
- 【HDU】5793 A Boring Question
- HDU 5793 A Boring Question 打表找规律
- hdu 5793 A Boring Question(2016第六场多校)