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
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
Studii sociale,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă