2^i * 3^j * 5^k なる整数
Posted feedbacks - Other
VBA for Excel (2003)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | Sub main()
Dim r, s, t
Range("B1").Value = "2^x"
Range("C1").Value = "3^y"
Range("D1").Value = "5^z"
Range("B2:D2").Value = 0
Set r = Range("A1")
n = 1
c = 0
While c < 100
Set s = r.Offset(n)
s.Value = n
If Not IsEmpty(s.Offset(0, 1)) Then
c = c + 1
For i = 0 To 2
Set t = r.Offset(n * ((i * (i + 1) / 2) + 2))
For j = 0 To 2
t.Offset(0, j + 1).Value = s.Offset(0, j + 1).Value + IIf(i = j, 1, 0)
Next
Next
End If
n = n + 1
Wend
Cells.AutoFilter Field:=1, Criteria1:="<>"
Cells.AutoFilter Field:=2, Criteria1:="<>"
End Sub
|
グッドです。以下のように書いて結果テーブルは不要になりました。
バージョン 2.8.17 と 3.6.1 で動くことを確認してあります。
バージョン 2.8.17 と 3.6.1 で動くことを確認してあります。
1 | select (a.p2*b.p3*c.p5) val, a.n, b.n, c.n from d a, d b, d c order by val limit 100;
|
Forth の実績追加のため、実装してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | : DIV_CHECK ( n d -- n/d^m )
BEGIN
2DUP MOD 0=
WHILE
DUP -ROT / SWAP
REPEAT
DROP ;
: HummingNumbers ( n -- )
1
BEGIN
OVER 0>
WHILE
DUP
2 DIV_CHECK
3 DIV_CHECK
5 DIV_CHECK
1 = IF
DUP .
SWAP 1- SWAP
THEN
1+
REPEAT
2DROP
;
|




leque
#7554()
Rating1/3=0.33
2^i * 3^j * 5^k の形で表される整数を小さい方から順に 100 個列挙するプログラムを書いてください。 i, j, k は 0 以上の整数です。アルゴリズムのオーダーについても考えてみてください。
例えば最初の 10 個は次のようになります:
※解答では i, j, k の各値を示す必要はありません。
[ reply ]