Probleme de informatică
Clasa a IX-a
Elementele de bază C++ (46)
Subprograme predefinite (1)
Fişiere text (2)
Algoritmi elementari (111)
Tablouri unidimensionale (83)
Tablouri bidimensionale (64)
Probleme diverse (13)
Clasa a X-a
Subprograme (funcții) (87)
Şiruri de caractere (50)
Tipul înregistrare (26)
Recursivitate (57)
Alocarea dinamică a memoriei (2)
Liste înlănţuite (25)
Algoritmul lui Lee (1)
Clasa a XI-a
Metoda "Divide et impera" (12)
Metoda Backtracking (86)
Metoda Greedy (6)
Programare dinamică (18)
Grafuri neorientate (37)
Grafuri orientate (38)
Arbori (33)
Clasa a XII-a
Elemente de bază C# (32)
POO în C# (13)
Programare vizuală în C# (16)
Examen de bacalaureat
Competențe digitale
Examen de atestat
Admitere UBB (18)
Se dă un număr natural s cu cel mult 9 cifre. Afișaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe s ca produs de divizori proprii distincți ai lui s.
Exemplu:
30 poate fi scris in următoarele moduri:
2 3 5
2 15
3 10
5 6

#include <iostream>
#include <algorithm>
using namespace std;

int D[401],X[401],n;
unsigned long long s;

void afisare(int k)
{
    for(int i=1;i<=k;i++)
        cout<<D[X[i]]<<" ";
    cout<<"\n";
}

void back(int k, unsigned long long pp)
{
    for(int i=X[k-1]+1;i<=n && pp*D[i]<=s;i++)
    {
        X[k]=i;
        pp=pp*D[X[k]];
        if(pp<=s)
            if(pp==s) afisare(k);
            else back(k+1,pp);
        pp=pp/D[X[k]];
    }
}

int main()
{
    cin>>s;
    for(unsigned long long i=2;i*i<=s;i++)
        if(s%i==0)
        {
            D[++n]=i;
            if(i*i!=s)  D[++n]=s/i;
        }
    if(n==0) cout<<"NU EXISTA";
    else
    {
        sort(D+1,D+n+1);
        back(1,1);
    }
    return 0;
}

15 oct 2019
Site-ul conține 877 de probleme rezolvate
Copyright © 2009-2018 Muresan Vasile Ciprian