Informatică, întrebare adresată de laurstefan2002, 8 ani în urmă

Problema #1960 Perfecte de pe pbinfo va rog:
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.
Am facut o de 10p din cauza limitelor de timp depasite, iar la indicatii zice ca sa se rezolve cu fornula lui Euclid.

Răspunsuri la întrebare

Răspuns de pmarian98
2

Răspuns:

#include <bits/stdc++.h>

using namespace std;

long long n,x,putere = 1,nr = 0;

long long perf[10];

int ciur[] = {2,3,5,7,13,17,19,31};

int main()

{

   long long i,c = 0,j;

   for( i=0; i<8; i++){

       while( nr != ciur[i] ){

           nr++; putere *= 2;

       }

       perf[++c] = (putere / 2) * (putere - 1);

   }

   cin >> n;

   for( i=1; i<=n; i++){

       cin >> x;

       bool ok = false;

       for( j=1; j<=c; j++)

           if( x == perf[j] ) ok = true;

       cout << ok << ' ';

   }

   return 0;

}

Explicație:

Alte întrebări interesante