题目链接
题目思路
参考官方题解
根据猜想/观察可知除非a=b=0,答案为0,否则答案必为p-1,下面给出证明并假设a!=0且a>=b。
若b=0,那么设x=(p-a)(p-1),y=p(p-1),
则x%p=a,y%p=0,gcd(x,y)=p-1,显然是最大的。
若b!=0,设k1(p-1)%p=a, k2(p-1)%p=b。 则k1=p-a,k2=p-b是满足上述的解
但k1和k2不一定互质
每次暴力使得k1+=p
很容易使他们互质
代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const int eps=1e-6;
int a,b,p;
signed main(){
int _;scanf("%d",&_);
while(_--){
scanf("%d%d%d",&a,&b,&p);
if(a==b&&b==0){
printf("0 0 0\n");
}else{
ll x=1ll*(p-a)*(p-1),y=1ll*(p-b)*(p-1);
while(__gcd(x,y)!=p-1) x+=p*(p-1);
printf("%d %lld %lld\n",p-1,x,y);
}
}
return 0;
}