思路
- 1.看着挺简单的一道题,还是错了很多地方。
- 2.分成三个部分,输入为1,输入为质数,输入不为质数,前俩者输出自己就行了。
- 3.当输入不为质数时,当a>1是就继续更新a,怎么更新呢,能整除就整除,即a=a/k(当a%k==0)时,那怎么统计个数呢,则当a%k==0,一直成立的时候,就一直更新,并且num++;
- 4.算一个就可以输出一个了,没必要用一个东西来保存。
我出错的一些点
- 1.没考虑为1这种情况。
- 2.循环里面纠结了好久还是出错。
- 3.用一个东西来保存,其实没必要的。
- 4.因为k(除数)是从小到大的(并且统计了个数),所以不需要担心后面能整除的k是俩个比它小的质数的乘积,因为如果有的话也在前面被除掉了。
代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<stack>
#include<string>
#include<math.h>
using namespace std;
long isPrim(long a)
{
if (a == 1)
return 0;
for (int i = 2; i <= sqrt(a); i++)
{
if (a%i == 0)
return i;
}
return 0;
}
int main()
{
long a, b;
cin >> a;
bool first = true;
b = isPrim(a);
cout << a << "=";
if (!b)
{
cout << a << endl;
return 0;
}
else
{
long k = b;
while (a > 1)
{
int num = 0;
if (a%k == 0)
{
if (first)
{
cout << k;
first = false;
}
else
cout << "*"<<k;
}
while (a%k == 0)
{
a = a / k;
num++;
}
if (num > 1)
{
cout << "^" << num;
}
k++;
}
}
cout << endl;
return 0;
}