結果

問題 No.847 Divisors of Power
ユーザー 6soukiti296soukiti29
提出日時 2019-07-07 09:49:21
言語 Nim
(2.2.0)
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,094 bytes
コンパイル時間 1,383 ms
コンパイル使用メモリ 66,304 KB
最終ジャッジ日時 2024-07-02 05:46:51
合計ジャッジ時間 1,949 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
/home/judge/data/code/Main.nim(7, 33) Error: type mismatch: got 'seq[BiggestInt]' for 'map(split(readLine(stdin), {' ', '\t', '\v', '\r', '\n', '\f'}, -1),
    parseBiggestInt)' but expected 'tuple'

ソースコード

diff #

import sequtils,strutils,algorithm
type
    prime = tuple[i : int64, n : int64]
var
    N, K, M : int64
    P = newSeq[int64](0)
(N, K, M) = stdin.readline.split.map(parseBiggestInt)

proc `^`(a: int64, b : int64) : int64 =
    if b == 0:
        return 1
    elif b == 1:
        return a
    elif b mod 2 == 0:
        return (a * a) ^ (b div 2)
    else:
        return a * (a ^ (b - 1))


var
    i : int64 = 2
    ps = newSeq[prime](0)
while i * i <= N:
    while N mod i == 0:
        N = N div i
        P.add(i)
    i += 1
if N > 1:
    P.add(N)
P.sort(cmp)
for j, p in P:
    if j == 0:
        ps.add((p, 1.int64))
    elif p == P[j - 1]:
        ps[^1].n += 1
    else:
        ps.add((p, 1.int64))
var
    cnt = newSeqWith(ps.len(),0.int64)
    ans = 0
for i, p in ps:
    ps[i].n *= K
proc dfs(k : int) =
    var z : int64 = 1
    for i,c in cnt:
        z *= ps[i].i ^ c
        if z > M:
            return
    ans += 1
    for i in k..<cnt.len:
        if cnt[i] == ps[i].n:
            continue
        cnt[i] += 1
        dfs(i)
        cnt[i] -= 1
    return
dfs(0)
echo ans
0