Pentru fiecare numar A trebuie sa gasiti cel mai mare numar K cu proprietatea ca un sir B de numere naturale,nu neaparat distincte,astfel incat (B1+1)(B2+1)...(BK+1)=A.(C++)

Răspuns :

#include <iostream>
using namespace std;
int prim(int x)
{
    if (x != 2 && x % 2 == 0)
        return 0;
    for (int i = 3; i*i <= x; i = i + 2)
        if (x%i == 0)
            return 0;
    return 1;
}
int cmmnk(int x)
{
    int d = 2, k = 0;
    if (prim(x))
        return 1;
    while (x != 1)
    {
        while (x%d == 0)
            x = x / d;
        k = k + 1;
        d = d + 1;
    }
    return k-1;
}

int main()
{
    int a,x,v[100],t=0;
    cin >> a;
    for (int i = 1; i <= a; i++)
    {
        cin >> x;
        v[++t] = cmmnk(x);
    }
    for (int i = 1; i <= t; i++)
        cout << v[i] << ' ';
    return 0;
}