题目
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi’s are prime factors of N in increasing order, and the exponent ki is the number of pi – hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
思路
为了避免重复运算,维护一个素数表prime,初始化为{2}。
分解N时,先考察素数表中的数是否是其因子;若素数表中没有其因子,且素数表中最大值比根N小,那么逐个考察到根N,每发现一个素数都保存到素数表中。
把N的因子m保存到factor数组中,再迭代考察n / m;若其没有因子,则其本身就是素数,将其保存到factor中。
最后按指定规则输出结果即可。
注意输入的值可能是1,需单独考虑,否则测试点3无法通过。
代码
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
vector<int> prime; //素数备忘录
vector<int> factor; //素因数
bool isPrime(int n){
for (int i=2; i<=sqrt(n); i++){