challenge 2^i * 3^j * 5^k なる整数

2^i * 3^j * 5^k の形で表される整数を小さい方から順に 100 個列挙するプログラムを書いてください。 i, j, k は 0 以上の整数です。アルゴリズムのオーダーについても考えてみてください。

例えば最初の 10 個は次のようになります:

 1 = 2^0 * 3^0 * 5^0
 2 = 2^1 * 3^0 * 5^0
 3 = 2^0 * 3^1 * 5^0
 4 = 2^2 * 3^0 * 5^0
 5 = 2^0 * 3^0 * 5^1
 6 = 2^1 * 3^1 * 5^0
 8 = 2^3 * 3^0 * 5^0
 9 = 2^0 * 3^2 * 5^0
10 = 2^1 * 3^0 * 5^1
12 = 2^2 * 3^1 * 5^0

※解答では i, j, k の各値を示す必要はありません。

Posted feedbacks - Groovy

素因数分解用の関数があればもっと楽になるかな

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def 素因数分解(num){
    def map = [:]
    for( int i = 2; i <= num ;i++ ){
        if( num%i == 0 ){
            map[i] = (map[i]?:0) + 1
            num = (int)(num/i)
            i--
        }
    }
    map
}

def list = [:]
def oklist = [2, 3, 5]
for(def i = 1;list.size()<100;i++){
    def map = 素因数分解(i)
    if(map.keySet() - oklist)
        continue
    list[i] = map
}
list.each{ key, value ->
    println("${key}".padLeft(4) + " = " + oklist.collect{ "${it}^${value[it]?:0}" }.join(" * "))
}

Index

Feed

Other

Link

Pathtraq

loading...