模数的世界 题解(数论)

题目链接

题目思路

参考官方题解

根据猜想/观察可知除非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;
}

不摆烂了,写题
原文地址:https://www.cnblogs.com/hunxuewangzi/p/14381014.html