逻辑找出数字的素因子

时间:2017-10-04 12:21:57

标签: python-3.x

我创建了以下脚本来找出数字的素因子:

def check_if_no_is_prime(n):
    if n <= 3:
        return True
    else:
        limit = int(math.sqrt(n))
        for i in range(2,limit + 1):
            if n % i == 0:
                return False
        return True


def find_prime_factors(x):
    prime_factors = []
    if check_if_no_is_prime(x):
        prime_factors.append(1)
        prime_factors.append(x)
    else:
        while x % 2 == 0 and x > 1:
            prime_factors.append(2)
            x = x // 2
        for i in range(3,x+1,2):
            while x % i == 0 and x > 1:
                if check_if_no_is_prime(i):
                    prime_factors.append(i)
                    x = x // i
                if x <= 1:
                    return prime_factors
        return prime_factors

no = int(input())
check = find_prime_factors(no)
print (check)

我不确定这是否是最好和最有效的方法? 有人可以指出更好的方法吗?

1 个答案:

答案 0 :(得分:0)

使用erathnostanes筛子将所有素数从2输入到输入的任何限制

    def sieve(N):
        from math import floor,sqrt
        A=[1 for x in range(N+1)]
        for count in range(2):
            A[count]=0
        for i in range(floor(sqrt(N))+1):
            if A[i]==1:
                for k in range(i*i,N+1,i):
                    A[k]=0
        ans=list(enumerate(A))
        res=[]
        for (i,j) in ans:
            if j==1:
                res+=[i]
        return res
    print(sieve(100))
    #my code