最近看到一個網站, 歐拉計划。挺好玩,都是一些算法題。這是本站:http://projecteuler.net/problems 這個是中文站:http://pe.spiritzhang.com/
下面貼兩個小腳本,低端玩具
1.找出一個數的所有因子:
#encoding:utf-8 import math def yinzi(n): list_yinzi = [] if n <= 2: return list_yinzi for i in range(2, int(math.sqrt(n)) + 1): """ 為什么循環范圍定在平方根呢?:因為一個數的因子是成對的,a=b*c。也就是說:找到一個因子b,肯定會找到相對應的另外一個因子c(a/b)。所以我們的工作量減少了一半。 又有:一個因子變大,另一個因子必然要變小。假設b永遠是小的那個,c是大的那個,那么b的最大值就是a的平方根。也就是b=c=(根號a)的時候。所以循環范圍定在[1 , a的平方根+1],+1的原因是為了能夠取到a的平方根避免遺漏。 """ #如果找到了一個因子,那么把其相對應的另一個因子一同加入到因子列表中 if n % i == 0: list_yinzi.extend([i, n/i]) #此處的set為了去重,因為會出現兩個相同的平方根的情況。所以去掉重復 #sorted重排序是因為,因子都是成對成對找出來的,也就是說一次找到的兩個因子肯定會有一大一小。這樣把所以因子找完放在一起,大小排序就亂了 return sorted(set(list_yinzi))
2.判斷一個數是否是質數 :
#encoding:utf-8 import math def is_zhishu(n): if n <=1: return False for i in range(2, int(math.sqrt(n)) + 1): """循環范圍同查找因子類似,由於因子是成對出現的,所以只需要循環到小於平方根的范圍就好""" if n % i == 0: return False return True