intime o'

本を愛する者にとっては、どんな図書館だって美しい。(シャーロット・マクラウド著「牛乳配達退場」より)
Problem 12 2012/09/05 (Wed.)
飽きっぽい人間なので常に新しい教材を求めます.

ProjectEulerってのを始めました.
プログラミングのオンラインジャッジとかは色々あるけれど、
こちらはただ一つの具体的な問題について回答を送ればいいだけ.
つまり解く手順やプログラムのソースコードを送信する必要もない.
なんだか気楽そうなのでやってた.

自己申告制で用いる言語を自己紹介に添える.
自分はC#の練習のつもりでこれを始めたけれど、気附いたらJavaScriptで
書いていていかんいかんと思いF#を書いた.

http://projecteuler.net/problem=12

私の答えです.
open System

let main =
    // nの約数の数
    let rec num_of_factor n =
        let rec num_of_factor' a ac =
            if n % a = 0 then
                let x = a
                let y = n/a
                if x = y then
                    ac + 1
                elif x > y then
                    ac
                else
                    num_of_factor' (a+1) (ac+2)
            else
                num_of_factor' (a+1) ac
        num_of_factor' 1 0

    // n = 1, 3, 6, ..を順にチェック
    let countup N =
        let rec countup' n ac =
            let num_of_factor_of_n = num_of_factor ac in
                if num_of_factor_of_n > N then
                    printfn "num_of_factor of %d is %d." ac num_of_factor_of_n
                else
                    countup' (n+1) (ac+n)
        countup' 0 0

    Console.ReadLine()
    |> Int32.Parse
    |> countup 
プログラムへの標準入力として整数Nを受け取って、
1, 3, 6, 9, 15, ..
という数列の前からそれぞれ約数の数を調べてNを超えたら終了する
ループを回す.

って、見たままのコードになるのがいい 

コメ(0) | トラ(0)