Informatică, întrebare adresată de danamocanu71, 9 ani în urmă

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++)


nokia2700: Cred ca e nevoie de adaugat Bi >= 1, pentru orice i € [1;n]
nokia2700: Dar in rest tot de corect
uleiaalex: Dar o zis ca nu neaparat distincte
nokia2700: Yes, aici e nevoie de putina matematica
nokia2700: Practic trebuie sa aflam cati factori are numarul
nokia2700: 30 = 2*3*5 => Kmax = 3
nokia2700: B1 = 1, B2 = 2, B3 = 4
uleiaalex: Atunci sa le faca cei cu matematica. PS: zice nu neaparat distincte, nu trebuie sa fie 2*3*5 poate fi si 1*1*1 si 2*2*2. Asta e parerea mea, alftel este prost enuntata problema.O seara placuta!
nokia2700: O sa adaug o solutie in urmatoarele zile, sper ca vei comenta, poate eu am inteles gresit. O seara buna si tie! E ultima zi din an, petrece-o placut!
uleiaalex: La fel si tie!! Doresc sa comentez in partea buna a sensului si sa discutam cat mai multe probleme! Va pup si sa aveti de asemenea un an nou fericit!

Răspunsuri la întrebare

Răspuns de ArMyFoRHeLL
0
#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;
}


Alte întrebări interesante