module Main; // import BinaryHeap; // import BoolArray; import CPLib.Arithmetic; // import CPLib.Bipartite; // import CPLib.Bits; // import CPLib.Convolution; // import CPLib.DSegtree; // import CPLib.Graph; import CPLib.IO; // import CPLib.LDSegtree; // import CPLib.LSegtree; // import CPLib.MaxFlow; // import CPLib.Memoize; // import CPLib.MinCostFlow; // import CPLib.Misc; // import CPLib.Monoid; // import CPLib.Segtree; // import CPLib.String; // import CPLib.Trait; // import CPLib.TwoSat; // import CPLib.UnionFind; // import CPLib.ZP; // import HashMap; // import HashSet; solve : I64 -> I64 = |x| ( count_up(2).filter(|n| // n倍すると約数の個数が2になるか? let ps = factorize(n); let rs = ps.map(|(p, _)| loop((0, x), |(r, x)| if x % p != 0 { r.break }; let x = x / p; let r = r + 1; (r, x).continue ) ); let a = range(0, ps.@size).map(|i| rs.@(i) + 1 + ps.@(i).@1.i64).fold(1, mul); let b = range(0, ps.@size).map(|i| rs.@(i) + 1).fold(1, mul); a == 2 * b ).get_first.as_some ); main : IO () = ( let t = *read_i; range(0, t).fold_m((), |_, _| let x = *read_i; let n = solve(x); (x*n).to_string.println );; pure() );