Project Euler Problem 3

Problem 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
# 求解600851475143的最大质因数。

# 其中分解质因数是难点

def isprime(n):               # 定义一个判断是否是质数的函数
    i = 2
    s = n**0.5
    while i <= s:
        if n % i == 0:   
            return False
            break
        i += 1
    else:
        return True

def find_prime(a,b):          # 定义函数找到一个区间的所有质数
    i = a
    while i <= b:
        if isprime(i) == True:
            yield i          #  生成器
        i += 1

def factorize(num,factor):    # 定义分解质因数函数,传入一个空列表来收集质因数
    ll = find_prime(2,int(num**0.5+1))
    for i in ll:
        if num % i == 0:
            factor.append(i)
            return factorize(int(num/i),factor)   # 递归寻找质因数
    factor.append(num)
    return factor

num = int(input("Input:"))
factor =[]
factor_list = factorize(num,factor)
print("Factors:\n",factor_list)
print("Max Factor:",max(factor_list))

Input: 600851475143  
Factors:  [71, 839, 1471, 6857]
Max Factor: 6857


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值