hdu 5793 A Boring Question (数学 + 快速幂 + 乘法逆元)
2016-08-04 18:46
525 查看
题目链接:hdu 5793
Problem Description
There are an equation.
So the answer is 4.
Input
The first line of the input contains the only integer T,(1≤T≤10000)
Then T lines follow,the i-th line contains two integers n,m,(0≤n≤1e+9,2≤m≤1e+9)
Output
For each n and m,output the answer in a single line.
Sample Input
2
1 2
2 3
Sample Output
3
13
读题也费了点时间,其实就是给m个0到n之间的数按照组合数求出结果再两两相乘,最后再将所有可能的值加起来。
比赛时是三个人一起手算打表找规律过的,快速幂和乘法逆元还WA了一回,看来熟练度不够。
bestcoder官网博客的正儿八经题解:
找到公式后就是用快速幂算出m^(n + 1),再用扩展欧几里得模板算逆元得结果。
运行结果:
A Boring Question
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description
There are an equation.
So the answer is 4.
Input
The first line of the input contains the only integer T,(1≤T≤10000)
Then T lines follow,the i-th line contains two integers n,m,(0≤n≤1e+9,2≤m≤1e+9)
Output
For each n and m,output the answer in a single line.
Sample Input
2
1 2
2 3
Sample Output
3
13
读题也费了点时间,其实就是给m个0到n之间的数按照组合数求出结果再两两相乘,最后再将所有可能的值加起来。
比赛时是三个人一起手算打表找规律过的,快速幂和乘法逆元还WA了一回,看来熟练度不够。
bestcoder官网博客的正儿八经题解:
找到公式后就是用快速幂算出m^(n + 1),再用扩展欧几里得模板算逆元得结果。
#include <cstdio> #include <cmath> #define MAX 100005 #define mod 1000000007 using namespace std; long long multi(long long a, long long b)//快速幂 { long long ret = 1; while(b > 0) { if(b & 1) ret = (ret * a) % mod; a = (a * a) % mod; b >>= 1; } return ret; } long long exgcd(long long a, long long b, long long &x, long long &y)//扩展欧几里得 { if(!b) { x = 1; y = 0; return a; } long long d = exgcd(b, a % b, x, y); long long tmp = x; x = y; y = tmp - a / b * y; return d; } int main() { int T; scanf("%d", &T); while(T--) { long long n, m, x, y; scanf("%lld %lld", &n, &m); long long mul = (multi(m, n + 1) - 1) % mod; long long d = exgcd(m - 1, mod, x, y);//若这里mod的位置填写mod * (m - 1),最终计算时需要让x和mod都除以d x *= mul; x /= d;//因为m - 1和mod是互质的,这句可以去掉。 x = (x % mod + mod) % mod;//防止最终结果为负数 printf("%lld\n", x); } return 0; }
运行结果:
相关文章推荐
- HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)
- HDU 5793 A Boring Question (快速幂 + 乘法逆元 + 费马小定理)
- Hdu 5793 A Boring Question【暴力打表+找规律+求逆元+快速幂+快速积】
- HDOJ 5793 A Boring Question(快速幂+逆元+数学推导)
- 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【快速幂+逆元】
- 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 Multi-University Training Contest 6 (1001)
- 【HDU】5793 A Boring Question
- HDU 5690 查找循环节 数学公式快速幂+乘法逆元(除法取模)
- (HDU 5793)2016 Multi-University Training Contest 6 A Boring Question (规律)
- HDU-5793-A Boring Question(打表找规律)
- hdu 5793 A Boring Question(2016第六场多校)
- hdu-5793 A Boring Question(二项式定理)