SGU 140 Integer Sequences(扩展欧几里得)
2016-04-16 18:45
387 查看
Description
给出n个数a[1],…,a
,求序列x使得sum(a[i]*x[i])=b(mod p)
Input
第一行三个整数n,p,b,第二行n个整数a[i]
(1<=n<=100,1<=p<=10000,0<=b<=p-1,a[i]< 2*10^9)
Output
如果存在满足条件的序列x则输出YES并输出x,否则输出NO
Sample Input
2 7 4
7 3
Sample Output
YES
0 6
Solution
令g=gcd(a[1],a[2],…,a
,p),ans为答案序列,如果b不能整除g说明无解,如果能整除g说明有解,在求g的过程中由扩展欧几里得可以求得系数序列x[i],y[i]:
x[1]*a[1]+y[1]*a[2]=gcd(a[1]a[2])=g[1]
x[2]*g[1]+y[2]*a[3]=gcd(a[1],a[2],a[3])=g[2]
……
x[n-1]*g[n-1]+y[n-1]*a
=gcd(a[1],…,a
)=g
x
*g
+y
*p=gcd(a[1],a[2],…,a
,p)=g
故有ans[i]=(b/g)y[i-1]*x[i]*x[i+1]…*x
%p
Code
给出n个数a[1],…,a
,求序列x使得sum(a[i]*x[i])=b(mod p)
Input
第一行三个整数n,p,b,第二行n个整数a[i]
(1<=n<=100,1<=p<=10000,0<=b<=p-1,a[i]< 2*10^9)
Output
如果存在满足条件的序列x则输出YES并输出x,否则输出NO
Sample Input
2 7 4
7 3
Sample Output
YES
0 6
Solution
令g=gcd(a[1],a[2],…,a
,p),ans为答案序列,如果b不能整除g说明无解,如果能整除g说明有解,在求g的过程中由扩展欧几里得可以求得系数序列x[i],y[i]:
x[1]*a[1]+y[1]*a[2]=gcd(a[1]a[2])=g[1]
x[2]*g[1]+y[2]*a[3]=gcd(a[1],a[2],a[3])=g[2]
……
x[n-1]*g[n-1]+y[n-1]*a
=gcd(a[1],…,a
)=g
x
*g
+y
*p=gcd(a[1],a[2],…,a
,p)=g
故有ans[i]=(b/g)y[i-1]*x[i]*x[i+1]…*x
%p
Code
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; #define maxn 111 int extend_gcd(int a,int b,int &x,int &y) { int d=a; if(b!=0) { d=extend_gcd(b,a%b,y,x); y-=(a/b)*x; } else { x=1; y=0; } return d; } int n,a[maxn],p,b,x[maxn],y[maxn],ans[maxn]; int main() { scanf("%d%d%d",&n,&p,&b); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]%=p; } a[n+1]=p; int g=a[1]; for(int i=1;i<=n;i++) g=extend_gcd(g,a[i+1],x[i],y[i]); if(b%g)printf("NO\n"); else { printf("YES\n"); g=b/g,y[0]=1; for(int i=n;i>=1;i--) { g=(g*x[i]%p+p)%p; ans[i]=(g*y[i-1]%p+p)%p; } for(int i=1;i<=n;i++) printf("%d%c",ans[i],i==n?'\n':' '); } return 0; }
相关文章推荐
- AsyncQueryHander的用法
- iOS ---UICollectionView简单使用
- iOS --- UIcollectionView设置头尾
- IOS开发UI系列之常用类的继承关系层次图
- js 空数组是true还是false
- ACM学习历程—Hihocoder 1291 Building in Sandbox(dfs && 离线 && 并查集)
- Error:failed to find Build Tools revision 21.1.1
- 百度富文本编辑器Ueditor的使用
- 交叉编译liquid-dsp-1.2.0
- UIButton实现控制动画的开始和停止
- iOS---UIViewContentMode各类型效果
- sublime text2 build system 执行带中文路经文件
- iOS UITextField修改信息
- PHP-include和require
- 【问题】Failed to send producer request with correlation id 2 to broker 0 with
- UVALive 6195 —— The Dueling Philosophers Problem
- Map很多Key-Value对应是可以此来处理!
- UITableView 总结
- 界面编程与视图(view)组件——三种UI界面开发方式
- Android设计模式之建造者模式(Builder Pattern)