Testaţi dacă un număr natural dat este prim.
Analiza Programului
Prin număr prim înţelegem orice număr natural care se împarte doar la 1 şi la el însuşi; se considera ca 2 este cel mai mic număr prim.
Rezolvarea in C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Exercise15 { class Program { static void Main(string[] args) { //numarul care va fi testat int number; //presupunem ca un numar este prim bool prime = true; //contor int i = 2; //citeste numarul de la tastura number = int.Parse(Console.ReadLine()); //verifica daca numarul este divizibil cu numerele cuprinse intre 2 si jumatatea lui while (i <= number/2) { //daca are divizor if (number % i == 0) prime = false; i += 1; } if (prime) Console.WriteLine("Numarul {0} este prim", number); else Console.WriteLine("Numarul {0} nu este prim", number); Console.Read(); } } }
Rezolvarea in C++
//the header conio, which include library functions for performing "console input and output" #include <conio.h> //the header iostream, which supports the C++ I/O system #include <iostream> //tells the compiler to use the std namespace using namespace std; //begin program execution int main() { int number; cout<<"Introduceti numarul"<<endl; cin>>number; //assume the number is prime bool prime = true; //counter int i = 2; //check while(i <= number/2) { if(number % i == 0) prime = false; i += 1; } if(prime) cout<<"Numarul "<<number<<" este prim"<<endl; else cout<<"Numarul "<<number<<" nu este prim"<<endl; //terminates main and return value to the calling process return 0; }
Category: Uncategorized
Morosanu Dan says:
Nu vreau sa o fac eu pe expertul, dar de ce nu incerci o optimizare ceva ?
1. Bine ar fi fost sa fi luat o variabila, in care, inainte de while, sa fi stocat valoarea (number / 2) : pentru a nu face acea impartire la fiecare iteratie ( mai ales ca number dupa ce e citit, devine “constant” ).
2. Cand verifici daca restul impartirii lui number la i este 0, ar fi mers un break ceva … Sa zicem ca vrei sa verifici numarul 15738 daca este prim ; atata timp cat restul impartirii lui 15738 la 2 este 0, ce rost are sa mai faci inca 7868 iteratii, cand puteai sa dai un break, sau sa afisezi direct mesajul ca numarul nu este prim, si terminai cu return ?
zeltera says:
Asa-i. Inmarea majoritate a exemplelor folosite sunt facute optimizari.
O parte dintre exercitii/solutii au fost luate de pe forumuri sau au fost propuse de elevi (studenti) si asta este nivelul caruia i se adreseaza. Tot ceea ce spui tu este corect, si iti multumesc pentru corectura.