Rezolvare completă PbInfo #1960 Perfecte

Un număr natural nenul se numește perfect dacă este egal cu suma divizorilor săi naturali strict mai mici decât el.
Exemplu: 28 este număr perfect pentru că 28 = 1 + 2 + 4 + 7 + 14.

Cerința

Se dă un șir de n numere naturale. Pentru fiecare element din șir se va afișa valoarea 1 dacă acesta este perfect sau 0 în caz contrar.

Date de intrare

Programul citește de la tastatură numărul n și apoi n numere naturale.

Date de ieșire

Programul va afișa pe ecran șirul de valori 1 și 0 separate prin câte un spațiu, conform cerinței.

Restricții și precizări

  • 0 < n < 1000
  • numerele citite vor fi mai mici decât 1019

Exemplu

Intrare

5
28 7 8 9 6

Ieșire

1 0 0 0 1

Explicație

28 și 6 sunt numere perfecte.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Perfecte:

#include"iostream"

using namespace std;

typedef unsigned long long LL;

bool esteprim(LL a)
{
    if(a < 2)
        return false;
    if(a == 2)
        return true;
    if((a & 1) == 0)
        return false;
    for(LL i=3 ; i*i<=a ; ++i)
        if(a % i == 0)
            return false;
    return true;
}
LL putere(LL baza, LL exponent)
{
    LL rez = baza;
    for(LL i = 1 ; i < exponent ; ++i)
            rez *= baza;
        return rez;
}
int main()
{

    LL V[8]={}, k=0 , N, X[1000];
    for(LL y=1 ; y< 32 ; ++y)
        if(esteprim(putere(2, y)-1))
            V[k++]=(putere(2, y)-1)*putere(2,(y-1));

    cin>>N;

    for(int i=0 ; i< N ; ++i)
        cin>>X[i];
    for(int i=0 ; i< N ; ++i)
    {
        bool gasit = false;
        for(LL j=0 ; j< 8 ; ++j)
            if(X[i] == V[j])
            {
                cout<<"1 ";
                gasit = true;
            }
        if(!gasit)
            cout<<"0 ";
    }
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1960 Perfecte

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1960 Perfecte de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!