Skip to main content
 首页 » 编程设计

python之将一个数分解为两个较小的质数的程序

2025年05月04日14wuhuacong

我有一个非常大的数,我想编写一个程序,找到两个质数,如果相乘,它会给出原始数。

Ex. 
Original_number = 299 
 
// The program should get these two numbers: 
 
q = 13 
p = 23 

程序开始时运行良好,但在某个时刻,它就停止了,我不确定是哪里出了问题。 代码:

import time 
import math 
 
def main(): 
    time1 = time.clock() 
    q  = int(0) 
    p = int(0) 
    finalnumber = int(377) 
 
 
    print("in main \n") 
    print("q = ", q) 
    print("\n p = ", p) 
 
    gotResult = 0 
 
    while(gotResult == 0): 
 
        p = GetNextPrime(p) 
 
        if(p >= finalnumber): 
            q = GetNextPrime(q) 
            p = q 
            p = GetNextPrime(p) 
 
        if(q * p == finalnumber): 
            gotResult == 1 
            break 
 
    print("q = ", q) 
    print("\n p = ", p) 
    time2 = time.clock() 
 
    ElapsedTime = time2 - time1 
    print("Elapsed time: ", ElapsedTime) 
 
 
def GetNextPrime(prime): 
    print("in GetNextPrime \n") 
    isPrime = 0 
 
    while(isPrime == 0): 
        prime = prime + 1 
        if(IsPrime(prime)== 1): 
            isPrime = 1 
 
    return prime 
 
def IsPrime(prime): 
    print("in IsPrime \n") 
    isPrime = 0 
    i = 2 
 
    while(i <= math.sqrt(prime)): 
        if(i % 2 == 0): 
            i = i+1 
        if(prime % i == 0): 
            isPrime = 1 
            break 
 
 
    return isPrime 
 
#start of program here 
main() 

我用 python 编写了程序,我知道它可能不好,因为我是 python 的新手。(我一直在编程 C++,但我什至不擅长) 但我希望你能帮我找到问题:)

附言。原始数字的最大大小是多少?它可以有多少个密码?

请您参考如下方法:

只需分解一个数字。你会得到一个主要因素的列表。如果列表恰好包含两个数字,并且这些数字符合您的目的,那么您就赢了。否则尝试另一个号码。

但是上面的做法比较浪费。我宁愿拿一个素数列表,生成它的所有对并相乘。结果将是一个只能分解为 2 个素数的数字列表。像这样:

some_primes = [2, 3, 5, 7, 11] # you can generate a better list 
my_numbers = [x*y for x in some_primes for y in some_primes]