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

De ce primesc doar 90 de puncte pe rezolvare?

#1539 - apartenenta

Scrieţi în limbajul C/C++ definiţia completă a subprogramului apartenenta, care primeşte ca argument un număr natural nenul n şi returnează valoarea 1 dacă n aparţine mulţimii H={2^{x}3^{y} 5^{z}|x,y,z∈N}, respectiv 0 în caz contrar.


int apartenenta(long long int n)

{ if(n%7!=0){return 1;}

return 0;

}

Răspunsuri la întrebare

Răspuns de andrei750238
4

Intrebarea mai buna e de ce primesti 90 de puncte pe o rezolvare complet gresita. Probabil majoritatea unit testurilor au avut numere care sunt divizibile la 7.

De ce functia ta e gresita ?

Subprogramul tau verifica daca numarul este divizibil cu 7. Daca este atunci returneaza 0, daca nu este returneaza 1.

Asta ar functiona daca toate numerele prime ar fi 2,3,5 si 7. Dar sunt o infinitate de alte numere prime. Spre exemplu 11,13,17,23, etc.

Daca am avea numarul 66 = 2*3*11 programul tau ar returna adevarat. Dar e clar ca ar trebui sa returneze fals (66 nu apartine multimii H).

Functie corecta (100 puncte):

bool apartenenta(unsigned n) {

while (n % 2 == 0)n /= 2;

while (n % 3 == 0)n /= 3;

while (n % 5 == 0)n /= 5;

if (n == 1) return 1;

else return 0;

}


missfoxy: Am inteles. Multumesc mult!
Alte întrebări interesante