分解质因数
思路:
- 从2开始遍历质数,采用每次都加一,是因为若是合数则会自动跳过,不会影响质数的检测,更简便(如遍历过质数2之后,则4,6,8等都会跳过的)
- 自动跳过的原因是,while可以一直除以2,知道不能被2除为止
- 采用map来存储,方便统计
细节:
- 别忘了当输入为1的时候
- 设置flag,可以方便输出
*
号
#include<iostream>
#include<map>
using namespace std;
int main()
{
long long num;
long long prime = 2;
map<long long, int>cprime;
map<long long, int>::iterator iter;
cin >> num;
cout<<num<<'=';
if(num==1)
{
cout<<1;
return 0;
}
while (num!=1&&prime<=num)
{
if (num % prime == 0)
{
num /= prime;
iter = cprime.find(prime);
if (iter != cprime.end())
(*iter).second++;
else {
cprime.insert(make_pair(prime, 1));
}
}
else {
prime++;
}
}
int flag = 0;
for (iter = cprime.begin(); iter!=cprime.end(); iter++)
{
if (flag != 0)
{
cout << '*';
}
flag = 1;
if ((*iter).second == 1)
cout << (*iter).first;
else
cout << (*iter).first << '^' << (*iter).second;
}
return 0;
}