输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1^k1p2^k2…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。
输入样例:
1323
结尾无空行
输出样例:
1323=3^3*7^2
#include<iostream>
#include<cmath>
using namespace std;
void sushu(int &i, int & c)//就判断是不是素数的代码
{
for (int m = 2; m < i; m++)
{
if (i%m== 0)
{
if (i == 2 && i == 2)
{
c = 1;
break;
}
else
{
break;
}
}
else if (i%m != 0 && m == i - 1)
{
c = 1;
break;
}
}
};
void putdown(long &a,long &b,int &c)//用来储存对应素数的幂次数的大小
{
for (int i = 0; ; i++)
{
if (a%int(pow(b, i)) != 0)
{
c = i - 1;
break;
}
}
};
int main()
{
int c = 0;
long int a;
long array[100000]; array[0] = 0;
cin >> a;
int num = 0;//用来计算这个数里包含的素数个数;
int num1=2;//用来计算每个素数的对应幂次数大小;
long array1[100000];
for (int i = 2; i < a; i++)
{
if(a%i == 0)
{
sushu(i,c);
if(c==1)
{
array[num] = i;
c = 0;
num++;
}
}
}//array[]存储素数
if (array[0] == 0)
{
cout << a << "=" << a;
}//判断输入数字本来就是素数的情况
else
{
for (int i = 0; i < num; i++)
{
putdown(a, array[i], num1);
array1[i] = num1;
}//存储素数对应的幂次数大小;
cout << a << "=";
for (int i = 0; i < num; i++)
{
if (i == 0 && array1[i] != 1)
{
cout << array[i] << "^" << array1[i];
}
else if (i == 0 && array1[i] == 1)
{
cout << array[i];
}
else if (i > 0 && array1[i] == 1)
{
cout << "*" << array[i];
}
else
{
cout << "*" << array[i] << "^" << array1[i];
}
}
}//输出结果
}