Am nevoie de ajutor la aceasta problema.Am incercat in C++,dar nu reusesc sa o duc pana la capat.
Să se scrie un program care să verifice dacă un număr natural n citit de la tastatură este perfect.
Inregistrati-va pentru a beneficia de cunostintele comunitatii, a pune intrebari sau a a raspunde la intrebarilor celorlalti.
Suntem o comunitate care incurajeaza educatia si in care se intalnesc know-how-ul si experienta cu perspective inovative de abordare a problemelor.
Autentificati-va pentru a pune intrebari, a raspunde la intrebarilor celorlalti sau pentru a va conecta cu prietenii.
V-ati uitat parola ? Introduceti adresa de email si veti primi o noua parola.
Please briefly explain why you feel this question should be reported.
Va rugam explicate, pe scurt, de ce credeti ca aceasta intrebare trebuie raportata.
Motivul pentru care raportezi utilizatorul.
Un numar este perfect daca suma divizorilor sai din care se exclude numarul insusi este egala cu numarul.
Deci programul va avea ca variabile s,n,i. S va stoca valoarea sumei, n este numarul iar i este un contor.
Ideea este ca intr-o instructiune repetitiva (for) sa verifice daca suma tuturor divizorilor din intervalul [1, n/2] este egala cu numarul. Am ales ca majorant al intervalului n/2 pentru ca nu exista numar care sa aiba divizor un numar mai mare decat jumatatea sa.
Multumesc frumos.
Se citesc de la tastatură 2 numere a şi b. Să se afişeze toate numerele prime din intervalul [a;b].
Ce gresesc aici? Cand execut programul imi spune cate nr prime sunt in intervalul [a,b], nu care sunt numerele.
Mie imi da niste erori la compilare. Probabil tu esti pe Borland (cred ca asta e motivul pentru ai utilizat conio.h). Dar ideea este ca nu inteleg ce vrei sa faci in program (am inteles cerinta dar nu in ce consta programul). Iti pot da niste observatii fara o baza solida: tie iti afisaza numarul de numere prime pentru ca (practic) ii spui sa-ti afiseze un contor (o variabila care le numara). Si la ultimul if cred ca ai vrut sa pui 2 de egal acolo. Cel putin eu de asta utilizez variabilele logice (pentru comparatii). In caz ca ai invatat subprograme, uite un program care lucreaza cum ar fi trebuit. Daca nu ai invatat si vrei sa rezolvi problema prin metoda propusa de tine, adu niste explicatii referitoare la ce vrei sa faci in program.
Nu,nu am invatat acest tip de program pe care l-ai scris.
Deci eu voiam sa aflu care sunt nr prime din acel interval.
De exemplu pentru a=10 si b=20,sa-mi afiseze „Numerele prime din intervalul [10,20] sunt: 11,13,17,19”.
Si da,la ultima conditie am gresit.Erau 2 de egal.
Daca nu ai observat, am specificat ca am inteles cerinta. Cand o sa inveti subprogramele o sa ti se usureze munca foarte mult, de aceea te-as sfatui sa experimentezi.
O rezolvare fara subprograme:
1. sqrt e una din cele mai nasoale functii din C… NU o mai folosi. Inlocuieste instructiunea j<=sqrt(i) cu j*j<=i. Crede-ma face minuni in privinta timpului de executie.🙂 ar tb sa faci cat de cat o solutie optima programului, bine nu esti departe de rezultat… in programul tau ai O(N*sqrt(N)) dar ptr valori mari ale lui N adica b in cazul de fata ai sa observi ca programul tau poate rula mult si bine. (Complexitatea la programul asta poate fi redusa la O(N*log(N)).) Ptr mai multe informatii intereseaza-te de ciurul lui eratostene. In mare algoritmul cu complexitatea O(N*log(N)) foloseste ciurul cu limita superioara b…in cazul asta si-ti gaseste toate numerele prime de la 1 la b… Tu le scoti pe alea <a si ala-i rezultatul.
2. ca sa fiu carcotas pana la final
In cerinta problemei nu exista restrictii cu privire la memorie sau timp de executie, asa sunt de obicei problemele la informatica din partea inferioara a liceului. Daca intram la optimizare, e clar ca discutia se poate lungi destul de mult. Cel mai rapid algoritm pe care l-am vazut in acest sens este o implementare a ciurului lui Eratostente pe biti care poate fi adaptat pe problema asta, ruland cu o complexitate logaritmica. Dar asta intereseaza doar pe cei ce vor sa devina programatori sau informaticieni sau pe cei care au un profesor de informatica dur. De ce sa intereseze pe unul care nu ii place informatica implementarea cea mai rapida a algoritmului atata timp cat el a creat un program care ruleaza perfect pe intervale mici?