poj 2891 Strange Way to Express Integers 2012-09-05
http://poj.org/problem?id=2891
解线性模方程组。
比较坑爹,数据比较大,很容易溢出。
1 Program poj2891; 2 3 var m:int64; 4 5 a,r:array[1..30000000]of int64; 6 7 ans,x,y,lcm:int64; 8 9 10 Procedure init; 11 12 var i,j:longint; 13 14 begin 15 16 m:=0; 17 18 readln(m); 19 20 for i:=1 to m do 21 22 readln(a[i],r[i]); 23 24 end; 25 26 27 Function extended_gcd(a,b:int64;var x,y:int64):int64; 28 29 var k:int64; 30 31 begin 32 33 if b=0 then begin 34 35 extended_gcd:=a; 36 37 x:=1;y:=0; 38 39 end 40 41 else begin 42 43 extended_gcd:=extended_gcd(b,a mod b,x,y); 44 45 k:=x;x:=y;y:=k-(a div b)*y; 46 47 end; 48 49 end; 50 51 52 Procedure print(ans:int64); 53 54 begin 55 56 writeln(ans); 57 58 end; 59 60 61 Procedure main; 62 63 var i:longint; 64 65 d,ai,ri,k:int64; 66 67 begin 68 69 ans:=0; 70 71 ai:=a[1];ri:=r[1]; 72 73 for i:=2 to m do 74 75 begin 76 77 d:=extended_gcd(ai,a[i],x,y); 78 79 lcm:=a[i]*ai div d; 80 81 if (r[i]-ri)mod d<>0 then begin print(-1);exit;end; 82 83 k:=((x mod a[i])*(r[i]-ri) mod a[i])div d; //这个取余很重要,没有的话就会溢出,在这wa了好久 84 85 ri:=((ri+ai*k) mod lcm+lcm)mod lcm; 86 87 ai:=lcm; 88 89 end; 90 91 print(ri); 92 93 end; 94 95 96 Begin 97 98 assign(input,'input.in');reset(input); 99 100 assign(output,'output.out');rewrite(output); 101 102 while not(eof) do 103 104 begin 105 106 init; 107 108 if m<>0 then main; 109 110 end; 111 112 close(Input);close(Output); 113 114 end.
转载于:https://www.cnblogs.com/yesphet/p/5236495.html
poj 2891 Strange Way to Express Integers 2012-09-05相关推荐
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
- poj 2891 Strange Way to Express Integers
题目:http://poj.org/problem?id=2891 思路:扩展欧几里得 #include <cstdio> #include <cstring> #includ ...
- POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
题目链接:http://poj.org/problem?id=2891 题目大意: 很好的一道题,解同余式组: x = r1 (mod m1) x = r2 (mod m2) -- x = rp (m ...
- [POJ 2891] Strange Way to Express Integers
Description 给定 k 个同余方程组,求出满足条件的最小正整数 x,或者无解输出 -1. Solution 注意到模数不一定互质,所以中国剩余定理不能用 嗯有请扩展中国剩余定理 定理证明就不 ...
- 【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)...
题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧 ...
- 【poj2891】 Strange Way to Express Integers
poj.org/problem?id=2891 (题目链接) 题意:求解线性同余方程组,不保证模数一定两两互质. Solotion 用exgcd将俩个同余方程合并成一个 如合并n%M=R,n%m=r ...
- [POJ2891] Strange Way to Express Integers
题目描述 FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,-,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,-,ak,那么整数m可由 ...
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...
- poj-2891(Strange Way to Express Integers)--中国剩余定理扩展欧几里得
题意:找到一个m,使得m%ai=ri,并且这个m最小 m = a1*x + r1; m = a2*y + r2; 可得:a1*x - a2*y = r2 - r1 可得:a1*x ≡ r2-r1(mo ...
最新文章
- R语言使用ggplot2包的快速可视化函数qplot绘制分组直方图(分组颜色设置)实战
- subplot subplots绘制子图
- aws-ec2-双网卡问题
- js点击取消按钮关闭当前弹框_UI设计中“取消按钮”的分析详解
- 【ubuntu】ubuntu下用make编译程序报错找不到openssl/conf.h
- 前端学习(2981):Json格式转换
- 科普 | “开放知识”的定义
- (转)分布式文件存储FastDFS(二)FastDFS安装
- Android实现小圆点显示未读功能
- android系统性能优化(13)---Android性能优化典范 - 第1季
- 用jquery在必填表单字段前加红星总结
- ef6 oracle 存储过程,Entity Framework入门教程(14)---DbFirst下的存储过程
- 2018青岛ICPC ZOJ 4061: Magic Multiplication(模拟)
- python决策树画图_利用python用iris做一个决策树的可视化更好的理解机器学习!...
- 胜为蓝牙适配器驱动_udc 324b蓝牙驱动下载-胜为udc 324b蓝牙适配器驱动(win7/win10)v6.5.1.2700 官方版 - 极光下载站...
- bias tee电路设计-电容电感值
- 计算机四个发展应用范围,计算机的四个发展阶段
- ansys转子动力学分析
- 说说我对[lambda x: x*i for i in range(4)]的理解
- Android常用库和插件避免重复造轮子(持续更新)