/*****************
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-06 19:48:03 发布
这是一个关于n元线性同余方程的编程解决方案,主要涉及ACM竞赛中的数论问题。给定A[i]、b和p,程序通过ex_gcd算法求解是否存在x[i]满足a[1]*x[1]+...+a[n]*x[n]+b ≡ 0 (mod p)。当b%gcd!=0时不满足条件,否则输出解并满足b/k=k*模运算。

最低0.47元/天 解锁文章
2373

被折叠的 条评论
为什么被折叠?



