互质

[转帖]RSA 的原理与实现

我的梦境 提交于 2020-04-07 07:21:13
HOME RSA 的原理与实现 https://cjting.me/2020/03/13/rsa/ 1976 年以前,所有的加密都是如下方式: A 使用某种规则对信息进行处理 B 使用同样的规则对处理过的信息进行复原 这个方式很好理解,不论是非常简单的 ROT13 还是目前广泛使用的 AES,都是这种对称加密方式。 但是这种方式有一个巨大的缺点,那就是 A 需要将对信息进行处理的规则(也就是秘钥)告诉给 B。怎样安全地传输秘钥就成了一个非常棘手的问题。 那么存不存在一种方式,加密和解密使用不同的秘钥,彻底规避掉传输秘钥的问题? 答案是存在的,感谢数学家和计算机科学家,RSA 就是这样一种非对称加密方式,也就是: 使用算法可以生成两把钥匙 A 和 B 使用 A 加密的信息,使用 B 可以解开 使用 B 加密的信息,使用 A 可以解开 日常使用中,我们把一把作为公钥,公开发布。一把作为私钥,自己保留。这样,任何人都可以使用我们的公钥加密信息发给我们,我们则可以使用自己的私钥解开。 只要把私钥保存好,这个通信系统就非常安全。 数学原理 现在我们来看看这样一个神奇的系统背后的数学原理。数学作为人类智慧皇冠上最灿烂的明珠,永远是那么的冷静迷人。这里我只陈述内容,具体的证明如果感兴趣可以 Google。 首先我们梳理几个概念。 互质 如果两个正整数,除了 1 以外没有其他的公因数,则他们互质

欧拉函数

走远了吗. 提交于 2020-04-04 03:54:08
一、质因数与分解质因数 ? 如果 一个质数是某个数的约数,那么就说这个质数是这个数的 质因数 。 把一个合数用质因数相乘的形式表示出来,叫做分解质因数。 例:把30分解质因数。 解:30=2×3×5。 其中2、3、5叫做30的质因数。 又如12=2×2×3=22×3,2、3都叫做12的质因数。 二、 公约数只有1的两个数,叫做 互质数 (欧拉函数是小于n的正整数中与n互质的数的数目) 列:1到8中 ,与8互质的数有:1、3、 5、 7 1到12中,与12互质的数有: 1、 5、 7、 11、 看了一下午的欧拉函数,感觉都快看崩溃了,还好找到一个看得懂的博客。。。。 https://www.cnblogs.com/linyujun/p/5194170.html 欧拉函数,用φ(n)表示 欧拉函数是求小于等于n的数中与n互质的数的数 可以先在1到n-1中找到与n不互质的数,然后把他们减掉 比如φ(12) 把12质因数分解,12=2*2*3,其实就是得到了2和3两个质因数 然后把2的倍数和3的倍数都删掉 2的倍数:2,4,6,8,10,12 3的倍数:3,6,9,12 本来想直接用12 - 12/2 - 12/3 但是6和12重复减了 所以还要把即是2的倍数又是3的倍数的数加回来 (>﹏<) 所以这样写12 - 12/2 - 12/3 + 12/(2*3) 这叫什么,这叫容斥啊

关于取模运算 和 求逆元

☆樱花仙子☆ 提交于 2020-02-28 11:22:10
先分享2个式子 当模式左边有除法: 今天了解了2个,感觉这2个很棒~,尤其第一个: 1、$\dfrac {a} {b}\% m=\dfrac {a \%\left( b\cdot m\right) } {b}$ 要求:a能整除b。(不知道用了什么奇技淫巧。。。) 2、$\dfrac {a} {b}\% m=(a\cdot b^{m-2} )\%m$ 要求:gcd(b , m)== 1 且 m为素数 且 a能整除b (利用费小马定理) b在模m 下存在逆元的条件: b与m互质( 即gcd(b,m) == 1 )。 求逆元又分三种方法,拓展欧几里得法,欧拉函数法,费小马法。从一般到特殊吧: 1、拓展欧几里得法:    要求:a与m互质。 代码: void ext_gcd(int a, int b, int &d, int &x, int &y) { if(!b) { d = a; x = 1; y = 0; } else { ext_gcd(b, a%b, d, y, x); y -= x*(a/b); } } int mod_inverse(int a, int m) { int x, y,d; ext_gcd(a, m, d, x, y); return (m + x % m) % m; } 2、欧拉函数法    要求:b与m互质。 令$\phi \left( m\right)

互质与欧拉函数

落爺英雄遲暮 提交于 2020-02-26 14:50:06
目录 目录地址 上一篇 下一篇 互质 我们定义两个正整数 \(a,b\) ,若 \(a,b\) 的最大公因数为 \(1\) 对这类特殊的数对,我们称呼为互质 即 \(a,b\) 互质 \(\Leftrightarrow gcd(a,b)=1\) 简化剩余类 考虑 \(n\) 的 \(m\) 个剩余类,其中对于所有与 \(n\) 互质的剩余类称为简化剩余类 可以证得,简化剩余类的数量为 \(\displaystyle \sum_{i=1}^n[gcd(i,n)=1]\) 我们从每个剩余类中抽出一个数,分别命名为 \(a_{1\cdots m}\) 易得到 \(\forall 1\leq i\leq m,gcd(a_i,n)=1\) 欧拉函数 欧拉函数 \(\boldsymbol \varphi(n)\) 定义为:小于等于 \(n\) 的正整数中,与 \(n\) 互质的数的个数 我们引入符号 \([condition]\) 为一个值:当 \(condition\) 为真时,值为 \(1\) ;否则为 \(0\) 因此可以这么写: \(\displaystyle \boldsymbol\varphi(n)=\sum_{i=1}^n[gcd(i,n)=1]\) 欧拉函数的性质 首先,根据定义,不难得出 \(\boldsymbol\varphi(1)=1\) 而根据质数的定义,还容易得出 \

模线性同余方程组求解

喜你入骨 提交于 2020-02-16 16:22:42
问题:模线性同余方程组:   x = a1 ( mod n1 )   x = a2 ( mod n2 )     ....   x = ak ( mod nk ) 给定 A ( a1, a2 , ... , ak ) , N ( n1, n2, ..., nk ) 求 X 。 通常分为两种   一, ( Ni, Nj ) 之间两两互质   二, ( Ni, Nj ) 之间不都互质 一 ( Ni, Nj ) 之间两两互质   定理( 见算法导论 P874 ):   如果 n1, n2 , ... , nk 两两互质, n = n1*n2*..*nk ,则对任意整数 a1,a2,a3..,ak , 方程组     x = ai ( mod ni )   关于未知量 x 对 模n 有唯一解 从输入 ( a1, a2, ... , ak ) 计算出 a :          定义     定义 可以得到:        代码模板   a = a[i] ( mod n[i] ) ( i = 0. 1. 2. .. k ) { n[i] 之间两两互质 } View Code #include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> using namespace

结论总结

自闭症网瘾萝莉.ら 提交于 2020-02-03 15:58:21
题单 \(a\) 、 \(b\) 两个回文串的最小循环节一样时, \(a+b\) 是回文串。 P3449 组合计数dp,我们应该考虑的是能用的大致特征,比如有多少行多少列,而不应该过多的考虑特别具体的状态 P3158 树的所有直径具有相同的中点 P3304 如何查看一个点是否在一条路径上呢?满足该点到路径两端点的距离和等于两端点的距离,距离用 \(lca\) 和深度就可以了 P3398 期望一定要小心谨慎分析,不要直觉瞎搞,设计好状态,转移。 分清楚 : 事件,概率,结果,期望。 抓住 \(E(x+y)=E(x)+E(y)\) 还有: \(E(x)=\sum {p_i \times x_i}\) by Miracle P4550 一个小套路:有位运算的线段树,按位开线段树 P5312 向量->几维坐标的前缀和 题目咕了 dfs序在子树上的性质:连续区间 CF1110F 因此,对于一个已知的 \(n\) ,有 \(n ^{n-1}\) 种不同的有根树。 P4981 注意数据范围对于空间(开数组)的提示 P3147 \(d(ij)=\sum x∣iy∣j[gcd(x,y)=1]\) 1.同余的一个性质 \(a \equiv b \space (mod \space c)\) 此时 \(b\) , \(c\) 不互质,因数为 \(x\) 则可以推出 \(\frac{a}{x}

[学习笔记]中国剩余定理

て烟熏妆下的殇ゞ 提交于 2020-01-30 10:32:02
中国剩余定理 以前公式用的是图片导致排版丑陋,今天复习顺便重写了 描述 有同余方程组: \[ \left\{ \begin{matrix} x \equiv a_1 (mod \ m_1) \\ x \equiv a_2 (mod \ m_2) \\ ... \\ x \equiv a_k (mod \ m_k) \end{matrix} \right. \\ 其中m_i两两互质 \] 令 \(M = \prod_{i = 1}^{k} m_i\) ,则方程组的一个解为 \(x = \sum_{i = 1}^{k} a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i})^{-1}\) ,其中 \((\frac{M}{m_i})^{-1}\) 表示 \(\frac{M}{m_i}\) 模 \(m_i\) 意义下的逆元 如果求最小非负整数解,再模 \(M\) 即可 证明 对于每一个 \(x \equiv a_i (mod \ m_i)\) ,记解为 \(x_i\) ,则有 \(x_i + m_i \cdot y = a_i\) ,两边除以 \(a_i\) ,得: \[ \frac{x_i}{a_i} + \frac{m_i \cdot y}{a_i} = 1 \tag{1} \] 由 \(m_i\) 两两互质得 \(\frac{M}{m_i}\) 与

BSGS与扩展BSGS

天大地大妈咪最大 提交于 2020-01-08 01:41:58
\(BSGS\) \(BSGS(Baby Step Giant Step)\) ,中文名大步小步算法,也有拔山盖世、北上广深、阿姆斯特朗算法等别称 解决问题为求 \(A^x\equiv B(mod C)\) 的最小整数解,其中 \(A C\) 互质。 首先因为 \(\phi(C)\) 一个循环节且 \(\phi(C)<C\) ,所以答案不会超过 \(C\) 使得 \(x=i\times m-j\) ,其中 \(m=\sqrt C\) 这样原式变为 \(A^{im-j}\equiv B(mod C)\) 移项得到 \(A^{im}\equiv BA^j(mod C)\) 大小步中的"小步"就是从 \(0\) 到 \(m-1\) 枚举 \(j\) (相当于个位),将 \((BA^j,j)(mod C)\) 记录进哈希表 然后“大步”就是枚举 \(i\) ,相当于枚举 \(m\) 进制的第 \(2\) 位然后对于每一个 \(A^{im}(mod C)\) 进入哈希表查找是否存在,若存在一定是最小值直接返回即可。 因为c++整除的性质,一定要确保枚举的i超过C,否则会遗漏答案 注意答案只会在 \(C\) 以下,如果超过 \(C\) 还没找到就可以返回 \(-1\) 了 #include<cstdio> #include<iostream> #include<cstring>

LJJ爱数数(莫比乌斯反演)

元气小坏坏 提交于 2020-01-01 12:29:29
题意: 给定 \(n\) ,求满足 \(\frac{1}{a}+\frac{1}{b}=\frac{1}{c}\) ,且 \(a,b,c\) 互质的三元组 \((a,b,c)\) 数目。 \((a,b,c\leq n)\) \(n\leq10^{12}\) 首先,使用类似 P5253 丢番图 的方法,两边乘以 \(abc\) 。 \(ac+bc=ab\) \(ab-ac-bc+c^2=c^2\) \((a-c)(b-c)=c^2\) 设 \(a-c=x\) , \(b-c=y\) ,则 \(xy=c^2\) 若 \(a,b,c\) 不互质,则存在 \(g,(g>1)\) 满足 \(g|(x+c)\) 且 \(g|(y+c)\) 且 \(g|c\) 。 那么 \(g|x\) 且 \(g|y\) 且 \(g|c\) 。即满足 \(x,y,c\) 互质即可 若 \(x,y,c\) 不互质,则存在 \(g,(g>1)\) 满足 \(x=gx'\) 且 \(y=gy'\) 且 \(g|c\) 。 即 \(x'y'g^2=c^2\) , \(g^2 | c^2\) , \(g|c\) 。 就是说,只要满足 \(g|x\) 且 \(g|y\) ,就能满足 \(g|c\) 。 所以,只要 \(gcd(x,y)=1\) 即可。 此外,还要满足 \(max(x,y)+c\leq n\) 。 不妨设 \

AcWing 876 快速幂求逆元

好久不见. 提交于 2019-12-27 03:19:00
题目描述: 给定n组ai,pi,其中pi是质数,求ai模pi的乘法逆元,若逆元不存在则输出impossible。 注意 :请返回在0∼p−1之间的逆元。 乘法逆元的定义 输入格式 第一行包含整数n。接下来n行,每行包含一个数组ai,pi,数据保证pi是质数。 输出格式 输出共n行,每组数据输出一个结果,每个结果占一行。若ai模pi的乘法逆元存在,则输出一个整数,表示逆元,否则输出impossible。 数据范围 1≤n≤10^5,1≤ai,pi≤2∗10^9 输入样例: 3 4 3 8 5 6 3 输出样例: 1 2 impossible 分析: 首先引入欧拉定理: 欧拉定理就是说对于两个互质的数a和n,a^phi(n)与1对模n同余。下面简单的证明下欧拉定理:设1到n中与n互质的数的集合为S = {p1,p2,...,pk}。设集合R = {a*p1%n,a*p2%n,...,a*pk%n},假设R中存在两项a * pi ≡ a * pj (mod n),则a * (pi - pj)≡ 0 (mod n),又a与n互质,所以pi ≡ pj (mod n),又pi和pj都是S中两个与n互质的整数,故不可能模n同余,故R中不存在两项相同的数,也就是说R中的数彼此互异且都与n互质,又因为mod n后都小于n,而1到n中与n互质的数全在S中,故S = R。故R中各项相乘得a^phi(n)