poj解题报告——1061
2014-11-02 20:07
211 查看
刚看到这题的时候,以为是一道不定方程的题,后来看着看着就不对劲了,然后我想起了暑期集训的时候老师提过的扩展算法——gcd。
欧几里得算法的拓展应用中有如下三条定理:
定理一:如果d = gcd(a, b),则必能找到正的或负的整数k和l,使d = a*x+ b*y。
定理二:若gcd(a, b) = 1,则方程ax ≡ c (mod b)在[0, b-1]上有唯一解。
定理三:若gcd(a, b) = d,则方程ax ≡ c (mod b)在[0, b/d - 1]上有唯一解。
代码如下
#include<stdio.h>
__int64 exgcd(__int64 a,__int64 b,__int64 x,__int64 y)
{
__int64 r,t;
if(b==0)
{
x=1;
y=0;
return a;
}
r=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-a/b*y;
return r;
}
void main()
{
__int64 x,y,m,n,l,i,j,d,r;
scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l);
d=exgcd(n-m,l,i,j);
if((x-y)%d!=0)
printf("Impossible\n");
else
{
i=i*((x-y)/d);
r=l/d;
i=(i%r+r)%r;
printf("%I64d\n",i);
}
}
欧几里得算法的拓展应用中有如下三条定理:
定理一:如果d = gcd(a, b),则必能找到正的或负的整数k和l,使d = a*x+ b*y。
定理二:若gcd(a, b) = 1,则方程ax ≡ c (mod b)在[0, b-1]上有唯一解。
定理三:若gcd(a, b) = d,则方程ax ≡ c (mod b)在[0, b/d - 1]上有唯一解。
代码如下
#include<stdio.h>
__int64 exgcd(__int64 a,__int64 b,__int64 x,__int64 y)
{
__int64 r,t;
if(b==0)
{
x=1;
y=0;
return a;
}
r=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-a/b*y;
return r;
}
void main()
{
__int64 x,y,m,n,l,i,j,d,r;
scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l);
d=exgcd(n-m,l,i,j);
if((x-y)%d!=0)
printf("Impossible\n");
else
{
i=i*((x-y)/d);
r=l/d;
i=(i%r+r)%r;
printf("%I64d\n",i);
}
}
相关文章推荐
- POJ 1061 解题报告
- POJ—1061 青蛙的约会 解题报告(超详细)
- poj1061青蛙的约会解题报告
- POJ_1061 青蛙的约会 解题报告
- 解题报告 :POJ1061 青蛙的约会 数论/扩展欧几里德模板题
- POJ 1061解题报告
- POJ 1061 青蛙的约会 解题报告(模线性方程)
- 解题报告 之 POJ1061 青蛙的约会
- 【解题报告】POJ 1026 Cipher -- 置换群 轮换k次
- POJ 1860 解题报告
- poj解题报告——1323
- POJ 1590解题报告
- POJ 2243解题报告
- POJ2159解题报告
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
- POJ - 1321 棋盘问题 解题报告
- POJ 2362 POJ1011解题报告
- POJ 3003 解题报告
- POJ 1274 解题报告
- POJ 2386 解题报告