ハミング数のリストアップ
30分プログラム、その788。ハミング数の列挙をやってみました。
Regular number - Wikipediaによると2^n・3^m・5^rで表せる整数のことをハミング数と呼ぶらしいです。
なんか遅延リストとfilterを組合せたクールな方法でやりたかったんですけど、うまくいきませんでした。普通に各数字を2と3と5で割れるだけ割って判定してます。
使い方
$ python hamming.py [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18]
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- from itertools import * def take(n, seq): return list(islice(seq, n)) def div_by(n,m): (q,r) = divmod(n,m) if r == 0: return div_by(q,m) else: return n def is_hamming(n): return div_by(div_by(div_by(n,2),3),5) == 1 print filter(is_hamming,range(1,20))