mo+

CRT&EXCRT 中国剩余定理及其扩展

自作多情 提交于 2021-02-08 06:37:04
前言: 中国剩余定理又名孙子定理。因孙子二字歧义,常以段子形式广泛流传。 中国剩余定理并不是很好理解,我也理解了很多次。 CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法。 求满足n个条件的最小的x。 看起来很麻烦。 先找一个特殊情况:$m_1,m_2,...m_n$两两互质。 这个时候,构造$M=m_1*m_2*...m_n$; 令$M_i=M/m_i$; 所以,构造$n$个数,其中第$i$个数是除$i$之外的其他所有数的倍数,并且第$i$个数$mod m_i =1$ 即:$M_i x = 1 ( mod m_i ) $求出这样一个x,就求出了 这个数。 因为$m$之间两两互质,所以对于$n$个这样的方程,$x$本质上就是$M_i$在$m_i$意义下的乘法逆元。 (不会$exgcd$?左转: EXGCD 扩展欧几里得 ) 因为互质,一定有解的。 用扩展欧几里得算就可以。 同理,构造$n$个数。$b_1,b_2....b_n$ 其中,$b_i=M_i \times x_i$ 那么,因为$b_i = 1 (mod m_i)$,所以$ b_i * a_i = a_i (mod m_i)$ 那么,原题目中的这个x就是:$x=(a_1\times b_1+a_2\times b_2+...+a_n\times b_n) $验证一下,是不是? 总得来说, 对于$mi$互质的情况

[Luogu] 飞扬的小鸟

杀马特。学长 韩版系。学妹 提交于 2020-11-24 19:29:37
https://www.luogu.org/problemnew/show/P1941 Bfs or Dp #include <bits/stdc++.h> using namespace std; const int N = 1e4 + 10 ; #define gc getchar() #define oo 99999999 struct Node_1 { int X, D, U; } P[N]; struct Node_2 { int U, D; } M[N]; struct node { int x, y, step; }; int n, m, k; int Answer = oo, Maxx; queue <node> Q; inline int read() { int x = 0 ; char c = gc; while (c < ' 0 ' || c > ' 9 ' ) c = gc; while (c >= ' 0 ' && c <= ' 9 ' ) x = x * 10 + c - ' 0 ' , c = gc; return x; } int up, down; int vis[N][ 1000 ]; inline void Bfs() { for ( int i = m; i >= 1 ; i -- ) { node now; now.x = 2 ;

java基础练习题

拟墨画扇 提交于 2020-07-27 22:04:08
1变量、运算符和类型转换: 1.1手动输入一个学生的成绩,对这个成绩进行一次加分,加当前成绩的20%,输出加分后成绩 Scanner scan = new Scanner(System.in); System.out.println( "请输入一个数字" ); int num = scan.nextInt(); num += num * 0.2 ; System.out.println(num); View Code 1.2商场举行店庆,抽几折打几折, 先手动输入消费金额,再输入,抽到的折扣,计算出折后价格 Scanner scan = new Scanner(System.in); System.out.println( "请输入消费金额" ); int num = scan.nextInt(); System.out.println( "请输入抽到的折扣" ); int dis = scan.nextInt(); int price = 0; // 累加变量 price = num * dis / 10 ; System.out.println( "折后价格:" + price); View Code 1.3手动输入一个4位数,求各位数字之和 Scanner scan = new Scanner(System.in); System.out.println( "请输入一个4位数