按照题意,显然可以列出同余方程,k即为所求天数,再将其化为不定方程 ,那么对这个方程用扩展欧几里德算法即可得出k,q的一组解,但是方程有解的充要条件是(m – n) 和L不同时为零并且x – y是m – n和L的因子,扩展欧几里德算出的解才是方程的解
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<string> #include<stack> #include<queue> #include<vector> #include<set> #include<ctime> #include<cstdlib> #define ll long long using namespace std; void exgcd(ll a,ll b,ll &d,ll &x,ll &y) { if(!b) { x = 1; y = 0; d = a; return; } exgcd(b,a % b,d,x,y); ll tmp = x; x = y; y = tmp - (a / b) * y; return; } int main() { ll x,y,m,n,l,k,q,d; scanf("%lld %lld %lld %lld %lld",&x,&y,&m,&n,&l); if(n < m) { swap(n,m); swap(x,y); } ll a = n - m; exgcd(a,l,d,k,q); if((x - y) % d != 0 || m == n) //判断方程有解的条件 { printf("Impossible"); return 0; } printf("%lld",(k * (x - y) / d % (l / d) + (l / d)) % (l/ d));//为得到一组正数解 return 0; }
。
原文地址:https://www.cnblogs.com/lijilai-oi/p/10691662.html
时间: 2024-10-18 09:07:18