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}
H={2x⋅3y⋅5z|x,y,z∈N}
, respectiv 0 în caz contrar.
Restricții și precizări
•1 ≤ n ≤ 109
Exemple
apartenenta(180) = 1
apartenenta(385) = 0
Acesta ar fi codul meu:
int apartenenta(int n)
{if(n%30==0)
return 1;
if(n%30!=0) return 0;
}
Nu inteleg de ce iau doar 55 puncte...
JolieJulie:
nici eu...avand in vedere ca e un subprogram,e ok daca nu precizezi apartenenta x,y,z la N si ca 1 ≤ n ≤ 109...poate ca trebuia sa pui restrictiile in functie...desi nu cred
Răspunsuri la întrebare
Răspuns de
2
In raspunsul tau, ai presupus ca x,y si z sunt toate mai mari decat 0.
In acel caz, inmultite valorile 2*3*5=30 deci intr-adevar ar trebui sa fie multiplu de 30.
Dar daca oricare dintre ele ar fi egal cu 0, atunci factorul respectiv ar deveni valoarea neutra, adica 1.
Deci pot sa apartina multimii H si combinatii de produse de 2 sau un singur factor la orice putere.
De exemplu, 40=2^3*5 face parte din H, la fel si 27=3^3 sau 4=2^2
Atunci, o tactica buna ar fi sa imparti numarul n la fiecare dintre factorii respectivi pana cand nu se mai imparte exact.
Daca la final, obtii valoarea 1, inseamna ca n este un produs doar din acei factori. Daca obtii o valoare diferita de 1, inseamna ca mai sunt si alti factori diferiti de 2 3 si 5.
Subprogramul la care m-am gandit este cel de mai jos
int apartenenta(int n){
while(n%5==0){
n=n/5;
}
while(n%3==0){
n=n/3;
}
while(n%2==0){
n=n/2;
}
if(n==1){
return 1;
}
else{
return 0;
}
}
In acel caz, inmultite valorile 2*3*5=30 deci intr-adevar ar trebui sa fie multiplu de 30.
Dar daca oricare dintre ele ar fi egal cu 0, atunci factorul respectiv ar deveni valoarea neutra, adica 1.
Deci pot sa apartina multimii H si combinatii de produse de 2 sau un singur factor la orice putere.
De exemplu, 40=2^3*5 face parte din H, la fel si 27=3^3 sau 4=2^2
Atunci, o tactica buna ar fi sa imparti numarul n la fiecare dintre factorii respectivi pana cand nu se mai imparte exact.
Daca la final, obtii valoarea 1, inseamna ca n este un produs doar din acei factori. Daca obtii o valoare diferita de 1, inseamna ca mai sunt si alti factori diferiti de 2 3 si 5.
Subprogramul la care m-am gandit este cel de mai jos
int apartenenta(int n){
while(n%5==0){
n=n/5;
}
while(n%3==0){
n=n/3;
}
while(n%2==0){
n=n/2;
}
if(n==1){
return 1;
}
else{
return 0;
}
}
Alte întrebări interesante
Biologie,
8 ani în urmă
Engleza,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă