首页 > 其他分享 >求逆元,欧拉函数,中国剩余定理

求逆元,欧拉函数,中国剩余定理

时间:2022-10-03 23:12:15浏览次数:50  
标签:int 定理 cin exgcd 逆元 main 欧拉

求a/b的mod 等价于a*b逆的mod

求1到n的逆元可以用线性法

1 int ins[N];
2 int main() {
3     int n, p;
4     cin >> n >> p;
5     for (int i = 2; i <= n; ++i) {
6         ins[i] = (p - p / i) * ins[p % i] % p;
7     }
8     return 0;
9 }

求不连续的数组逆元

 1 const int N = 1e6 + 20;
 2 int ins[N];
 3 int a[N];
 4 int s[N];
 5 int t[N];
 6 int ans[N];
 7 int exgcd(int a, int b, int& x, int& y) {
 8     if (b == 0) {
 9         x = 1;
10         y = 0;
11         return a;
12     }
13     int d = exgcd(b, a % b, y, x);
14     y -= (a / b) * x;
15     return d;
16 }
17 int main() {
18     int n, p;
19     cin >> n >> p;
20     for (int i = 1; i <= n; ++i) {
21         cin >> a[i];
22     }
23     s[0] = 1;
24     for (int i = 1; i <= n; ++i) {
25         s[i] = a[i] * s[i - 1]%p;
26     }
27     int x, y;
28     int d=exgcd(s[n], p, x, y);
29     x = (x % p + p) % p;
30     t[n] = x;
31     ans[n] = t[n] * s[n - 1] % p;
32     for (int i = n - 1; i >= 1; --i) {
33         t[i] = t[i + 1] * a[i + 1]%p;
34         ans[i] = t[i] * s[i - 1]%p;
35     }
36     for (int i = 1; i <= n; ++i) {
37         cout << ans[i] << ' ';
38     }
39     return 0;
40 }

欧拉函数表示与x互质的数目

 1 bool b[N];
 2 int prime[N];
 3 int cnt = 0;
 4 int phi[N];
 5 int euler(int n) {
 6     for (int i = 2; i <= n; ++i) {
 7         if (!b[i]) {
 8             prime[++cnt] = i;
 9             phi[i] = i - 1;
10         }
11         for (int j = 1; j <= cnt && prime[j] * i <= n; ++j) {
12             b[prime[j] * i] = true;
13             if (i % prime[j] == 0) {
14                 phi[prime[j] * i] = phi[i] * prime[j];
15                 break;
16             }
17             else {
18                 phi[i * prime[j]] = phi[i] * phi[prime[j]];
19             }
20         }
21     }
22 }

中国剩余定理x==a[i](modm[i]) 一系列同余方程组

解法是不断合并方程组

 1 void merge(int& a, int& b, int c, int d) {
 2     int x, y;
 3     int g = exgcd(b, d, x, y);
 4     d /= g;
 5     x = (x * ((c - a) / g) % d + d) % d;
 6     a += b * x;
 7     b *= d;
 8 }
 9 int main() {
10     int a = 0, b = 1;//开局赋值0与1;
11     int n;
12     cin >> n;
13     for (int i = 1; i <= n; ++i) {
14         int c, d;
15         cin >> c >> d;
16         merge(a, b, c, d);
17     }
18     cout << a << endl;
19     return 0;
20 }

 

标签:int,定理,cin,exgcd,逆元,main,欧拉
From: https://www.cnblogs.com/xuanru/p/16751540.html

相关文章

  • 【概率论】大数定律与中心极限定理 & 参数估计
    本文已参与「新人创作礼」活动,一起开启掘金创作之路。大数定律与中心极限定理一、切比雪夫不等式设随机变量$X$具有期望$E(X)=\mu$,方差$D(X)=\sigma^{2}$,则对于任意正数$......
  • hall定理相关
    匹配:就是在图上找到端点不交的边集。最大匹配:能够覆盖的点集最大。完备匹配:能够覆盖某侧所有点。完备匹配一定是最大匹配,最大匹配不一定是完备匹配。完美匹配:能够覆盖所......
  • 527 中国剩余定理
     #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;typedeflonglongLL;voidexgcd(LLa,LLb,LL&x,LL&y){if(b==0){......
  • 正余玄定理
     最近发现植物大战僵尸中的僵尸的所有动作都是骨骼动画,别的很好玩的游戏中的动画也原来都是用骨骼动画作的,所以想学习一下骨骼动画,才发现要算一个骨骼的移动和变化需要用到......
  • 数论:同余,逆元,求同余方程,翡蜀定理
    同余表示两个数模上另一个数相同;写作ax=b(modp),我们把ax=1(MODP) x称为a在p的逆元;求逆元就是求同余方程求同余方程使用扩展欧几里得法1intexgcd(inta,intb,......
  • 坐标系变换——“旋转矩阵/欧拉角/四元数”
    向量的旋转一共有三种表示方法:旋转矩阵、欧拉角和四元数,接下来我们介绍一下每种旋转方法的原理以及相互转换方式。旋转矩阵坐标变换的作用在一个机器人系统中,每个测量元......
  • TZOJ 7509求1e8以内的素数个数 埃氏筛/欧拉筛
    描述  给定一个正整数N,求出1到N中有多少个素数。  输入  输入一行一个正整数N。对于30%的数据,N<=100对于70%的数据,N<=5000对于100%的数据,N<=10000......
  • 中国剩余定理及其拓展
    \(\text{CRT&exCRT}\)\(\text{CRT}\)中国剩余定理(\(Chinese~Remainder~Theorem,\text{CRT}\))是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有......
  • 坐标系变换——“旋转矩阵/欧拉角/四元数”
    向量的旋转一共有三种表示方法:旋转矩阵、欧拉角和四元数,接下来我们介绍一下每种旋转方法的原理以及相互转换方式。旋转矩阵坐标变换的作用在一个机器人系统中,每个测量元......
  • 524 裴蜀定理
    视频链接:LuoguP4549【模板】裴蜀定理#include<iostream>#include<cmath>usingnamespacestd;intn,a,s;intgcd(inta,intb){returnb==0?a:gcd(b,a%b);......