線形合同方程式-----------------------------数論(テンプレート)

nセットのデータai、bi、miが与えられた場合、数値の各セットについてxiを見つけてai *xi≡bi(mod mi)を満たします。解がない場合、出力は不可能です。

入力形式
最初の行には整数nが含まれています。

次のn行には、各行にai、bi、miのデータのセットが含まれています。

出力形式
合計n行出力し、各データ群は条件を満たすxiを表す整数を出力します解がない場合は出力できません。

データ結果の各セットは1行を占め、結果は一意ではない可能性があり、条件を満たすすべての結果を出力できます。

出力の回答はintの範囲内でなければなりません。

データ範囲
1≤n≤105、1≤ai、
bi、mi≤2∗ 109
入力サンプル:
2
2 3 6
4 3 5
出力サンプル:
不可能
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件 賞賛された14件 ビュー10,000件以上

おすすめ

転載: blog.csdn.net/qq_43690454/article/details/105249807
おすすめ