結果

問題 No.1611 Minimum Multiple with Double Divisors
ユーザー 14番
提出日時 2022-06-08 15:36:53
言語 Kotlin
(2.1.0)
結果
WA  
実行時間 -
コード長 1,386 bytes
コンパイル時間 13,520 ms
コンパイル使用メモリ 451,196 KB
実行使用メモリ 134,320 KB
最終ジャッジ日時 2024-09-21 05:08:45
合計ジャッジ時間 33,006 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 2
other WA * 11 TLE * 1 -- * 25
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:1:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
         ^

ソースコード

diff #

fun main(args: Array<String>) {
    val t = readLine()!!.toInt()
    repeat(t){ _ ->
        println(getAns(readLine()!!.toLong()))

    }
}

fun getAns(num:Long):Long {
    if(num == 1L) {
        return 2
    }
    if(num == 2L) {
        return 6
    }
    val prime = primeDivide(num)
    val keys = prime.keys.toList()
    var tmp = Long.MAX_VALUE
    for(i in primeList.indices) {
        if(keys.size <= i) {
            tmp = primeList[i]
            break
        }
        if(keys[i] != primeList[i]) {
            tmp = primeList[i]
            break
        }
    }
    val total = prime.values.sum()
    return Math.min(tmp, 1L shl total) * num
}
val primeList = mutableListOf<Long>().also {
    val max = 1_000_000
    val flag = BooleanArray(max+1)
    for(i in 2..max) {
        if(flag[i]) {
            continue
        }
        it.add(i.toLong())
        for(j in 1..max) {
            if(i*j>max) {
                break
            }
            flag[i*j] = true
        }
    }
}

fun primeDivide(num:Long):Map<Long,Int> {
    var n = num
    val ret = mutableMapOf<Long,Int>()
    for(prime in primeList) {
        if(prime*prime > n) {
            if(n > 1) {
                ret[n] = 1
            }
            break
        }
        while (n % prime == 0L) {
            ret[prime] = (ret[prime]?:0)+1
            n /= prime
        }
    }
    return ret
}
0