'commit'
This commit is contained in:
Binary file not shown.
@@ -19,9 +19,9 @@ void solve() {
|
|||||||
int a, p;
|
int a, p;
|
||||||
cin >> a >> p;
|
cin >> a >> p;
|
||||||
int phi = p - 1;
|
int phi = p - 1;
|
||||||
for (int i = 2; i * i <= phi; i++) {
|
for (int k = 2; k * k <= phi; k++) {
|
||||||
if (phi % i == 0) {
|
if (phi % k == 0) {
|
||||||
if (qmi(a, i, p) == 1 || qmi(a, phi / i, p) == 1) {
|
if (qmi(a, k, p) == 1 || qmi(a, phi / k, p) == 1) {
|
||||||
puts("No");
|
puts("No");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
### 一、基础知识
|
### 一、基础知识1
|
||||||
|
|
||||||
|
|
||||||
$$ a^x \equiv 1 \pmod{p} $$
|
$$ a^x \equiv 1 \pmod{p} $$
|
||||||
@@ -11,22 +11,14 @@ $$ a^x \equiv 1 \pmod{p} $$
|
|||||||
|
|
||||||
换句话说,$ a^x - 1 $ 能被 $ p $ 整除。
|
换句话说,$ a^x - 1 $ 能被 $ p $ 整除。
|
||||||
|
|
||||||
在数论中,这个表达式经常出现在以下场景中:
|
|
||||||
|
|
||||||
1. **阶($Order$)**:当 $ a $ 和 $ p $ 互质时,满足这个等式的最小正整数 $ x $ 称为 $ a $ 模 $ p $ 的阶。
|
|
||||||
2. **费马小定理**:当 $ p $ 是质数且 $ a $ 不被 $ p $ 整除时,有 $ a^{p-1} \equiv 1 \pmod{p} $
|
|
||||||
3. **原根**:如果 $ a $ 的阶等于 $ p-1 $,则 $ a $ 称为模 $ p $ 的一个原根
|
|
||||||
|
|
||||||
这个表达式在密码学(如$RSA$算法)、数论和计算机科学中都有重要应用。
|
|
||||||
|
|
||||||
|
|
||||||
### 二、本题求解
|
|
||||||
|
### 二、基础知识2
|
||||||
|
|
||||||
显然:$a^{xy}=(a^x) ^y$
|
显然:$a^{xy}=(a^x) ^y$
|
||||||
|
|
||||||
|
比如:$2^{6}={2^2}^3$
|
||||||
|
|
||||||
$2^{6}={2^2}^3$
|
|
||||||
|
|
||||||
假设 $a ^x ≡1\ (\ mod\ p)$,则有 $a^{xy} =(a ^x) ^y ≡1 ^y ≡1\ (mod\ p)$。
|
假设 $a ^x ≡1\ (\ mod\ p)$,则有 $a^{xy} =(a ^x) ^y ≡1 ^y ≡1\ (mod\ p)$。
|
||||||
> 上面这句话展示了模运算中指数运算的一个重要性质。让我们逐步理解:
|
> 上面这句话展示了模运算中指数运算的一个重要性质。让我们逐步理解:
|
||||||
@@ -39,34 +31,20 @@ $a^{xy} = (a^x)^y$
|
|||||||
$(a^x)^y ≡ 1^y\ (\text{mod}\ p)$
|
$(a^x)^y ≡ 1^y\ (\text{mod}\ p)$
|
||||||
而$1^y = 1$,所以最终得到$a^{xy} ≡ 1\ (\text{mod}\ p)$
|
而$1^y = 1$,所以最终得到$a^{xy} ≡ 1\ (\text{mod}\ p)$
|
||||||
|
|
||||||
**理解**
|
### 三、 原根判断算法
|
||||||
这个性质表明,如果一个数的某次方模$p$等于1,那么它的任意倍数次方模$p$也等于1
|
|
||||||
这在数论和密码学中非常有用,特别是在研究循环群和原根时
|
|
||||||
例如,在$RSA$加密算法中,这个性质被用来证明解密过程的正确性
|
|
||||||
> **举例说明**:
|
|
||||||
假设$a = 2$, $p = 7$
|
|
||||||
$2^3 = 8 ≡ 1\ (\text{mod}\ 7)$
|
|
||||||
那么$2^{3×2} = 2^6 = 64 ≡ 1\ (\text{mod}\ 7)$
|
|
||||||
$2^{3×3} = 2^9 = 512 ≡ 1\ (\text{mod}\ 7)$
|
|
||||||
这个例子验证了上述结论的正确性
|
|
||||||
因此,原命题是正确的,它展示了模运算中指数运算的一个重要性质。
|
|
||||||
>
|
|
||||||
所以我们可以 $O(\sqrt{p})$ 分解 $p−1$ 的质因数,然后检查 $p−1$ 的每一个因数 $f$ 是否满足 $a^f ≡1(mod\ p)$,如果有任意一个因数满足上述条件,直接输出 $No$。如果所有因数均不满足,输出 $Yes$。
|
|
||||||
|
|
||||||
### 三、 原根判断算法解析
|
#### 1、原根定义
|
||||||
|
在模 `p` 的情况下,`a` 是原根当且仅当 `a` 的阶数$k$等于 `p-1`。阶数是指最小的正整数 `k` 使得:
|
||||||
|
$a^k \equiv 1 \mod p $
|
||||||
|
|
||||||
#### 原根的定义
|
#### 2、核心思想
|
||||||
在模 `p` 的情况下,`a` 是原根当且仅当 `a` 的阶数等于 `p-1`。阶数是指最小的正整数 `k` 使得:
|
|
||||||
\[ a^k \equiv 1 \mod p \]
|
|
||||||
|
|
||||||
#### 代码的核心思想
|
|
||||||
1. **分解 `p-1` 的质因数**:代码通过遍历 `2` 到 `sqrt(p-1)` 来找到 `p-1` 的所有质因数。
|
1. **分解 `p-1` 的质因数**:代码通过遍历 `2` 到 `sqrt(p-1)` 来找到 `p-1` 的所有质因数。
|
||||||
2. **检查阶数**:对于每个质因数 `i`,检查是否:
|
2. **检查阶数**:对于每个质因数 `k`,检查是否:
|
||||||
\[ a^i \equiv 1 \mod p \]
|
$a^k \equiv 1 \mod p $
|
||||||
或
|
或
|
||||||
\[ a^{(p-1)/i} \equiv 1 \mod p \]
|
$a^{(p-1)/k} \equiv 1 \mod p$
|
||||||
如果满足,说明 `a` 的阶数小于 `p-1`,因此 `a` 不是原根。
|
如果满足,说明 `a` 的阶数小于 `p-1`,因此 `a` 不是原根。
|
||||||
|
|
||||||
#### 为什么这个方法有效?
|
#### 3、为什么这个方法有效?
|
||||||
- **阶数的性质**:如果 `a` 的阶数小于 `p-1`,那么它必须是 `p-1` 的某个真因数。因此,我们只需要检查 `p-1` 的所有质因数对应的幂次是否等于 1。
|
- **阶数的性质**:如果 `a` 的阶数$k$小于 `p-1`,那么$k$必须是 `p-1` 的真因数。因此,我们只需要检查 `p-1` 的所有质因数对应的幂次是否等于 1。
|
||||||
- **快速幂**:`qmi` 函数用于高效计算模幂,确保算法的时间复杂度在可接受范围内。
|
- **快速幂**:`qmi` 函数用于高效计算模幂,确保算法的时间复杂度在可接受范围内。
|
||||||
|
|||||||
BIN
小乔证件/JL-J01091.pdf
Normal file
BIN
小乔证件/JL-J01091.pdf
Normal file
Binary file not shown.
BIN
少惠林/基本存款账户信息.jpg
Normal file
BIN
少惠林/基本存款账户信息.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 MiB |
BIN
少惠林/营业执照.jpg
Normal file
BIN
少惠林/营业执照.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.7 MiB |
Reference in New Issue
Block a user