You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Miller Rabin大素数生成代码依赖包(质因数分解等)获取求助

问题:无法找到并安装自定义依赖包「质因数分解」和「求大整数模幂运算」

我在YouTube上学习相关内容时,使用GitHub开发者提供的大素数生成代码遇到了问题:代码中引入的「质因数分解」(别名ku)和「求大整数模幂运算」(别名ku1)这两个依赖包无法找到并安装。代码如下:

import random
import 质因数分解 as ku
import 求大整数模幂运算 as ku1
def isPrime(testNum):
    smallPrime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,
                  103, 107, 109, 113, 127, 131, 137, 139, 233, 239,
                  241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
                  367, 373, 379, 383, 389, 397, 401, 409, 419,
                  421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
                  557, 563, 569, 571, 577, 587, 593, 599, 601,
                  607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
                  739, 743, 751, 757, 761, 769, 773, 787, 797,
                  809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937,
                  941, 947, 953, 967, 971, 977, 983, 991, 997}
    if testNum < 2:
        return False
    if testNum in smallPrime:
        return True
    for prime in smallPrime:
        if testNum % prime == 0:
            # print("被小素数整除了")
            return False
    return Miller_Rabin(testNum)

def Miller_Rabin(testNum):
    safeTime = 50  # 素性检测次数
    eulerN = testNum - 1
    testNum2 = 0
    # 计算n-1=2^s*t
    while eulerN % 2 == 0:
        testNum2 = testNum2 + 1
        eulerN = eulerN // 2
    # 计算n-1=2^s*t
    oddQ = eulerN  # 得到t
    for trials in range(safeTime):
        random_a = random.randrange(2, testNum - 1)
        firstTest = pow(random_a, oddQ, testNum)
        if firstTest == 1 or firstTest == testNum - 1:
            continue
        else:
            nextTest = firstTest
            for i in range(1, testNum2):
                nextTest = (nextTest ** 2) % testNum
                if nextTest == testNum - 1:
                    break
            # print("在第%d次素性测试中失败了" % (trials+1))
            return False
    return True


if __name__ == "__main__":
    '''
    a = 202002723003
    list = []
    prime_m = 0
    prime_b = 0
    prime_a = 0
    p = 1000000000000000000000000000000387
    for i in range(a-20, a+1):   # (a, a + 1000000)
        f = ku.factorize(p-1, verbose=True)
        print(ku.print_factorization(i, f))
        for j in range(len(f)):
            b = f[j][0]
            print("%d ^ %d (mod %d) is %d "%(i, b, p, ku1.bigmod(p,b,i)))
        print("%d ^ %d (mod %d) is %d "%(i, p-1, p, ku1.bigmod(p,p-1 ,i)))

        # print("%d不是素数"%n)i
    for i in range(0, len(list), 3):
        try:
            prime_b = list[i]
            prime_m = list[i+1]
            prime_a = list[i+2]
        except:
            print('end')
        if prime_m > (prime_a+prime_b)//2:
            print('i:', prime_m)
            break
    '''
    flag1 = False
    for i in range(1000000000000000000, 9000000000000000000):
        f = ku.factorize(i, verbose=True)
        if len(ku.print_factorization(i, f))==len(str(i))+2 and ku1.bigmod(8192,1,i)==1:
            if flag1:
                print(i)
                break
            else:
                flag1 = True
                print(i)

恳请告知这两个依赖包的获取渠道,谢谢!


解决方案
  • 这两个「依赖包」并非公开PyPI上的标准库,而是原GitHub开发者自行编写的自定义Python模块:

    • 「质因数分解」对应文件名为质因数分解.py,需包含factorize()和print_factorization()两个函数,你需要从原代码所在的GitHub仓库中找到这个文件,放到当前运行代码的同一目录下。
    • 「求大整数模幂运算」对应文件名为求大整数模幂运算.py,需包含bigmod()函数,同样要从原仓库获取该文件,放到代码同目录。
  • 如果找不到原仓库的对应模块,可以用以下替代方案:

    1. 模幂运算替代:Python内置的pow(base, exp, mod)函数已经支持高效的大整数模幂运算,完全可以替代自定义的ku1.bigmod()。比如代码中的ku1.bigmod(8192,1,i)可以直接改成pow(8192, 1, i)(实际等价于8192 % i)。
    2. 质因数分解替代:使用第三方库sympy的factorint()函数实现质因数分解:
      • 先安装sympy:pip install sympy
      • 修改代码中的导入和调用:
        # 替换原导入语句
        from sympy import factorint
        # 替换ku.factorize(i, verbose=True)
        f = factorint(i)
        # 自定义打印质因数分解的逻辑(替代ku.print_factorization)
        def print_factorization(n, factors):
            parts = [f"{p}^{e}" if e > 1 else f"{p}" for p, e in factors.items()]
            return f"{n} = {' * '.join(parts)}"
        

内容的提问来源于stack exchange,提问作者Anmar Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:45:38