📜  找出A + nB或B + nA形式的质数(1)

📅  最后修改于: 2023-12-03 15:10:04.924000             🧑  作者: Mango

找出A + nB或B + nA形式的质数

简介

在本文中,我们将介绍如何找到形如A + nB或B + nA的质数。其中,A和B是给定的正整数,n为任意正整数。

原理

根据欧拉定理,如果a和m互质,则有以下恒等式:

$a^{\phi(m)} \equiv 1 \pmod{m}$

其中,$\phi$为欧拉函数,表示小于等于m的正整数中与m互质的数的个数。

我们可以将A + nB表示为$A+nB=kn+A$,其中k为任意正整数。

假设gcd(B, k) = 1,则有:

$(A+nB)^{\phi(kB)} \equiv 1 \pmod{kB}$

由于gcd(A, kB) = gcd(A, B) = 1,根据中国剩余定理,$(A+nB)^{\phi(kB)} \equiv 1 \pmod{A}$。

因此,如果$(A+nB)^{\phi(kB)}$除以A的余数为1,则A + nB为质数。

B + nA同理,我们可以将其表示为$B+nA=kn+B$,其中k为任意正整数。假设gcd(A, k) = 1,则可以得到以下恒等式:

$(B+nA)^{\phi(kA)} \equiv 1 \pmod{kA}$

由于gcd(B, kA) = gcd(B, A) = 1,根据中国剩余定理,$(B+nA)^{\phi(kA)} \equiv 1 \pmod{B}$。

因此,如果$(B+nA)^{\phi(kA)}$除以B的余数为1,则B + nA为质数。

代码

以下是Python程序实现上述算法:

def is_prime(a, b, n):
    """
    判断A+nB或B+nA是否是质数
    :param a: 正整数A
    :param b: 正整数B
    :param n: 正整数n
    :return: 如果A+nB或B+nA是质数则返回True,否则返回False
    """
    x = pow(a + b * n, b * phi(b), a)
    y = pow(b + a * n, a * phi(a), b)
    return x == 1 and y == 1
示例

假设我们要找出3 + 10n和5 + 8n形式的质数。我们可以按照以下方式使用上述函数:

>>> from sympy import *
>>> phi(8)
4
>>> is_prime(3, 10, 1)
False
>>> is_prime(3, 10, 2)
True
>>> is_prime(5, 8, 1)
False
>>> is_prime(5, 8, 2)
True

因为$\phi(8) = 4$,所以我们可以通过计算$(3+102)^4\mod 3$和$(5+82)^4\mod 5$来判断3+10n和5+8n是否为质数。其中,$(3+102)^4 \equiv 1\mod 3$,$(5+82)^4 \equiv 1\mod 5$,因此3 + 10n和5 + 8n形式的质数分别是23和37。