作者: Fe2+
日時: 2003/2/12(23:24)
Fe2+ です。

問題をシンプルに直してみると、

大豆の1袋の粒数 * 増やす大豆の袋の数 = 100000 - 2003

ということなので、右辺を因数分解しましょう。
(1) 右辺は奇数なので奇数で割ってみれば万全です。
(2) 大豆の数の方が多いということは大豆の数の範囲は 1002 から 2003 で、
    増やす大豆の袋の数の範囲は 100000 // 2003 から 100000 // 1002 + 1
    ですから、袋の数を探すのが楽で良いでしょう。
100000 // 2003 は都合良く奇数(49)です。


z = 100000 - 2003

for p in range(100000 // 2003 , 100000 // 1002 + 1):
    if z % p == 0:
        print "大豆の袋の数は %d 袋、" % (p+1)
        print "大豆の1袋の粒数は %d 粒です。" % (z//p)



ほとんど明らかだと思いますが、割算について少々。
演算子 // は整数の商を与えます。Python 2.2 から導入されています。
from __future__ import division
と書くと、整数 / 整数 が近似小数を返すようになります(これも 2.2 から)。
そのうちこっちの動作が今の動作(整数 / 整数 が整数を返す)に取って代わ
ります(といってもだいぶ先の話ですが)。
詳しくは PEP 238 に書いてあります。
(拙訳が
http://member.nifty.ne.jp/Fe/script/python/pep-0238.ja.html
にあります。)

--
MATSUI Fe2+ Tetsushi
 mailto:VED03370@...
 http://member.nifty.ne.jp/Fe/