組み合わせで表現可能な数
30分プログラム、その292。Problem23の「2つの過剰数の和で表現可能な正の整数」を計算しようとしてみた。
もしこれができると、
2つの過剰数の和で書き表せない正の整数の総和 = sum(1,28123) - 2つの過剰数の和で表現可能な正の整数
という計算ができるようになるはず。
でも、遅くて使いものにならなかった。方針としては間違っていないはずだから、明日はもっと効率に気をつかって書いてみよう。
使い方
>>> combination([1,2,3]) [2, 3, 4, 4, 5, 6]
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # problem23.py - # # Copyright(C) 2008 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2008/04/19 09:26:46 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # ## 組み合せで表現可能かの計算 def combination(xs): ys = [] for i in xrange(0,len(xs)): x = xs[i] rest = xs[i:] ys.extend(map(lambda y:x+y,rest)) return set(ys)