题目链接:uva 10951 - Polynomial GCD

题目大意:给出n和两个多项式,求两个多项式在全部操作均模n的情况下最大公约数是多少。

解题思路:欧几里得算法,就是为多项式这个数据类型重载取模运算符,须要注意的是在多项式除多项的过程中,为了保证各项系数为整数,须要将整个多项式的系数总体扩大至一定倍数,碰到先除后模的时候要用逆元。

#include <cstdio>
#include <cstring> const int maxn = 105;
int M; void gcd (int a, int b, int& d, int& x, int& y) {
if (b == 0) {
d = a;
x = 1;
y = 0;
} else {
gcd(b, a%b, d, y, x);
y -= (a/b) * x;
}
} int inv (int a, int b) {
int d, x, y;
gcd(a, b, d, x, y);
return (x + b) % b;
} struct state {
int d;
int x[maxn]; state() {
d = 0;
memset(x, 0, sizeof(x));
} void get () {
scanf("%d", &d);
for (int i = d; i >= 0; i--)
scanf("%d", &x[i]);
} void put () {
printf(" %d", d);
for (int i = d; i >= 0; i--)
printf(" %d", x[i]);
} state operator * (const int& a) {
state ans = *this;
for (int i = 0; i <= d; i++)
ans.x[i] = ans.x[i] * a % M;
ans.del();
return ans;
} state operator - (const state& a) { state ans = *this;
for (int i = 0; i <= a.d; i++)
ans.x[d-i] = (ans.x[d-i] - a.x[a.d-i] + M) % M;
ans.del();
return ans;
} void del () {
for (int i = d; i >= 0; i--)
x[d] = (x[d] + M) % M; while (d > 0 && x[d] == 0)
d--;
} bool empty() {
return d <= 0 && x[0] == 0;
}
}; state mod (state a, state b) {
for (int i = a.d; i >= b.d; i--) {
int p = a.x[i], q = b.x[b.d]; state c = b * inv(q, M) * p;;
a = a - c;
/*
a.put();
printf("\n");
*/
}
return a;
} state sgcd (state a, state b) {
return b.empty() ? a : sgcd(b, mod(a, b));
} int main () {
int cas = 1;
while (scanf("%d", &M) == 1 && M) {
state a, b;
a.get();
b.get(); state c = sgcd(a, b); printf("Case %d:", cas++);
c = c * inv(c.x[c.d], M);
c.put();
printf("\n");
}
return 0;
}

uva 10951 - Polynomial GCD(欧几里得)的更多相关文章

  1. UVA 10951 - Polynomial GCD(数论)

    UVA 10951 - Polynomial GCD 题目链接 题意:给定两个多项式,求多项式的gcd,要求首项次数为1,多项式中的运算都%n,而且n为素数. 思路:和gcd基本一样,仅仅只是传入的是 ...

  2. UVA 10090 Marbles 扩展欧几里得

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

  3. UVA 10090 - Marbles 拓展欧几里得

    I have some (say, n) marbles (small glass balls) and I am going to buy some boxes to store them. The ...

  4. Lattice Point or Not UVA - 11768(拓展欧几里得)

    原文地址:https://www.cnblogs.com/zyb993963526/p/6783532.html 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB ...

  5. UVa 12169 (枚举+扩展欧几里得) Disgruntled Judge

    题意: 给出四个数T, a, b, x1,按公式生成序列 xi = (a*xi-1 + b) % 10001 (2 ≤ i ≤ 2T) 给出T和奇数项xi,输出偶数项xi 分析: 最简单的办法就是直接 ...

  6. Play with Floor and Ceil UVA - 10673(拓展欧几里得)

    因为我现在还不会用这个...emm...蒟蒻...只看了 从来没用过....所以切一道水题...练一下... 人家讲的很好  https://blog.csdn.net/u012860428/arti ...

  7. GCD欧几里得的拓展算法

    欧几里得算法的拓展主要是用于求解   : 已知整数 a, b,然后我们进行  ax + by == gcd(a , b) 的问题求解 那么如何进行求解呢?和欧几里得算法一样, 我们需要进行递归的方式进 ...

  8. uva 10548 - Find the Right Changes(拓展欧几里得)

    题目链接:uva 10548 - Find the Right Changes 题目大意:给定A,B,C,求x,y,使得xA+yB=C,求有多少种解. 解题思路:拓展欧几里得,保证x,y均大于等于0, ...

  9. UVA.12169 Disgruntled Judge ( 拓展欧几里得 )

    UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...

随机推荐

  1. 百度SiteApp构建网站APP

    现在很多个人网站和企业网站都是传统的Web方式,有没有想过个人/企业网站也能做成APP应用对外宣传呢?专门找人去开发Android和IOS上的APP又太贵,为了赶上移动互联网时髦,我以个人网站试做了一 ...

  2. 【集训笔记】【大数模板】特殊的数 【Catalan数】【HDOJ1133【HDOJ1134【HDOJ1130

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3324 http://blog.csdn.net/xymscau/artic ...

  3. QML在XP等显卡明显不好的情况下 可以参考

    http://doc.qt.io/qt-5/windows-requirements.html

  4. javascript 入门之简单换肤效果

    大家好,我是小强老师,这里简单入门 做一个换肤效果 效果如图所示: 这个案例思路分为两部分: 获取元素对象. var pic1 = document.getElementById('pic1'); v ...

  5. phpMyAdmin 手动输入数据库服务器IP

    1 在phpMyAdmin安装目录下查找config.inc.php,如没有则拷贝config.sample.inc.php为config.inc.php 2 修改config.inc.php,加入$ ...

  6. DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

    有时候我们须要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容.这是由于DataTable.Select()返回的是DataRow ...

  7. PHP - 对象转json - json转数组

    前台js转为json,传给php后台,php后台接收并转为数组. 效果: -- 前台js将对象转为json: var rows = JSON.stringify(rows); 后台php接收转为数组: ...

  8. Smarty模板Windows下写代码 放到CentOS6.5无法正确解析

    如题:报错: Unable to load template file 'System/header.htm' in '/var/www/website/cms/Template/Default/We ...

  9. Qt 多线程与数据库操作需要注意的几点问题

    源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了 ...

  10. 通过xml生成word文档

    Xml生成word总结 使用xml生成word的基本步骤在<使用xslt转化xml数据形成word文档导出.doc>中说明比较清楚了.但是其中的细节并未说到,因此自己折腾了两天总算成功了. ...