51nod 1119 机器人走方格 (简单数论)
2016-09-06 17:50
232 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">原题链接为 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119</span> 参考:http://blog.csdn.net/hahaall/article/details/50581935
此题可用求逆元的方法求解,其中还要用到费马小定理
若要求 a/b=X(mod P)
则可以转化为a*b'=X(mod P) 其中b'为b关于mod P的逆元;
而求逆元则可以用费马小定理:
如果P为质数,并且b不为P的倍数,则b^(p-1)=1(mod P)成立
于是:a / b = a / b * (b * b ^ (P-2)) = a * (b ^ (P-2)) (mod P).
代码如下:
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
int main()
{
int m,n;
cin>>m>>n;
long long a=1,b=1,k=m+n-2,t=min(m,n)-1;
while(t)
{
a=(a*k)%mod;
k--;t--;
}
t=min(m,n)-1;
while(t)
{
b=(b*t)%mod;
t--;
}
long long sum=1,p=mod-2,q=b;
while(p)
{
if(p%2)
sum=(sum*q)%mod;
p/=2;
q=(q*q)%mod;
}
sum=(sum*a)%mod;
cout<<(sum+mod)%mod<<endl;
}
此题可用求逆元的方法求解,其中还要用到费马小定理
若要求 a/b=X(mod P)
则可以转化为a*b'=X(mod P) 其中b'为b关于mod P的逆元;
而求逆元则可以用费马小定理:
如果P为质数,并且b不为P的倍数,则b^(p-1)=1(mod P)成立
于是:a / b = a / b * (b * b ^ (P-2)) = a * (b ^ (P-2)) (mod P).
代码如下:
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
int main()
{
int m,n;
cin>>m>>n;
long long a=1,b=1,k=m+n-2,t=min(m,n)-1;
while(t)
{
a=(a*k)%mod;
k--;t--;
}
t=min(m,n)-1;
while(t)
{
b=(b*t)%mod;
t--;
}
long long sum=1,p=mod-2,q=b;
while(p)
{
if(p%2)
sum=(sum*q)%mod;
p/=2;
q=(q*q)%mod;
}
sum=(sum*a)%mod;
cout<<(sum+mod)%mod<<endl;
}
相关文章推荐
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
- 51nod 1119 机器人走方格V2(求组合数,费马小定理+快速幂/逆元+gcd)
- 51nod 1119 机器人走方格 V2
- 51nod 1119 机器人走方格 V2【组合数学+逆元】
- 51nod 1119 机器人走方格 v2
- 51nod 1118 机器人走方格(简单DP)
- 51Nod 1119 机器人走方格 ——除法取模
- 51nod 1119:机器人走方格 V2
- 51nod 1119 机器人走方格 V2
- 51nod 1119 机器人走方格 V2 (求组合数__模板)
- 51nod 1119 机器人走方格 V2
- 51Nod - 1119 机器人机器人走方格 v2
- 51nod 1119 机器人走方格 V2
- 51nod 1118 机器人走方格 & 1119 机器人走方格 V2(排列组合)
- 51nod--1119 机器人走方格 V2
- 51nod-1119 1119 机器人走方格 V2(组合数学+乘法逆元+快速幂)
- 【51Nod】1119 - 机器人走方格V2(逆元 & 费马小定理 & 快速幂)
- 机器人走方格 V2 51Nod - 1119 组合数学+逆元
- 51Nod 1119 机器人走方格 V2
- 51nod 1119 机器人走方格