同余方程组、拓展中国剩余定理 excrt

news/2025/10/24 12:58:25/文章来源:https://www.cnblogs.com/xihegudi/p/19162972

同余方程组、拓展中国剩余定理 excrt

公式:\(x \equiv b_i(\bmod\ a_i)\) ,即 \((x - b_i) \mid a_i\)

int n; LL ai[maxn], bi[maxn];
inline int mypow(int n, int k, int p) {int r = 1;for (; k; k >>= 1, n = n * n % p)if (k & 1) r = r * n % p;return r;
}
LL exgcd(LL a, LL b, LL &x, LL &y) {if (b == 0) { x = 1, y = 0; return a; }LL gcd = exgcd(b, a % b, x, y), tp = x;x = y, y = tp - a / b * y;return gcd;
}
LL excrt() {LL x, y, k;LL M = bi[1], ans = ai[1];for (int i = 2; i <= n; ++ i) {LL a = M, b = bi[i], c = (ai[i] - ans % b + b) % b;LL gcd = exgcd(a, b, x, y), bg = b / gcd;if (c % gcd != 0) return -1;x = mul(x, c / gcd, bg);ans += x * M;M *= bg;ans = (ans % M + M) % M;}return (ans % M + M) % M;
}
int main() {cin >> n;for (int i = 1; i <= n; ++ i) cin >> bi[i] >> ai[i];cout << excrt() << endl;return 0;
}

求解连续按位异或

\(\mathcal O(1)\) 复杂度计算 \(0\oplus1\oplus\dots\oplus n\)

unsigned xor_n(unsigned n) {unsigned t = n & 3;if (t & 1) return t / 2u ^ 1;return t / 2u ^ n;
}
i64 xor_n(i64 n) {if (n % 4 == 1) return 1;else if (n % 4 == 2) return n + 1;else if (n % 4 == 3) return 0;else return n;
}

高斯消元求解线性方程组

题目大意:输入一个包含 \(N\) 个方程 \(N\) 个未知数的线性方程组,系数与常数均为实数(两位小数)。求解这个方程组。如果存在唯一解,则输出所有 \(N\) 个未知数的解,结果保留两位小数。如果无数解,则输出 \(\tt{}X\) ,如果无解,则输出 \(\tt{}N\)

const int N = 110;
const double eps = 1e-8;
LL n;
double a[N][N];
LL gauss(){LL c, r;for (c = 0, r = 0; c < n; c ++ ){LL t = r;for (int i = r; i < n; i ++ )    //找到绝对值最大的行 if (fabs(a[i][c]) > fabs(a[t][c]))t = i;if (fabs(a[t][c]) < eps) continue;for (int j = c; j < n + 1; j ++ ) swap(a[t][j], a[r][j]);    //将绝对值最大的一行换到最顶端for (int j = n; j >= c; j -- ) a[r][j] /= a[r][c];    //将当前行首位变成 1for (int i = r + 1; i < n; i ++ )    //将下面列消成 0 if (fabs(a[i][c]) > eps)for (int j = n; j >= c; j -- )a[i][j] -= a[r][j] * a[i][c];r ++ ;}if (r < n){for (int i = r; i < n; i ++ )if (fabs(a[i][n]) > eps)return 2;return 1;}for (int i = n - 1; i >= 0; i -- )for (int j = i + 1; j < n; j ++ )a[i][n] -= a[i][j] * a[j][n];return 0;
}
int main(){cin >> n;for (int i = 0; i < n; i ++ )for (int j = 0; j < n + 1; j ++ )cin >> a[i][j];LL t = gauss();if (t == 0){for (int i = 0; i < n; i ++ ){if (fabs(a[i][n]) < eps) a[i][n] = abs(a[i][n]);printf("%.2lf\n", a[i][n]);}}else if (t == 1) cout << "Infinite group solutions\n";else cout << "No solution\n";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:微软2025教育AI报告:教育群体采用AI的比例显著提升

完整教程:微软2025教育AI报告:教育群体采用AI的比例显著提升pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

康拓展开

康拓展开 正向展开普通解法 将一个字典序排列转换成序号。例如:12345->1,12354->2。 int f[20]; void jie_cheng(int n) { // 打出1-n的阶乘表f[0] = f[1] = 1; // 0的阶乘为1for (int i = 2; i <= n; i++)…

求解连续数字的正约数集合——倍数法

求解连续数字的正约数集合——倍数法 使用规律递推优化,时间复杂度为 \(\mathcal{O}(N\log N)\) ,如果不需要详细的输出集合,则直接将 vector 换为普通数组即可(时间更快) 。 #include <bits/stdc++.h> usi…

git回滚代码

回滚上一次提交是指撤销最近一次的git提交操作。在实际使用中,有两种常见的方法可以实现这个操作: 方法一:使用git revert命令回滚 1. 首先,通过命令`git log`查看提交记录,找到要回滚的提交的hash值。 2. 使用命…

Apache POI 在 Linux 无图形界面环境下因字体配置问题导致Excel导出失败的解决方案 - 详解

Apache POI 在 Linux 无图形界面环境下因字体配置问题导致Excel导出失败的解决方案 - 详解2025-10-24 12:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !importan…

扩展欧几里得 exgcd

扩展欧几里得 exgcd 求解形如 \(a\cdot x + b\cdot y = \gcd(a,b)\) 的不定方程的任意一组解。 int exgcd(int a, int b, int &x, int &y) {if (!b) {x = 1, y = 0;return a;}int d = exgcd(b, a % b, y, x);y…

离散对数 bsgs 与 exbsgs

离散对数 bsgs 与 exbsgs 以 \(\mathcal O(\sqrt {P})\) 的复杂度求解 \(a^x \equiv b(\bmod P)\) 。其中标准 \(\tt BSGS\) 算法不能计算 \(a\) 与 \(MOD\) 互质的情况,而 exbsgs 则可以。 namespace BSGS { LL a, …

防爆模乘

防爆模乘 借助浮点数实现 以 \(\mathcal O(1)\) 计算 \(a\cdot b\bmod p\) ,由于不取模,常数比 int128 法小很多。其中 \(1 \le n, k, p \le 10^{18}\) 。 int mul(int a, int b, int m) {int r = a * b - m * (int)…

欧拉筛(线性筛)

欧拉筛(线性筛) 时间复杂度为 \(\mathcal{O}(N\log\log N)\) 。 vector<int> prime; // 这里储存筛出来的全部质数 auto euler_Prime = [&](int n) -> void {vector<int> v(n + 1);for (int i = …

常见数列

常见数列 调和级数 满足调和级数 \(\mathcal O\left( \dfrac{N}{1} +\dfrac{N}{2}+\dfrac{N}{3}+\dots + \dfrac{N}{N} \right)\),可以用 $ \approx N\ln N$ 来拟合,但是会略小,误差量级在 \(10\%\) 左右。本地可以…

20232314 2025-2026-1 《网络与系统攻防技术》实验三实验报告

一.实验内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧。正确使用msf编码器,使用msfvenom生成如jar之类的其他文件 veil,加壳工具 使用C + shellcode编程 (2)通过组合应用各种技术…

【LTDC】LTDC 简介

前言 此篇文章仅作笔记分享,内容来源为:【正点原子】全是干货 | 手把手教你学STM32的LTDC这一节课目的就是了解一下 LTDC 的各种特点,方便后面学习。 LTDC 简介控制器框图信号线 注意不同芯片会有不同的引脚对应。 …

Markdown数学公式 - -一叶知秋

1.1 公式表达显示 代码行内公式 $数学公式$独立公式 $$数学公式$$1.2 上下标显示 代码$x^2$ $x^2$$x_2$ $x_2$1.3 括号显示 代码$\underbrace{yyyy}_{ \text{xxx} }$ $\underbrace{yyyy}_{ \text{xxxx} }$$\begin{case…

分类器案例 - -一叶知秋

模型复杂程度 一、常见衡量指标参数数量(Number of Parameters)模型包含的可学习参数越多,复杂度越高。 例如:线性回归:参数个数 = 特征维数 + 1 深度神经网络:每层权重矩阵大小 层数例子:ResNet-18(约1100万…

最大流

最大流 Dinic 解 使用 \(\tt Dinic\) 算法,理论最坏复杂度为 \(\mathcal O(N^2M)\) ,例题范围:\(N=1200,\ m=5\times 10^3\) 。一般步骤:\(\tt BFS\) 建立分层图,无回溯 \(\tt DFS\) 寻找所有可行的增广路径。封装…

最小割树 Gomory-Hu Tree

最小割树 Gomory-Hu Tree 无向连通图抽象出的一棵树,满足任意两点间的距离是他们的最小割。一共需要跑 \(n\) 轮最小割,总复杂度 \(\mathcal O(N^3M)\) ,预处理最小割树上任意两点的距离 \(\mathcal O(N^2)\) 。 过…

最小割

最小割 基础模型:构筑二分图,左半部 \(n\) 个点代表盈利项目,右半部 \(m\) 个点代表材料成本,收益为盈利之和减去成本之和,求最大收益。 建图:建立源点 \(S\) 向左半部连边,建立汇点 \(T\) 向右半部连边,如果某…

费用流

费用流 给定一个带费用的网络,规定 \((u,v)\) 间的费用为 \(f(u,v) \times w(u,v)\) ,求解该网络中总花费最小的最大流称之为最小费用最大流。总时间复杂度为 \(\mathcal O(NMf)\) ,其中 \(f\) 代表最大流。 struct…

图论常见结论及例题

图论常见结论及例题 常见结论要在有向图上求一个最大点集,使得任意两个点 \((i,j)\) 之间至少存在一条路径(可以是从 \(i\) 到 \(j\) ,也可以反过来,这两种有一个就行),即求解最长路;要求出连通图上的任意一棵生…

查询GPIO状态值(步骤)

查询GPIO状态值(步骤)1.导出GPIO(如果还没有被导出): echo 31 > /sys/class/gpio/export 2.查询是否导出成功 ls -lh /sys/class/gpio/gpio31 如果出现gpio31文件夹,说明gpio导出成功。开机时导出一次即可 3.查…