由于可处理的数据范围极小,而且算法比较暴力。所以仅供参考没有实际意义。
分解大质数还是得靠python。
、
#include<iostream>
using namespace std;
struct factor
{
int x, cnt;
}fac[10];
const int maxn = 10000;//表长
int prime[maxn], pNum = 0;//prime数组存放所有素数,pNum记录素数个数
bool p[maxn] = { false };//散列p,true表示不是素数,反之false为素数
void Find_Prime(int n)
{
for (int i = 2; i < n+1; i++)//切记是i<n+1,不是i<n也不是i<=n+1
{
if (p[i] == false)//当i为素数
{
prime[pNum++] = i;//把素数i存到prime数组中
for (int j = i + i; j < n+1; j += i)
{
//筛去所有i的倍数
p[j] = true;
}
}
}
}
int main(void)
{
int n,num=0;
while (cin >> n)
{
Find_Prime(n);//打印素数表
for (int i = 0; i < pNum; i++)
{
if (n%prime[i] == 0)
{
fac[num].x = prime[i];//记录该质因子
fac[num].cnt = 0;//初始化该质因子个数
while (n%prime[i] == 0)//计算同个质因子的个数
{
fac[num].cnt++;
n /= prime[i];
}
num++;//不同的质因子个数加1
}
}
if (n != 1)
{
fac[num].x = n;
fac[num++].cnt = 1;
}
cout << fac[0].x << '^' << fac[0].cnt;
for (int i = 1; i < num; i++)
{
cout << '*' << fac[i].x << '^' << fac[i].cnt;
}
cout << endl;
//初始化
num = 0;
pNum = 0;
}
system("pause");
return 0;
}