// C++ program to find if it is possible to
// write a number n as product of exactly k
// positive numbers greater than 1.
#include <bits/stdc++.h>
using namespace std;
// Prints k factors of n if n can be written
// as multiple of k numbers. Else prints -1.
void kFactors(int n, int k)
{
// A vector to store all prime factors of n
vector<int> P;
// Insert all 2's in vector
while (n%2 == 0)
{
P.push_back(2);
n /= 2;
}
// n must be odd at this point
// So we skip one element (i = i + 2)
for (int i=3; i*i<=n; i=i+2)
{
while (n%i == 0)
{
n = n/i;
P.push_back(i);
}
}
// This is to handle when n > 2 and
// n is prime
if (n > 2)
P.push_back(n);
// If size(P) < k, k factors are not possible
if (P.size() < k)
{
cout << "-1" << endl;
return;
}
// printing first k-1 factors
for (int i=0; i<k-1; i++)
cout << P[i] << ", ";
// calculating and printing product of rest
// of numbers
int product = 1;
for (int i=k-1; i<P.size(); i++)
product = product*P[i];
cout << product << endl;
}
// Driver program to test above function
int main()
{
int n = 54, k = 3;
kFactors(n, k);
return 0;
}
Ci8vIEMrKyBwcm9ncmFtIHRvIGZpbmQgaWYgaXQgaXMgcG9zc2libGUgdG8gCi8vIHdyaXRlIGEgbnVtYmVyIG4gYXMgcHJvZHVjdCBvZiBleGFjdGx5IGsgCi8vIHBvc2l0aXZlIG51bWJlcnMgZ3JlYXRlciB0aGFuIDEuIAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4gCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAogIAovLyBQcmludHMgayBmYWN0b3JzIG9mIG4gaWYgbiBjYW4gYmUgd3JpdHRlbiAKLy8gYXMgbXVsdGlwbGUgb2YgayBudW1iZXJzLiAgRWxzZSBwcmludHMgLTEuIAp2b2lkIGtGYWN0b3JzKGludCBuLCBpbnQgaykgCnsgCiAgICAvLyBBIHZlY3RvciB0byBzdG9yZSBhbGwgcHJpbWUgZmFjdG9ycyBvZiBuIAogICAgdmVjdG9yPGludD4gUDsgCiAgCiAgICAvLyBJbnNlcnQgYWxsIDIncyBpbiB2ZWN0b3IgCiAgICB3aGlsZSAobiUyID09IDApIAogICAgeyAKICAgICAgICBQLnB1c2hfYmFjaygyKTsgCiAgICAgICAgbiAvPSAyOyAKICAgIH0gCiAgCiAgICAvLyBuIG11c3QgYmUgb2RkIGF0IHRoaXMgcG9pbnQgCiAgICAvLyBTbyB3ZSBza2lwIG9uZSBlbGVtZW50IChpID0gaSArIDIpIAogICAgZm9yIChpbnQgaT0zOyBpKmk8PW47IGk9aSsyKSAKICAgIHsgCiAgICAgICAgd2hpbGUgKG4laSA9PSAwKSAKICAgICAgICB7IAogICAgICAgICAgICBuID0gbi9pOyAKICAgICAgICAgICAgUC5wdXNoX2JhY2soaSk7IAogICAgICAgIH0gCiAgICB9IAogIAogICAgLy8gVGhpcyBpcyB0byBoYW5kbGUgd2hlbiBuID4gMiBhbmQgCiAgICAvLyBuIGlzIHByaW1lIAogICAgaWYgKG4gPiAyKSAKICAgICAgICBQLnB1c2hfYmFjayhuKTsgCiAgCiAgICAvLyBJZiBzaXplKFApIDwgaywgayBmYWN0b3JzIGFyZSBub3QgcG9zc2libGUgCiAgICBpZiAoUC5zaXplKCkgPCBrKSAKICAgIHsgCiAgICAgICAgY291dCA8PCAiLTEiIDw8IGVuZGw7IAogICAgICAgIHJldHVybjsgCiAgICB9IAogIAogICAgLy8gcHJpbnRpbmcgZmlyc3Qgay0xIGZhY3RvcnMgCiAgICBmb3IgKGludCBpPTA7IGk8ay0xOyBpKyspIAogICAgICAgIGNvdXQgPDwgUFtpXSA8PCAiLCAiOyAKICAKICAgIC8vIGNhbGN1bGF0aW5nIGFuZCBwcmludGluZyBwcm9kdWN0IG9mIHJlc3QgCiAgICAvLyBvZiBudW1iZXJzIAogICAgaW50IHByb2R1Y3QgPSAxOyAKICAgIGZvciAoaW50IGk9ay0xOyBpPFAuc2l6ZSgpOyBpKyspIAogICAgICAgIHByb2R1Y3QgPSBwcm9kdWN0KlBbaV07IAogICAgY291dCA8PCBwcm9kdWN0IDw8IGVuZGw7IAp9IAogIAovLyBEcml2ZXIgcHJvZ3JhbSB0byB0ZXN0IGFib3ZlIGZ1bmN0aW9uIAppbnQgbWFpbigpIAp7IAogICAgaW50IG4gPSA1NCwgayA9IDM7IAogICAga0ZhY3RvcnMobiwgayk7IAogICAgcmV0dXJuIDA7IAp9IA==