题目大意:

给定序列a[] , p , b

希望找到一个序列 x[] , 使a1*x1 + a2*x2 + ... + an*xn = b (mod p)

这里很容易写成 a1*x1 + a2*x2 + ... + an*xn + yp = b

-> a1*x1 + a2*x2 + ... + an*xn + y1*p + y2*p + .... + yn*p = b

->(a1*x1+y1*p) + (a2*x2+y2*p) + ... + (an*xn+yn*p) = b

y[]是必然有解的 , 这里每一个值都可以看做一个二元方程,用扩展欧几里得求解得到的就是

f1*gcd(a1,p) + f2*gcd(a2,p) + ... + fn*gcd(an,p) = b  (1.1)

这里f[]是未知的 ,只要求扩展欧几里得的过程中记录当答案为ai*xi + yi*p = gcd(ai,p) 是xi的值

那么求出合法的fi , 那么正确的解就是 xi = xi*fi

而式子1.1又可以逐个求扩展欧几里得,然后再逆向求回来

ll cur = b;
bool flag=true;
for(int i=n ; i>=1 ; i--){
  ll tmp;
  ll d = ex_gcd(t[i-1] , tmp , g[i] , f[i]);
  if(cur%d!=0){flag=false;break;}
  f[i] = cur/d*f[i];
  cur -= f[i]*g[i];
}

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <set>
#include <iostream>
using namespace std; #define ll long long
int n , p , b;
int a[];
ll g[] , x[] , y[];
ll t[] , f[]; ll ex_gcd(ll a , ll &x , ll b , ll &y)
{
if(b==){
x = , b = ;
return a;
}
ll ans = ex_gcd(b , x , a%b , y);
ll t=x ;
x=y , y=t-(a/b)*y;
return ans;
} ll gcd(ll a , ll b){return b?gcd(b,a%b):a;} int main()
{
scanf("%d%d%d" , &n , &p , &b);
for(int i= ; i<=n ; i++){
scanf("%d" , &a[i]);
g[i] = ex_gcd(a[i] , x[i] , p , y[i]);
} t[] = , t[] = g[];
for(int i= ; i<=n ; i++){
t[i] = gcd(t[i-], g[i]);
}
if(b%t[n]!=){
puts("NO");
return ;
}
ll cur = b;
bool flag=true;
for(int i=n ; i>= ; i--){
ll tmp;
ll d = ex_gcd(t[i-] , tmp , g[i] , f[i]);
if(cur%d!=){flag=false;break;}
f[i] = cur/d*f[i];
cur -= f[i]*g[i];
}
if(!flag) {
puts("NO");
return ;
}
puts("YES");
for(int i= ; i<=n ; i++){
ll v = x[i]*f[i];
v = (v%p+p)%p;
if(i<n) printf("%I64d " , v);
else printf("%I64d\n" , v);
}
return ;
}

SGU 140 扩展欧几里得的更多相关文章

  1. SGU 106 The equation 扩展欧几里得好题

    扩展欧几里得的应用……见算法竞赛入门经典p.179 注意两点:1.解不等式的时候除负数变号 2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 ...

  2. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

  3. UVA 12169 Disgruntled Judge 枚举+扩展欧几里得

    题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...

  4. UVA 10090 Marbles 扩展欧几里得

    来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...

  5. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

  6. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

  7. poj 2891 扩展欧几里得迭代解同余方程组

    Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...

  8. poj 2142 扩展欧几里得解ax+by=c

    原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...

  9. poj 1061 扩展欧几里得解同余方程(求最小非负整数解)

    题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...

随机推荐

  1. TCP/IP,Http,Socket,XMPP的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  2. 线程池的原理及实现 (zhuan)

    http://blog.csdn.net/hsuxu/article/details/8985931 ************************************************* ...

  3. Oracle 修改一行数据内存主要变化

    向Oracle 数据库发出请求,修改一行数据,在内存中主要有以下变化: 1. 服务器进程将包含该行数据的块读取到内存中 2. 写redo日志.将内存中该数据块指向undo表空间中数据块的变更向量(Ch ...

  4. CTEX里的函数、符号及特殊字符

    CTEX里的函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{a}   \acute{a}   \check{a}   \grave{a}   \tilde{a}   \hat ...

  5. 基于TBDS的flume异常问题排查过程

    版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/214 来源:腾云阁 https://www.qclou ...

  6. 让页面滑动流畅得飞起的新特性:Passive Event Listeners

    版权声明:本文由陈志兴原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/153 来源:腾云阁 https://www.qclo ...

  7. 将cantk runtime嵌入到现有的APP中

    1,先取cantk-runtime-demos到本地: git clone https://github.com/drawapp8/cantk-runtime-demos 2,创建一个Android ...

  8. The Economist

      The turning point in the process of growing up is when you discover the core of strength within yo ...

  9. eclipse 下面的folder,source folder,package的区别与作用

    首先明确一点,folder,source folder,package都是文件夹,既然是文件夹,那么任何的文件都可以往这三种文件夹下面的放.1.他们的区别folder就是普通的文件夹,它和我们wind ...

  10. hdu------(3549)Flow Problem(最大流(水体))

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...