线性同余方程刷题小记

线性同余方程刷题小记

T1:同余方程

题目链接: P1082 [NOIP2012 提高组] 同余方程
题目分析: 这个貌似比板子题都要简单一些,所以我们可以用简化一点的方法。 a x ≡ 1 ( m o d   b ) ax\equiv 1(mod\ b) ax1(mod b)的解即为 a x + b y = 1 ax+by=1 ax+by=1 x x x的解,根据题目中说的一定有解,而 g c d ( a , b ) ∣ 1 gcd(a,b)|1 gcd(a,b)1时才有解,所以 g c d ( a , b ) gcd(a,b) gcd(a,b)为1, a a a, b b b互质,所以直接拓展欧几里得算出一组特解,然后 ( x 0 % b + b ) % b (x_0\%b+b)\%b (x0%b+b)%b即为答案
Code:

#include<bits/stdc++.h>
using namespace std;
int exgcd(int a,int b,int &x,int &y){
 if(b==0){
  x=1;y=0;
  return a;
 }
 int r=exgcd(b,a%b,x,y);
 int xx=x;
 x=y;
 y=xx-a/b*y;
 return r;
}
int main(){
 scanf("%d%d",&A,&B);
 exgcd(A,B,X,Y);
 X=(X%B+B)%B;
 printf("%d",X);
 return 0;
} 

总结与反思:
学会从题目中找到这个题的数据的特点,从而简化算法

T2:青蛙的约会

题目: P1516 青蛙的约会
题目分析: 根据题意,不难将本题转化为一个数学方程式,即 x + m t ≡ y + n t   ( m o d   L ) x+mt\equiv y+nt \ (mod\ L) x+mty+nt (mod L),( t t t为时间),进一步转化可得出 ( m − n ) t + k L = y − x (m-n)t+kL=y-x (mn)t+kL=yx,即为一个线性不定方程,这里要特别注意 m − n m-n mn要大于零,否则将两只青蛙的属性要颠倒一下。
Code:

#include<bits/stdc++.h>
using namespace std;
long long X,Y,M,N,L,XX,YY,Ans,XXX,YYY;
long long exgcd(long long a,long long b,long long &x,long long &y){
 if(b==0){
  x=1;y=0;
  return a;
 }
 long long r=exgcd(b,a%b,x,y);
 long long tem=x;
 x=y;
 y=tem-a/b*y;
 return r;
}
long long equation(long long a,long long b,long long c,long long &x,long long &y){
 long long d=exgcd(a,b,x,y);
 if(c%d) return 0;
 long long k=c/d;
 x=x*k;
 y=y*k;
 long long ans=x,s=b/d;
 ans=(ans%s+s)%s;
 return ans;
}
int main(){
 scanf("%lld%lld%lld%lld%lld",&X,&Y,&M,&N,&L);
 if(M<N){
  swap(M,N);
  swap(X,Y);
 }
 Ans=equation(M-N,L,Y-X,XXX,YYY);
 if(Ans==0) printf("Impossible");
 else printf("%lld",Ans);
 return 0;
} 

总结与反思:
1.要注意线性不定方程的系数不能为负值
2.注意数据范围,开long long (特别注意:数论中不要开unsigned long long)
3.将题目转化为数学问题进行过解答

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值