UVA 10951 - Polynomial GCD

题目链接

题意:给定两个多项式,求多项式的gcd,要求首项次数为1,多项式中的运算都%n,而且n为素数.

思路:和gcd基本一样,仅仅只是传入的是两个多项式,因为有%n这个条件。所以计算过程能够用乘法逆去计算除法模,然后最后输出的时候每项除掉首项的次数就是答案了.

代码:

#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; int n;
vector<int> f, g; int exgcd(int a, int b, int &x, int &y) {
if (!b) {x = 1; y = 0; return a;}
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
} int inv(int a, int n) {
int x, y;
exgcd(a, n, x , y);
return (x + n) % n;
} vector<int> pmod(vector<int> f, vector<int> g) {
int fz = f.size(), gz = g.size();
for (int i = 0; i < fz; i++) {
int k = fz - i - gz;
if (k < 0) break;
int a = f[i] * inv(g[0], n) % n;
for (int j = 0; j < gz; j++) {
int now = i + j;
f[now] = ((f[now] - a * g[j] % n) % n + n) % n;
}
}
vector<int> ans;
int p = -1;
for (int i = 0; i < fz; i++) if (f[i] != 0) {p = i; break;}
if (p >= 0) for (int i = p; i < fz; i++) ans.push_back(f[i]);
return ans;
} vector<int> gcd(vector<int> f, vector<int> g) {
if (g.size() == 0) return f;
return gcd(g, pmod(f, g));
} int main() {
int cas = 0;
while (~scanf("%d", &n) && n) {
f.clear(); g.clear();
int a, k;
scanf("%d", &a);
for (int i = 0; i <= a; i++) {
scanf("%d", &k);
f.push_back(k);
}
scanf("%d", &a);
for (int i = 0; i <= a; i++) {
scanf("%d", &k);
g.push_back(k);
}
vector<int> ans = gcd(f, g);
int tmp = inv(ans[0], n), ansz = ans.size();;
printf("Case %d: %d", ++cas, ansz - 1);
for (int i = 0; i < ansz; i++) {
printf(" %d", ans[i] * tmp % n);
}
printf("\n");
}
return 0;
}

最新文章

  1. linux mount 硬盘挂载和卸载
  2. Linux 与 CONE NAT 和 Symmetric NAT
  3. Session设置不当导致API变成单线程问题的解决
  4. centos 如何用 rsyslog 搭建本地日志服务(续1: omprog模块与php deamon的配合使用)
  5. cgi表单的处理
  6. Linux下multipath多路径配置
  7. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (一)Nginx安装篇
  8. C++程序设计实践指导1.4正整数转换为字符串改写要求实现
  9. Spring集成Quartz定时器
  10. 通过浏览器navigator判断浏览器版本或者手机类型&amp;&amp;判断微信访问
  11. Ajax 案例之三级联动
  12. dedecms织梦上传图片302Error错误
  13. shell的case语句
  14. LeetCode算法题-Can Place Flowers(Java实现)
  15. JS对象1
  16. SQL语句整理2
  17. [转]kaldi上的深度神经网络
  18. python - getattr 与 getattribute 机制
  19. Bootstrap3基础 form-control 圆角的输入框,光标放入后边框变色
  20. Centos7 使用Docker搭建Oracle测试环境

热门文章

  1. uniSWF使用注意事项
  2. SourceTree免注册并连码云
  3. CCCC L2-023. 图着色问题【set去重判不同种类个数/简单图论/判断两相邻点是否存在同色以及颜色个数】
  4. [转载][FPGA]Quartus代码保护-生成网表文件
  5. springboot 集成 freemarker
  6. Linux环境下编译JDK
  7. Redis - 事务操作与详解
  8. windows XP 下的DTRACE 跟踪 学习
  9. iOS -- SKKeyframeSequence类
  10. Java中char转为16进制