結果
| 問題 |
No.1611 Minimum Multiple with Double Divisors
|
| コンテスト | |
| ユーザー |
14番
|
| 提出日時 | 2022-06-08 15:42:17 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,456 bytes |
| コンパイル時間 | 12,097 ms |
| コンパイル使用メモリ | 444,808 KB |
| 実行使用メモリ | 130,936 KB |
| 最終ジャッジ日時 | 2024-09-21 05:09:24 |
| 合計ジャッジ時間 | 26,974 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 2 |
| other | WA * 11 TLE * 1 -- * 25 |
コンパイルメッセージ
Main.kt:1:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
Main.kt:5:13: warning: 'appendln(Long): kotlin.text.StringBuilder /* = java.lang.StringBuilder */' is deprecated. Use appendLine instead. Note that the new method always appends the line feed character '\n' regardless of the system line separator.
ans.appendln(getAns(readLine()!!.toLong()))
^
ソースコード
fun main(args: Array<String>) {
val t = readLine()!!.toInt()
val ans = java.lang.StringBuilder()
repeat(t){ _ ->
ans.appendln(getAns(readLine()!!.toLong()))
}
print(ans.toString())
}
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
}
14番