|
发表于 2017-1-14 13:53:27
|
显示全部楼层
- # encoding:utf-8
- # 寻找100万以下的十进制和二进制都是回文数的数之和
- from time import time
- def getPrimes(N=1000000):
- l_result = [True] * N
- l_result[0], l_result[1] = False, False
- for i in range(0, N):
- if l_result[i]:
- for j in range(i * i, N, i):
- l_result[j] = False
- return [k for (k, v) in enumerate(l_result) if v]
- def euler037():
- l_primes = getPrimes()
- l_result = []
- for each in l_primes:
- if len(str(each)) >= 2:
- if str(each)[0] in ('4', '6', '8', '9'):
- continue
- if (str(each)[::-1])[0] in ('6', '9'):
- continue
- flag = True
- for i in range(1, len(str(each))):
- t1 = each % 10 ** i
- t2 = each // 10 ** i
- if not(t1 in l_primes) or not(t2 in l_primes):
- flag = False
- break
- if flag:
- l_result.append(each)
- print(l_result)
- if len(l_result) == 11:
- break
- def euler037_1():
- l_primes = getPrimes()
- l_result = []
- for each in l_primes:
- tmp = str(each)
- if len(tmp) >= 2:
- if tmp.startswith('4') or tmp.startswith('6') or tmp.startswith('8') or tmp.startswith('9') or tmp.endswith('6') or tmp.endswith('9'):
- continue
- flag = True
- for i in range(1, len(tmp)):
- t1 = tmp[i:]
- t2 = tmp[:len(tmp) - i]
- if not(int(t1) in l_primes) or not(int(t2) in l_primes):
- flag = False
- break
- if flag:
- l_result.append(each)
- if len(l_result) == 11:
- print(l_result)
- break
-
- if __name__ == '__main__':
- start = time()
- euler037_1()
- print('cost %.6f sec' % (time() - start))
复制代码
[23, 37, 53, 73, 313, 317, 373, 797, 3137, 3797, 739397]
效率比较低,要30-40s |
|