比这篇新的文章:
Nokia Phonebook to Exel
比这篇旧的文章: 代码发芽网做RSS的两个类,Django做RSS真方便
作者: 3751, 点击473次, 评论(3), 收藏者(0)
打分:
所有评论,共3条:( 我也来说两句)
比这篇旧的文章: 代码发芽网做RSS的两个类,Django做RSS真方便
求最大最小最大值因数
语言: Python, 标签: 素数 因数 2008/06/26发布 6个月前更新 更新记录作者: 3751, 点击473次, 评论(3), 收藏者(0)
Python语言: 求最大最小最大值因数
01 #coding:utf-8
02 #对由123456789这九个数字组成的9位数进行分解质因数
03 #例如 123457698=2x3x3x7x13x23x29x113,所以他的最大值因数是113
04 #总共有362880种可能,从中找出最大值因数最小的数字和最大值因数最大的数
05 import math
06
07 def generator(count, s):
08 if count == 1:
09 for i in s:
10 yield i
11 else:
12 for i in s:
13 _ = set(s)
14 _.remove(i)
15 for _ in generator(count-1, _):
16 yield _ * 10 + i
17
18 primes = [2, 3]
19 def prime(idx):
20 if idx < len(primes):
21 return primes[idx]
22 new = primes[-1]+2
23 while True:
24 for i in primes:
25 if new % i == 0:
26 break
27 else:
28 primes.append(new)
29 break
30 new += 2
31 return prime(idx)
32
33 def probe(number, idx, value=0):
34 if value > number:
35 return value
36 p = prime(idx)
37 sqrt = math.sqrt(number)
38 while number % p != 0 and sqrt >= p:
39 idx += 1
40 p = prime(idx)
41 if sqrt < p:
42 return number
43 return probe(number/p, idx, max(p, value))
44
45 if __name__ == '__main__':
46 _min = 10000000000, 10000000000
47 _max = 0, 0
48 for number in generator(9, set(range(1, 10))):
49 maxfactor = probe(number, 0)
50 if maxfactor < _min[0]:
51 _min = maxfactor, [number]
52 elif maxfactor == _min[0]:
53 _min[1].append(number)
54 if maxfactor > _max[0]:
55 _max = maxfactor, [number]
56 elif maxfactor == _max[0]:
57 _max[1].append(number)
58 print _min
59 print _max
02 #对由123456789这九个数字组成的9位数进行分解质因数
03 #例如 123457698=2x3x3x7x13x23x29x113,所以他的最大值因数是113
04 #总共有362880种可能,从中找出最大值因数最小的数字和最大值因数最大的数
05 import math
06
07 def generator(count, s):
08 if count == 1:
09 for i in s:
10 yield i
11 else:
12 for i in s:
13 _ = set(s)
14 _.remove(i)
15 for _ in generator(count-1, _):
16 yield _ * 10 + i
17
18 primes = [2, 3]
19 def prime(idx):
20 if idx < len(primes):
21 return primes[idx]
22 new = primes[-1]+2
23 while True:
24 for i in primes:
25 if new % i == 0:
26 break
27 else:
28 primes.append(new)
29 break
30 new += 2
31 return prime(idx)
32
33 def probe(number, idx, value=0):
34 if value > number:
35 return value
36 p = prime(idx)
37 sqrt = math.sqrt(number)
38 while number % p != 0 and sqrt >= p:
39 idx += 1
40 p = prime(idx)
41 if sqrt < p:
42 return number
43 return probe(number/p, idx, max(p, value))
44
45 if __name__ == '__main__':
46 _min = 10000000000, 10000000000
47 _max = 0, 0
48 for number in generator(9, set(range(1, 10))):
49 maxfactor = probe(number, 0)
50 if maxfactor < _min[0]:
51 _min = maxfactor, [number]
52 elif maxfactor == _min[0]:
53 _min[1].append(number)
54 if maxfactor > _max[0]:
55 _max = maxfactor, [number]
56 elif maxfactor == _max[0]:
57 _max[1].append(number)
58 print _min
59 print _max
所有评论,共3条:( 我也来说两句)
| 1 |
半瓶墨水
6个月前
回复
@3751
|
| 2 |
@1:
|
| 3 |
呵呵如果你在注释里这么一写,不就清楚了,谁也不会没事情算这个呀
|
代码