/*****************
n元线性同余方程
链接:http://acm.sgu.ru/problem.php?contest=0&problem=140
题意:给定A[i],b,p求是否有x[i]满足要求--
a[1]*x[1]+……a[i]*x[i]+a[n]*x[n]+b=(mod p)
典型的n元线性同余问题
可做模板
****************/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define maxn 105
using namespace std;
int ex_gcd(int a,int b,int &x,int &y)
{
if(!b)
{
x=1,y=0;
return a;
}
int r=ex_gcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
int A[maxn],X[maxn],S[maxn],T[maxn];
int main()
{
int i;
int n,p,b;
int k,gcd;
scanf("%d %d %d",&n,&p,&b);
for(i=1;i<=n;++i)//输入A
{
scanf("%d",&A[i]);
A[i]=A[i]%p; //先预处理
}
A[n+1]=p;//直接把p赋值
for(i=1,k=A[1];i<=n;++i) //求所有的gcd---注意不可以在for定义i
{
gcd=ex_gcd(k,A[i+1],S[i],T[i]);
k=gcd;
}
if(b%k!=0) //不满足条件的时候--b%gcd!=0
{
n元线性同余方程模板
最新推荐文章于 2021-12-07 11:26:12 发布