#include <iostream>
#include <map>
#include <set>
using namespace std;
void fact(int a, map<int, int>& result);
int main()
{
int a = 1025;
map<int, int> m;
fact(a, m);
cout << a << " = ";
for(map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << "^" << it->second << " ";
}
cout << endl;
cin.get();
}
void fact(int a, map<int, int>& result)
{
multiset<int> exp;
while(a > 1)
{
for(int i = 2; i <= a; i++)
{
if(0 == a % i)
{
a = a / i;
exp.insert(i);
break;
}
}
}
for(multiset<int>::iterator it = exp.begin(); it != exp.end(); )
{
result.insert(make_pair(*it, exp.count(*it)));
it = exp.upper_bound(*it);
}
}
|