根据题意得出的方程 (m-n)t+Lk=y-x t为步数 k为圈数 然后根据扩展欧几里得就能得出解 然后处理一下就可以了
对L取余要防止负数情况
#include <iostream> #include<cstdio> using namespace std; void exgcd(long long a,long long b,long long &d,long long &x,long long &y) { if(b==0) { x=1;y=0;d=a; return; } else { exgcd(b,a%b,d,x,y); long long temp=x; x=y; y=temp-(a/b)*y; } } int main() { long long x,y,m,n,l,gcd,ansx,ansy; while(~scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)) { exgcd(m-n,l,gcd,ansx,ansy); if((y-x)%gcd==0) { ansx*=(y-x)/gcd; ansx=(ansx%l+l)%l; printf("%d\n",ansx); } else printf("Impossible\n"); } return 0; }