Project Euler Problem 3

来源:互联网 发布:linux 嗅探 编辑:程序博客网 时间:2024/06/16 21:17

说在前面的话:本人刚开始学习Python,用Project Euler的题目来练练手,欢迎大家交流指教!


问题:

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?


解法一:(我自己的方法)

思路:

   1)找出600851475143的所有奇数因子,因为除了2以外所有偶数都不是质数

   2)判断奇数因子是否为质数

   3)找出最大质因子


Code in Python:

import mathimport times = time.time()def isprime(n):    '''判断所给参数是否为质数。若一个数能被2到平方根的任何一个数整除,那么就不是质数;反之则为质数,返回True'''    for div in range(2, int(math.sqrt(n)) + 1):        if n % div == 0:            return(False)    else:        return(True)def bignum(x, y):    '''判断数的大小。返回两个数中大的那个数'''    if x > y:        return(x)    else:        return(y)def find_lp_factor(target):    '''找出目标数的最大质因子'''    temp = target // 2    largest = 2    for i in range(3, temp + 1, 2):#不去考虑偶数        if target % i == 0:#若i是因子            ii = target // i#则ii也是因子            if ii < i:                break#过滤掉重复的            else:                if isprime(i):#i是质因子                    largest = bignum(largest,i)    return(largest)lprime = find_lp_factor(600851475143)f = time.time()print('The largest prime factor of 600851475143 is',lprime)print('It\'s found in',f - s,'seconds.')

Solution:

The largest prime factor of 600851475143 is 6857
It's found in 0.23001313209533691 seconds.


解法二:(网上的解法,比我自己的方法快)

Code in Python:

import times = time.time()ma = 600851475143largest = 0counter = 2while(counter * counter < ma):    if ma % counter == 0:        ma = ma // counter        largest = counter    else:        counter = counter + 1if ma > largest:    largest = maf = time.time()print(largest,'is found in',f - s,'seconds')


Solution
6857 is found in 0.0019998550415039062 seconds

0 0