预处理基源数
首先用埃拉托色尼筛法筛选出所有不超过 106 的基源数(即素数)。由于每个询问的 N 最大为 1018,如果一个基源数 k 满足 k2 整除 N,那么必然有 k≤109。预处理的基源数可以覆盖所有 k≤106 的情形。
分类寻找基方因子
对于每个 N,设待处理的数值为 x=N,答案集合初始为空。
在整数理论中,定义一类特殊的正整数,称为基源数:一个大于 1 的正整数,如果除了 1 和它本身之外没有其他正约数,则称它为基源数。对于任意正整数 N,若存在基源数 k,使得 k2 整除 N,则称 k2 为 N 的一个基方因子。
给定 T 个询问,每个询问给出一个正整数 N。对于每个询问,请找出 N 的所有基方因子,并按升序输出。如果 N 不存在任何基方因子,则输出 -1。
本题中,询问组数 T 不超过 300,每个 N 的大小不超过 10^{18}。
第一行包含一个整数 T(1≤T≤300),表示询问组数。 接下来 T 行,每行包含一个整数 N(1≤N≤1018),表示一次询问。
对于每组询问输出一行:若存在基方因子,将它们按升序输出,相邻整数用一个空格隔开;否则输出 -1。
输入
1
36
输出
4 9
说明
36=22×32。基源数 2 出现 2 次,22=4 是基方因子;基源数 3 出现 2 次,32=9 是基方因子。按升序输出 4 和 9。
输入
1
20402
输出
10201
说明
20402=2×1012。基源数 2 仅出现 1 次,不产生基方因子;基源数 101 出现 2 次,1012=10201 是基方因子。无其他基方因子,输出 10201。
输入
2
1
12
输出
-1
4
说明
第一个询问 N=1:不存在基方因子,输出 −1。
第二个询问 N=12=22×3:基源数 2 出现 2 次,22=4 是基方因子;基源数 3 仅出现 1 次,无基方因子。输出 4。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册