結果

問題 No.7 プライムナンバーゲーム
コンテスト
ユーザー regerege
提出日時 2015-10-19 22:35:13
言語 F#
(F# 10.0)
コンパイル:
fsharp_c _filename_
実行:
/usr/bin/dotnet_wrap
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 912 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 9,601 ms
コンパイル使用メモリ 214,876 KB
実行使用メモリ 42,496 KB
最終ジャッジ日時 2026-04-25 20:17:01
合計ジャッジ時間 17,624 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other RE * 17
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.fsproj を復元しました (205 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net10.0/main.dll
  main -> /home/judge/data/code/bin/Release/net10.0/publish/

ソースコード

diff #
raw source code

#nowarn "40"
let ``No.7 プライムナンバーゲーム`` () =
    let rec primes = 
        Seq.cache <| seq { yield 2; yield! Seq.unfold nextPrime 3 }
    and nextPrime n =
        if isPrime n then Some(n, n + 2) else nextPrime(n + 2)
    and isPrime n =
        if n >= 2 then
            primes
            |> Seq.tryFind (fun x -> n % x = 0 || x * x > n)
            |> fun x -> x.Value * x.Value > n
        else false
    let f N =
        let dp = [| yield 1; yield 1; for i in 2..N -> 0; |]
        let ps = primes |> Seq.takeWhile ((>=)N) |> Seq.toList
        let rec f i = function
            | p::ps ->
                if p <= i then
                    if dp.[i-p] = 0 then dp.[i] <- 1
                    else f i ps
            | [] -> ()
        for i in 2..N do f i ps
        dp.[N]
    printfn "%s" ["Lose";"Win"].[f (int(stdin.ReadLine()))]
``No.7 プライムナンバーゲーム`` ()
0