概念
任何一个大于等于 2 的正整数都可以写成若干个素数幂相乘的形式。
例如正整数120,就可以拆成2的3次方加3加5
代码实现
如何用代码实现分解的过程呢,我们可以先计算出给定的数n中所有的素数然后存入一个数组中,然后从2开始判断是否可以被当前的质数整除,如果可以就存入一个用来存底数的数组中,指数为1,将1存入一个用来存指数的数组中,如果还可以继续除以相同的素数,就让指数加一。直到无法整除位置,就换下一个素数接着如上的操作。
例题
题目描述
给你一个正整数n(n>=2&&n<=1000000)根据唯一分解定理输出素数x1、x2、x3…xk,x1<=x2<=x3<=…<=xk,并且x1x2x3*…*xk等于n。
输入描述
输入一个正整数n。
输出描述
第一行输出k,
第二行输出素数x1,x2…xk使它们的乘积为n。
样例
输入
10
输出
2
2 5
分析
输入不用多说,首先求出n开平方后的数m,然后从2到m循环,如果n模i等于0,那么就先将i记录下来。之后while循环直至无法整除i,因为题目无需打印次幂,所以只需要一个数组存数。但还会有特殊情况,有可能还会有比sqrt(n)大的素数是n的因子,所以要判断n是否大于1,如果大于就说明有这个数,将n存入就可以了。最后输出
代码
#include <algorithm>
#include <cmath>
#include <cstdio>
#