Ecuación de congruencia lineal ----------------------------- Teoría de números (plantilla)

Dados n conjuntos de datos ai, bi, mi, encuentre un xi para cada conjunto de números para satisfacer ai * xi≡bi (mod mi), y si no hay solución, la salida es imposible.

Formato de entrada La
primera línea contiene el número entero n.

Las siguientes n filas, cada fila contiene un conjunto de datos ai, bi, mi.

Formato de salida
Se genera un total de n filas. Cada grupo de datos genera un número entero para representar un xi que cumple las condiciones. Si no hay solución, resulta imposible.

Cada conjunto de resultados de datos ocupa una fila, los resultados pueden no ser únicos y se puede generar cualquier resultado que cumpla con las condiciones.

La respuesta de salida debe estar dentro del rango int.

Rango de datos
1≤n≤105,
1≤ai, bi, mi≤2 ∗ 109
Muestra de entrada:
2
2 3 6
4 3 5
Muestra de salida:
imposible
7


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,a,b,m,x,y;
int exgcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;y=0;
        return a;
    }
    int d=exgcd(b,a%b,x,y);
    int tmp=x;
    x=y;
    y=tmp-a/b*y;
    return d;
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>a>>b>>m;
        int d=exgcd(a,m,x,y);
       // cout<<d<<endl;
        if(b%d!=0)  cout<<"impossible"<<endl;
        else 
        {
            cout<<(ll)x*(b/d)%m<<endl; //扩大了(b/d)倍
        }
    }
}
572 artículos originales publicados · elogiados 14 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43690454/article/details/105249807
Recomendado
Clasificación