算术基本定理这样说过 任意整数都可以拆解成一个或多个素数的乘积,而且这种表示是唯一的,例如:
1000 = 2 * 2 * 2 * 5 * 5 * 5
1001 = 7 * 11 * 13
1002 = 2 * 3 * 167
1003 = 17 * 59
1009 = 1009
这里,我们将 1009
视为仅有一个值表示的单一案例 - 这个值就是它本身!
目前还不清楚是否可以有效地对大整数进行快速因式分解。比如有一个由 200
个素数(即只拥有 400
个数字)乘积而来数字,使用现代计算机将其分解成素数的乘积需要上千年的时间才能完成。
当然,这个重要的事实在密码学中具有重要意义。如果一旦发现了高效的算法,那么如今流行的很多加密方法会立即变得不安全!典型的例子就是 RSA 算法,你可以从 专项练习 和其他任务中进行深入学习。
你将会接收一系列数字(不是很大,所以不必害怕)并将它们分解成素数的乘积。
输入数据 第一行表示要分解的整数的个数。
接下来的每行包含一个要被分解的整数(长度不会超过 13
)。
答案 需要显示进行因式分解后的素数的乘积,显示方式可以像 p1*p2*p3
,其中 p1 ... p3
以非递减的顺序显示。各个乘积的表示之间用空格分隔。
举个栗子:
input data:
5
1000
1001
1002
1003
1009
answer:
2*2*2*5*5*5 7*11*13 2*3*167 17*59 1009