- 论坛徽章:
- 2
|
本帖最后由 l2y3n2 于 2011-05-06 20:16 编辑
随便用Python写了个穷举的,用时间正好3分钟、Python自带的大数运算、程序也没有优化过。
就是穷举9、8、7、……、0的个数,然后对比结果。
用C的话时间上应该还是没问题的
~$ time ./f.py
449177399146038697307
128468643043731391252
real 2m54.915s
user 2m54.871s
sys 0m0.012s
- #! /usr/bin/env python
- # -*- coding: UTF-8 -*-
- def check(value, nums):
- tmp = [0] * 10
- for c in str(value):
- tmp[ord(c) - ord('0')] += 1
- for i in range(0, 10):
- if tmp[i] != nums[i]:
- return False
- return True
- def action(exps, nums, n, leftn, value, idx):
- value += exps[idx] * leftn
- nums[idx] = leftn
- if len(str(value)) < n:
- return
- if (idx == 0):
- if (check(value, nums)):
- print(value)
- return
- for i in range(0, leftn + 1):
- if len(str(value)) <= n:
- action(exps, nums, n, leftn - nums[idx], value, idx - 1)
- value -= exps[idx]
- nums[idx] -= 1
- def main(n):
- exps = [i ** n for i in range(0, 10)]
- nums = [0] * 10
- action(exps, nums, n, n, 0, 9)
- if __name__ == '__main__':
- main(21)
复制代码 |
|