一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K。例如,K % 2 = 1, K % 3 = 2, K % 5 = 3。符合条件的最小的K = 23。

 
Input
第1行:1个数N表示后面输入的质数及模的数量。(2 <= N <= 10)
第2 - N + 1行,每行2个数P和M,中间用空格分隔,P是质数,M是K % P的结果。(2 <= P <= 100, 0 <= K < P)
Output
输出符合条件的最小的K。数据中所有K均小于10^9。
Input示例
3
2 1
3 2
5 3
Output示例
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;
}

最新文章

  1. ultraiso制作大于4GB的镜像的启动盘
  2. 电脑装的是office2013,右键新建却是2007,或者右键新建菜单中没有excel2013问题解决办法。
  3. GCD基础知识总结
  4. 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]
  5. 2-sat 输出任意一组可行解&amp;拓扑排序+缩点 poj3683
  6. WKWebView新特性及JS交互
  7. [原创]如何写好SqlHelper
  8. JS特效——文字打印机
  9. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP
  10. 简单搭建SpringMVC框架详解
  11. 整理CSS选择符
  12. echarts数据区域缩放(鼠标滚轮、滚动条、拉选框)
  13. kali系统固化到固态硬盘小记(赠送给广大折腾党的笔记)
  14. [转].NET 性能测试工具 -- 事件跟踪器(ETW)
  15. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) ——3.Programming assignments : Residual Networks
  16. 【springboot】之 解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter
  17. spark基础知识介绍2
  18. 基础知识之nginx重写规则
  19. Eclipse技术: 项目文件中过滤.o文件
  20. OpenStack部署博客推荐

热门文章

  1. js变量类型详解
  2. CF-697B Barnicle与691C Exponential notation
  3. springData Jpa 快速入门
  4. 主席树初探--BZOJ2588: Spoj 10628. Count on a tree
  5. JVM 总结
  6. spring面试相关点
  7. 003 rip
  8. Linux 下添加 Eclipse 桌面图标
  9. Linux---有关dig命令的有用脚本
  10. Netty In Action中文版 - 第四章:Transports(传输)