= =||| 青蛙也恋爱


                                  点击图片即可康

设 时 间 为 t i m e 设时间为time time

由 题 意 可 列 出 方 程 : 由题意可列出方程: :

( x + m ∗ t i m e ) (x + m * time) (x+mtime) % \% % l = ( y + n ∗ t i m e ) l = (y + n * time) l=(y+ntime) % \% % l ( 即 x + m ∗ t i m e = y + m ∗ t i m e l(即x+m*time=y+m*time l(x+mtime=y+mtime ( m o l (mol (mol l ) ) l)) l))

   ⟹    x − y = ( n − m ) ∗ t i m e ( m o d \implies x - y = (n-m)*time(mod xy=(nm)time(mod l ) l) l)

   ⟹    x − y = ( n − m ) ∗ t i m e + n u m ∗ l ( n u m ∈ N ) \implies x - y = (n - m) * time + num * l(num\in \mathbb N) xy=(nm)time+numl(numN)

很 容 易 我 们 就 会 发 现 很容易我们就会发现 这 就 是 个 这就是个 扩 欧 扩欧

所 以 所以 我 们 就 转 化 成 求 a x + b y = n 的 所 有 解 中 x 的 最 小 解 我们就转化成求ax+by=n的所有解中x的最小解 ax+by=nx

如 果 g c d ( a , b ) ∤ n 如果gcd(a,b)\nmid n gcd(a,b)n 那 么 无 解 那么无解

如 果 g c d ( a , b ) ∣ n 如果gcd(a,b)\mid n gcd(a,b)n 设 a = a 0 ∗ g c d 设a = a_0 * gcd a=a0gcd b = b 0 ∗ g c d b = b_0 * gcd b=b0gcd n = n 0 ∗ g c d n = n_0 * gcd n=n0gcd

先 求 出 a 0 x + b 0 y = 1 的 一 组 解 x ′ ′ 先求出a_0x+b_0y=1的一组解x'' a0x+b0y=1x y ′ ′ y'' y

然 后 a 0 x + b 0 y = n 0 的 所 有 解 可 以 表 示 为 { x ′ = n 0 x ′ ′ + b 0 t y ′ = n 0 y ′ ′ − a 0 t 然后a_0x+b_0y=n_0的所有解可以表示为\begin{cases}x'=n_0x''+b_0t\\y'=n_0y''-a_0t\end{cases} a0x+b0y=n0{x=n0x+b0ty=n0ya0t ( t ∈ N ) (t\in \mathbb N) (tN)

                                                  ( a ↓ (a↓ (a b ↑ ) b↑) b)

该 解 同 时 也 是 a x + b y = n 的 所 有 解 该解同时也是ax+by=n的所有解 ax+by=n 最 后 只 需 调 到 最 小 正 整 数 即 可 最后只需调到最小正整数即可

C O D I N G \mathbb{CODING} CODING

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t, num;
inline ll exgcd(ll a, ll b){
	if(b == 0){
		t = 1;
		num = 0;
		return a;
	}
	ll d = exgcd(b, a % b);
	ll temp = t;
	t = num;
	num = temp - a / b * num;
	return d;
}
signed main(){
	ll x, y, m, n, l;
	cin >> x >> y >> m >> n >> l;
	ll a = x - y, b = n - m;
	if(b < 0) a = -a, b = -b;
	ll d = exgcd(b, l);
	if(a % d != 0) cout << "Impossible\n";
	else{
		a /= d, l /= d;
		t = ((t * a) % l + l) % l;//调
		cout << t;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值