【LOJ10216】五指山

xiaoxiao2025-08-17  30

题目:五指山

解析:

       exgcd,随便推一下就行了。

       PS:最初只有90分,因为求最小正整数解我是这样写的:

ans=(x%b+b)%b;

       然而这是错的,应该是: 

ans=(x%(b/gcd)+(b/gcd))%(b/gcd);

       具体原因请自行了解扩欧原理。

 

代码:

 

#include <bits/stdc++.h> #define int long long using namespace std; int m,x,y,a,b,d,t,n,gcd; inline void exgcd(int a,int b) { if(!b) gcd=a,x=1,y=0; else { exgcd(b,a%b); int t=x; x=y; y=t-a/b*x; } } signed main() { cin>>t; while(t--) { cin>>n>>d>>a>>b; m=b-a,a=d,b=n; exgcd(a,b); if(m%gcd) puts("Impossible"); else x*=(m/gcd),cout<<(x%(b/gcd)+(b/gcd))%(b/gcd)<<"\n"; ans=(x%(b/gcd)+(b/gcd))%(b/gcd); } return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-5034976.html

最新回复(0)