(数论)51NOD 1079 中国剩余定理
第1行:1个数N表示后面输入的质数及模的数量。(2 <= N <= 10)
第2 - N + 1行,每行2个数P和M,中间用空格分隔,P是质数,M是K % P的结果。(2 <= P <= 100, 0 <= K < P)
输出符合条件的最小的K。数据中所有K均小于10^9。
3
2 1
3 2
5 3
23 解:
方法一
#include <stdio.h> typedef struct
{
int p, m;
}str; str s[]; int cmp(const void *a, const void *b)
{
return ((str *)a)->p > ((str *)b)->p ? - : ;
} int main()
{
int n;
while (scanf_s("%d", &n) != EOF)
{
long long mult = ;
int ans;
for (int i = ; i < n; i++)
{
scanf_s("%d%d", &s[i].p, &s[i].m);
mult *= s[i].p;
}
qsort(s, n, sizeof(str), cmp);
for (int i = , flag = ; flag && i * s[].p <= mult; i++)
{
ans = s[].p * i + s[].m;
for (int j = ; ans % s[j].p == s[j].m;j++)
{
if (j == n - )
{
flag = ;
break;
}
}
}
printf("%d\n", ans); }
}
改进法一后的法二:
#include <stdio.h> int main()
{
int n;
while (scanf_s("%d", &n) != EOF)
{
int a, b, c, d;
scanf_s("%d%d", &a, &b);
for (int i = ,j; i < n; i++)
{
scanf_s("%d%d", &c, &d);
for (j = ; (a * j + b) % c != d; j++);
b = a * j + b;
a *= c;
}
printf("%d\n", b);
}
}
法三:
中国剩余定理(https://baike.baidu.com/item/孙子定理/2841597?fromtitle=%E4%B8%AD%E5%9B%BD%E5%89%A9%E4%BD%99%E5%AE%9A%E7%90%86&fromid=11200132&fr=aladdin)+ 拓展欧几里得
(注意中国剩余定理必满足使用拓展欧几里得求逆元的条件,即n个不同质数,其中n-1个的乘积必与剩下的1个互质)
#include <stdio.h> int inv[], pm[]; void Ex_gcd(int a, int b, int *x, int *y); int main()
{
int t;
while (scanf_s("%d", &t) != EOF)
{
long long M = , ans = ;
for (int i = ; i < t; i++)
{
scanf_s("%d%d", &pm[i], &pm[i + ]);
M *= pm[i];
}
for (int i = , temp; i < t; i++)
{
Ex_gcd(M / pm[i], pm[i], &inv[i], &temp);
inv[i] = (inv[i] + pm[i]) % pm[i];
ans = (ans + M / pm[i] * inv[i] * pm[i + ]) % M;
}
printf("%d\n", ans);
}
} void Ex_gcd(int a, int b, int *x, int *y)
{
if (b == )
{
*x = ;
*y = ;
return;
}
Ex_gcd(b, a%b, x, y); //或者可以这么写
int t = *y; //ex_gcd(b, a%b, y, x);
*y = *x - a / b * (*y); //*y = *y - (a / b)**x;
*x = t; //return;
return;
}
(数论)51NOD 1079 中国剩余定理的更多相关文章
- acm数论之旅--中国剩余定理
ACM数论之旅9---中国剩余定理(CRT)(壮哉我大中华╰(*°▽°*)╯) 中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 ...
- 51NOD——T 1079 中国剩余定理
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1079 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难 ...
- 51 nod 1079 中国剩余定理
1079 中国剩余定理 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % ...
- [TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)
题目:http://community.topcoder.com/stat?c=problem_statement&pm=12083 这道题还是挺耐想的(至少对我来说是这样).开始时我只会60 ...
- 数论E - Biorhythms(中国剩余定理,一水)
E - Biorhythms Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Subm ...
- hihocode 九十七周 中国剩余定理
题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...
- 《孙子算经》之"物不知数"题:中国剩余定理
1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数. 如果 m ...
- POJ 1006 中国剩余定理
#include <cstdio> int main() { // freopen("in.txt","r",stdin); ; while(sca ...
- poj1006中国剩余定理
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 103506 Accepted: 31995 Des ...
随机推荐
- HDU 4465 递推与double的精确性
题目大意不多说了 这里用dp[i][0] 代表取完第一个盒子后第二个盒子剩 i 个的概率,对应期望就是dp[i][0] *i dp[i][1] 就代表取完第二个盒子后第一个盒子剩 i 个的概率 dp[ ...
- Linux下汇编语言学习笔记3 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- hosts.allow和hosts.deny文件
之前想通过外部主机访问自己主机上的VMWare虚拟机,使用了VMWare的NAT端口映射,经过一番尝试,算是成功了,总结一下. VMWare NAT端口映射就可以将虚拟机上的服务映射成自己主机上的端口 ...
- ZOJ3956 ZJU2017校赛(dp)
题意:给出n对(h,c) 记 sumh为选出的h的总和 sumc为选出的c的总和 你可以从中选出任意多对(可以不选) 使得 sumh^2-sumh*sumc-sumc^2 最大 输出最大值 输入 ...
- ETL全量多表同步简述
ETL全量多表同步简述 1. 实现需求 当原数据库的表有新增.更新.删除操作时,将改动数据同步到目标库对应的数据表. 2. 设计思路 设计总体流程图如下: 1.获取同步表名如下图: 2.循环迁移数据如 ...
- Array.prototype.map()方法详解
Array.prototype.map() 1 语法 const new_array = arr.map(callback[, thisArg]) 2 简单栗子 let arr = [1, 5, 10 ...
- OJ-online judegement
OJ-online judegement https://baike.baidu.com/item/OJ/8129019?fr=aladdin
- STL非变易算法
非变易算法:原则上不会变更操作数据的算法. [1] for_each:逐个容器元素,原型for_each(InputIter first, InputIter last, Function f) ...
- JS 获取form表单的所有数据
在HTML中用js获取通过GET.POST方法(就是在网址后加?a=b&c=d之类)传过来的表单值. 针对大家常用的获取表单方式,很多时候都是在重复的写一些代码,今天给大家贴出来的代码可以作为 ...
- OpenFileDiag 使用
MSDN模版 Stream myStream =null; OpenFileDialog openFileDialog1 =newOpenFileDialog(); openFileDialog1.I ...