# include <stdio.h>
# include <math.h>
# include <iostream>
# include <map>
using namespace std;
// A function to print all prime factors of a given number n
map<int,int> m;
void primeFactors(int n)
{
// Print the number of 2s that divide n
while (n%2 == 0)
{
printf("%d ", 2);
m[2] += 1;
n = n/2;
}
// n must be odd at this point. So we can skip one element (Note i = i +2)
for (int i = 3; i <= sqrt(n); i = i+2)
{
// While i divides n, print i and divide n
while (n%i == 0)
{
int k = i;
printf("%d ", i);
m[k] += 1;
n = n/i;
}
}
// This condition is to handle the case whien n is a prime number
// greater than 2
if (n > 2)
m[n] += 1;
printf ("%d ", n);
cout << endl;
}
/* Driver program to test above function */
int main()
{
int n = 72;
primeFactors(n);
map<int,int>::iterator it;
int to = 1;
for(it = m.begin(); it != m.end(); ++it){
cout << it->first << " appeared " << it->second << " times "<< endl;
to *= (it->second+1);
}
cout << to << " total facts" << endl;
return 0;
}
IyBpbmNsdWRlIDxzdGRpby5oPgojIGluY2x1ZGUgPG1hdGguaD4KIyBpbmNsdWRlIDxpb3N0cmVhbT4KIyBpbmNsdWRlIDxtYXA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKLy8gQSBmdW5jdGlvbiB0byBwcmludCBhbGwgcHJpbWUgZmFjdG9ycyBvZiBhIGdpdmVuIG51bWJlciBuCm1hcDxpbnQsaW50PiBtOwp2b2lkIHByaW1lRmFjdG9ycyhpbnQgbikKewogICAgLy8gUHJpbnQgdGhlIG51bWJlciBvZiAycyB0aGF0IGRpdmlkZSBuCiAgICB3aGlsZSAobiUyID09IDApCiAgICB7CiAgICAgICAgcHJpbnRmKCIlZCAiLCAyKTsKICAgICAgICBtWzJdICs9IDE7CiAgICAgICAgbiA9IG4vMjsKICAgIH0KIAogICAgLy8gbiBtdXN0IGJlIG9kZCBhdCB0aGlzIHBvaW50LiAgU28gd2UgY2FuIHNraXAgb25lIGVsZW1lbnQgKE5vdGUgaSA9IGkgKzIpCiAgICBmb3IgKGludCBpID0gMzsgaSA8PSBzcXJ0KG4pOyBpID0gaSsyKQogICAgewogICAgICAgIC8vIFdoaWxlIGkgZGl2aWRlcyBuLCBwcmludCBpIGFuZCBkaXZpZGUgbgogICAgICAgIHdoaWxlIChuJWkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBrID0gaTsKICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBpKTsKICAgICAgICAgICAgbVtrXSArPSAxOyAKICAgICAgICAgICAgbiA9IG4vaTsKICAgICAgICB9CiAgICB9CiAKICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGllbiBuIGlzIGEgcHJpbWUgbnVtYmVyCiAgICAvLyBncmVhdGVyIHRoYW4gMgogICAgaWYgKG4gPiAyKQogICAgICAgIG1bbl0gKz0gMTsgCiAgICAgICAgcHJpbnRmICgiJWQgIiwgbik7CgogICAKICAgY291dCA8PCBlbmRsOwp9CiAKLyogRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbiAqLwppbnQgbWFpbigpCnsKICAgIGludCBuID0gNzI7CiAgICBwcmltZUZhY3RvcnMobik7CiAgICBtYXA8aW50LGludD46Oml0ZXJhdG9yIGl0OwogICAgaW50IHRvID0gMTsKICAgIGZvcihpdCA9IG0uYmVnaW4oKTsgaXQgIT0gbS5lbmQoKTsgKytpdCl7CiAgICAgICAgY291dCA8PCBpdC0+Zmlyc3QgPDwgIiBhcHBlYXJlZCAiIDw8IGl0LT5zZWNvbmQgPDwgIiB0aW1lcyAiPDwgZW5kbDsKICAgICAgICB0byAqPSAoaXQtPnNlY29uZCsxKTsKICAgIH0KICAgIGNvdXQgPDwgdG8gPDwgIiB0b3RhbCBmYWN0cyIgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==