Integer Factorization

Problem #63

Tags: mathematics loops c-1 c-0 implementation

Who solved this?

Back to English version

算术基本定理这样说过 任意整数都可以拆解成一个或多个素数的乘积,而且这种表示是唯一的,例如:

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
You need to login to get test data and submit solution.