Comment detail
2^i * 3^j * 5^k なる整数 (Nested Flatten)25までのものが出てくるようにDNUMを指定したときに16が出てくるのでしょうか?
(注:2 ^ 4 = 16, 5 ^ 2 = 25)
25までの数を表示するようにDNUMを指定すると、heapに入っている数はi + j + k <= 3を満たすものしかない気がします。しかし、16も指定の数です。
DNUM=16 としてみました。25 まで正しく列挙されているように思いますが…… http://codepad.org/QQfKglM7
勘違いです。失礼しました。 8が先にqueueから抜かれますね。orz
8を取り出したときに, 16, 24, 40が入れられるので, 25の前に16出ますよ.
あとこのアルゴリズムの正当性も証明できます. n (> 1) 回目が終わったとき出てなかったものの最小値をAとします. このAがn回目に出た数より小さいと仮定します. A = 2^i 3^j 5^kで, queのことを考えると, A/2またはA/3またはA/5のどれかも出ていません. なので最小性に反します. よって矛盾.






84q #7638() [ C++ ] Rating0/2=0.00
priority queue で。
Rating0/2=0.00-0+
1 reply [ reply ]