2793:孙子问题
总时间限制: 15000ms 内存限制: 65536kB
描述
我国古代《孙子算经》中,记有如下算题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”并给出得数:“答曰:23。”

为解决这个问题民间流传了如下歌诀:“三人同行七十稀,五树梅花廿一枝,七子团员正半月,除百零五便得知。”

把上面的问题说得明白一点就是:有一个正整数N,除以3的余数是2,除以5的余数是3,除以7的余数是2,要求这个数。

民间给出的解法是:把N除以3的余数乘以70,把N除以5的余数乘以21,把N除以7的余数乘以15,把这三个结果加起来,最后把得到的结果除以105得到的就是答案。

其实在民间的解法中不除以105得到的也是一个符合题意的答案,而且民间的解法对于已知“除以3的余数,除以5的余数和除以7的余数” 的问题都能得到一个符合要求的答案。比如对于上面的问题,得到的结果是2 * 70 + 3 * 21 + 2 * 15 = 233,这个结果也能满足除以3的余数是2,除以5的余数是3,除以7的余数是2。如果已知的问题是“除以3的余数是1,除以5的余数是4,除以7的余数是4”,民间解法得到的结果1 * 70 + 4 * 21 + 4 * 15 = 214,这个结果也满足除以3的余数是1,除以5的余数是4,除以7的余数是4。

把这个问题推广到更普遍的情况:对于给定的正整数a1, a2, … an,是否存在正整数b1, b2, … bn,使得对于任意的一个正整数N,如果用N除以a1的余数是p1,用N除以a2的余数是p2……用N除以an的余数是pn,那么M = p1 * b1 + p2 * b2 + … + pn * bn能满足M除以a1的余数也是p1,M除以a2的余数也是p2……M除以an的余数也是pn。
输入
输入包括多组测试数据,每组数据包括一行。在每组数据中,首先给出ai的个数n (1 <= n <= 10),然后给出n个不大于50的正整数a1, a2, … an。最后一组测试数据中n = 0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,如果存在正整数b1, b2, … bn满足题意,则输出这n个正整数(数的长度不要超过50位)如果有多组答案,输出任意一组即可,相邻的正整数之间用一个空格隔开;否则,输出“NO”。
样例输入
3 3 5 7
0
样例输出
70 21 15
提示
这题使用了special judge,使用special judge一般不判断Presentation Error,因此请大家注意输出格式。

问题链接: Bailian2793 孙子问题
问题描述:(略)
问题分析
    使用扩展欧几里德算法实现中国剩余定理。
程序说明
    变量类型为int会WA,需要是long类型。
参考链接:(略)
题记:(略)。

AC的C语言程序如下:

/* Bailian2793 孙子问题 */#include <stdio.h>#define N 10
long a[N], p[N], q[N + 1], gc[N], gd[N], k[N], res[N];// 递归法实现扩展欧几里德算法
long exgcd(long a, long b, long  *x, long *y)
{long d;if(b == 0) {*x = 1;*y = 0;return a;}d = exgcd(b, a % b, x, y);long t = *x;*x = *y;*y = t - a / b * *y;return d;
}int main(void)
{long lcm, rem, gcd, x, y, g, r;int n, i;while(scanf("%d", &n) != EOF && n) {for(i = 0; i < n; i++)scanf("%ld", &a[i]);lcm = a[0];for(i = 0; i < n; i++)lcm = lcm / exgcd(lcm, a[i], &x, &y) * a[i];for(i = 0; i < n; i++)p[i] = q[i] = lcm / a[i];q[n] = lcm;g = p[n - 1];gc[n - 1] = lcm;for(i = n - 1; i > 0; i--) {gc[i - 1] = exgcd(g, p[i], &x, &y);g = gc[i - 1];}for(i = 0; i < n; i++)gd[i] = gc[i];rem = 1;for(i = 0; i < n; i++) {gcd = exgcd(p[i], gc[i], &x, &y);q[i] /= gcd;gd[i] /= gcd;r = rem;while(r < 0)r += lcm;r /= gcd;r %= gd[i];exgcd(q[i], gd[i], &x, &y);k[i] = r * x;while(k[i]<=0)k[i] += a[i];res[i] = p[i];res[i] *= k[i];rem -= res[i];}for(i =0 ; i < n; i++)printf("%ld ", res[i]);printf("\n");}return 0;
}

Bailian2793 孙子问题【扩展欧几里德算法+中国剩余定理】相关推荐

  1. poj 2115 C Looooops(扩展欧几里德算法)

    题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束. 比如:当k=4时,存储的数 i 在0-15之间循环.(本题默认为无符号) 若在有限次内结束,则输出 ...

  2. 欧几里德与扩展欧几里德算法——密码学笔记(五)

    一.欧几里德算法 又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a% ...

  3. 欧几里德算法与扩展欧几里德算法

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...

  4. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  5. 欧几里德算法 扩展欧几里德算法 求解丢番图方程

    欧几里德算法 即辗转相除法,计算整数A, B最大公约数. 基本算法:设 a = kb + r,其中a,b,k,r都是整数,则 gcd(a,b) = gcd(b,r),即 gcd(a,b) = gcd( ...

  6. 扩展欧几里德算法解决问题A:Jugs

    Jugs codeup的Jugs题目需要使用扩展欧几里德算法解决: Zoj的jugs题目需要使用BFS算法解决: codeup的Jugs题目需要使用扩展欧几里德算法解决: 题目链接:http://co ...

  7. 青蛙的约会(POJ 1061 扩展欧几里德算法)

    POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...

  8. 裴蜀定理与扩展欧几里德算法

    裴蜀定理又称贝祖定理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍. 裴蜀定理的推广:方程ax+by+cz+-+nm=f(其中a,b,c-n,f为整数)有解的 ...

  9. 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)

    又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...

最新文章

  1. 下面属于java的object_在JAVA中,下列哪些是Object类的方法()
  2. OpenCvSharp手绘ROI区域+模板匹配+霍夫变换检测圆的边界
  3. LaTeX 使用 bib 管理参考文献时,引用网络资源 URL 导致排版难看的问题
  4. 全志 添加PWM7参数
  5. 在Linux上按大小列出文件和目录
  6. Java实现xml与map互转
  7. 台式电脑调整屏幕亮度
  8. java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...
  9. 【MB051】炫酷BAT代码 ① 装神系列→可参考
  10. 项目实施方案指导性文件
  11. 组建局域网_局域网组建常用的网线种类解读
  12. Docker深入浅出系列 | 容器初体验
  13. vue项目中使用@babel/plugin-proposal-optional-chaining的?.语法,防止字段没有报错
  14. latex自动编译 (ubuntu/win)
  15. ajax执行先后顺序
  16. 多传感器融合标定方法汇总
  17. Python发邮件报错 554, b‘HL:ITC 0,163
  18. 电子通讯秤对接配置详解!
  19. 管理信息系统案例分析_「案例」MES系统助力华联电子仓库工作人员效率提高30%...
  20. 浅谈一下如何避免用户多次点击造成的多次请求

热门文章

  1. IT人士十大不良饮食习惯及改进建议
  2. matlab连接mysql数据库_matlab连接数据库的问题
  3. MySQL的sql_mode解析设置
  4. HIve内置函数(functions)使用和解析
  5. yield用法详解——最简单,最清晰的解释
  6. 鸿蒙系统更新法定年龄,超25000位开发者参赛,华为首届鸿蒙开发者创新大赛创意满满...
  7. 小学计算机小蘑菇教案,森林里的小蘑菇教案.doc
  8. 580显卡驱动_越贵的显卡越好吗?顶级AMD RX580功耗超过200W,RMB只买了外观?
  9. layui横向时间线_操盘线:线上阴线满仓,线下阳线清仓
  10. git 查看自己的用户名和邮箱