如何打印大数的所有素数(例如99999999),同时牢记性能/时间,而不使用任何特殊软件包?

2024-05-15 01:51:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了以下代码。你知道吗

import math
def check_isprime(num):
    flag=0
    if num<2:
        return False

    for i in range(2,int(math.sqrt(num))+1):
        if num%i == 0:
            flag=1
            break

    if flag:
        return False
    else:
        return True

def find_prime_factors(number):
    while number != 1:
        for i in range(2,number+1):
            if check_isprime(i):
                if number%i==0:
                    print i
                    number=number/i 
                    break  
#find_prime_factors(99999999) (Not able to execute)
#find_prime_factors(10000000) (This is fine)

对于许多大的数字,代码也可以正常工作,但是对于其他的代码,由于循环运行了更多的次数,因此失败了。 有没有可能对此进行一点优化,或者有没有更好的方法?你知道吗


Tags: 代码falsenumberforreturnifdefcheck
1条回答
网友
1楼 · 发布于 2024-05-15 01:51:41

有很多方法可以有效地解决这个问题,其中之一就是使用primefac package,如果您查看这个包,它包含了解决这个问题的所有有效方法:

import primefac
n = 100
factors = list(primefac.primefac(n))

使用这个,除非这是你的作业,你需要提交一些逻辑。:)

编辑循环方法:

def get_list_primes(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

这对我来说很有效。你知道吗

相关问题 更多 >

    热门问题