Informatică, întrebare adresată de AnneMarrie340, 9 ani în urmă

Scrieti un program in C++ care verifica daca un numar e prim.Dau coroana si 50 de puncte.


Mulţumesc anticipat!

Răspunsuri la întrebare

Răspuns de VargaMarcel
1
#include <iostream>
#include <cmath>
using namespace std;
int n,i,k;
int main ()
{cin>>n;
k=sqrt(n);
for(i=2;i<=k;i++)
if (n%i==0) c++;
if(c==0) cout<<"Numarul este prim";
else cout<<"Numarul nu este prim";
return 0;}


AnneMarrie340: Multumesc!
VargaMarcel: N-ai pentru ce! Bafta la teme!
AnneMarrie340: Merci!
Răspuns de antonii
1
Asta e cea mai buna metoda (extrem de optimizata):

bool CheckPrime(int Nr){
        bool IsPrime=true;
        if(Nr!=2){
                 if(Nr%2!=0){
                       for(int x=3;x<=sqrt((double)Nr);x+=2){
                                 if(Nr%x==0) IsPrime=false;
                       }
                       return IsPrime;
                 }else{
                        return false;
                  }
         }else{
             return true;
        }
}

antonii: Dupa cum observi loop-ul sare din 2 in doi deoarece orice alt numar par diferit de doi nu e prim..deci e mult mai rapid..2 e un caz special
AnneMarrie340: Ok.Merci!
antonii: cp
VargaMarcel: sqrt(double(nr)) este chiar radacina patrata a numarului, deci rezolvarea nu este corecta, aceasta afisand tot timpul ca numarul nu este prim.
AnneMarrie340: Eu facusem alte programe cu "cout<<" si "cin>>"
AnneMarrie340: cout << cin >>
AntiEaglesDavids: sqrt((double)Nr) .... ma dor ochii
AntiEaglesDavids: mai bine pastrezi intr-o variabila sqrt((double)Nr) pt ca sqrt() ingreuneaza mult executia
antonii: Varag...nu e adevarat ce spui...poti chiar sa scoti double si tot va merge..am pus double deoarece vroiam sa iau exact radicalul(da stiu nu e necesar) insa tot va merge...
Alte întrebări interesante