import scala.annotation.tailrec import scala.io.StdIn object Problem300 { // 素因数分解 def primeFactorization(n: Long): Seq[Long] = { @tailrec def factor(n: Long, div: Long, result: Seq[Long]): Seq[Long] = { if (n < div * div) { n +: result } else if (n % div == 0) { factor(n / div, div, div +: result) } else { factor(n, div + 1, result) } } factor(n, 2, Nil) } def proc(x: Long): Long = { val pf: Map[Long, Seq[Long]] = primeFactorization(x).groupBy(x => x) val oddPf: Map[Long, Seq[Long]] = pf.filter(_._2.length % 2 == 1) oddPf.keys.product } def main(args: Array[String]) { val x = StdIn.readLong() val result: Long = proc(x) println(result) } }