| 
 | 
 
 
发表于 2018-6-30 15:40:26
|
显示全部楼层
 
 
 
from math import sqrt 
from time import time 
 
# 素数判断函数,给一个值,如果返回True,则表示是素数,False表示为非素数 
def is_prime(n): 
    if n > 1: 
        if n == 2: 
            return True 
        if n % 2 == 0: 
            return False 
        for i in range(3, int(sqrt(n))+1, 2): 
            if n % i == 0: 
                return False 
        # for循环结束后,如无False,则返回True 
        return True 
    # 如 if n > 1 不成立,则返回False 
    return False 
         
# 取得给定值的所有乘数因子 
def factor(n): 
    L = [] 
    for i in range(1, int(sqrt(n))+2): 
        if n%i == 0: 
            L.append(i) 
            L.append(n/i) 
    # set 去除相同的因子 
    return set(L) 
     
start_time = time() 
memb = list(filter((is_prime), factor(600851475143))) 
memb.sort() 
end_time = time() 
 
print(memb) 
print('Running time = ', end_time - start_time) 
print('Largest prime factor is ', memb[-1]) 
>>> 
[71, 839, 1471, 6857] 
Running time =  0.113600015640 
Largest prime factor is  6857 |   
 
 
 
 |