Jump to content

Recommended Posts

  • Moderators
Posted

Enunţ: Să se afişeze primele n numere prime. Exemplu: Date de intrare n=6 Date de ieşire 2 3 5 7 11 13.

 

Prima dată mă gândeam la 

 

#include <iostream>
#include <math.h>
#include <limits>
using namespace std;
int main()
{
    unsigned n,i,d,x,s=0;
    cout<<"n=";
    cin>>n;
    for (i=2;i<=numeric_limits<double>::infinity();i++)
    {
        x=1;
        if (i%2==0 && i!=2)
            x=0;
        else
            d=3;
        while (d<=sqrt(i) && x==1)
        {
            if (i%d==0)
                x=0;
            else
                d=d+2;
        }
        if (x==1)
        {
            cout<<i<<" ";
            s++;
            if (s==n)
                break;
        }
    }
    return 0;
}
 

 

Însă am mai lucrat azi dimineaţă şi l-am mai simplificat. Acum arată aşa:

 

#include <iostream>
#include <math.h>
#include <limits>
using namespace std;
int main()
{
    unsigned n,i,x,s=0,p;
    cout<<"n=";
    cin>>n;
    for (i=2;i<=numeric_limits<double>::infinity();i++)
    {
        x=1;
        for (p=2;p<=i/2;p++)
            if (i%p==0)
                x=0;
        if (x==1)
        {
            cout<<i<<" ";
            s++;
            if (s==n)
                break;
        }
    }
    return 0;
}
 

 

E ok? Ambele afişează ceea ce trebuie :)

  • Upvote 1

Posted

dc mergi pana la infinit, si pui o conditie speciala pt n?

nu era mai logic s mergi direct pana la n?

 

for (i=2;i<=numeric_limits<double>::infinity();i++)

 

trebuia sa fie

for(i=2;i<=n;i++)

 

astfel, disparea si  s++; if (s==n) break;

 

nu mai folosii reprezentarea aia pentru infinit asa usor, nu e o idee buna.

love is a verb
Love is a doing word

  • Moderators
Posted

Nu trebuie pana la n, ci trebuie primele n numere. Adica daca bag, de exemplu, n=10 îmi afişează 2, 3, 5, 7 în loc de 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

  • Upvote 1
Posted

ah da scz. tocmai ce mam trezit.

 

acuma e oleaca mai logic ce ai zis tu :))

 

for (i=2;i<=numeric_limits<double>::infinity();i++)

tot numi place ala, as fi facut ceva gen for(i=2;;i++)  astfel nu e nici o conditie de testat, e ca si cand ai pune for(i=2;true;i++)

pt ca oricum astepti "break" ca sa iesi..

sau direct 

for(i=2;s < n;i++)

eh, e dar cum as face eu, e bun si al tau. scz pt greseala de inainte :))

  • Upvote 2

love is a verb
Love is a doing word

  • Moderators
Posted

O.O Deci pot baga in loc de numeric_limits<double>::infinity(), n>1 ??

 

Thx!!

 

Acum arata asa:

 

#include <iostream>
using namespace std;
int main()
{
    unsigned n,i,x,s=0,p;
    cout<<"n=";
    cin>>n;
    for (i=2;i>1;i++)
    {
        x=1;
        for (p=2;p<=i/2;p++)
            if (i%p==0)
                x=0;
        if (x==1)
        {
            cout<<i<<" ";
            s++;
            if (s==n)
                break;
        }
    }
    return 0;
}
  • Upvote 1
Posted

tiam zis, poti sal lasi liber...poti folosii un while(true) in loc de primul for, facand ceva d genu

i=1;

while(true)

{

i++;                          

//aici e tot codu tau de dupa ce ai citit n

}

  • Upvote 1

love is a verb
Love is a doing word

Posted

While(true) e folosit practic cand stii ca e adevarat, va fii mereu adevarat, se va repeta la infinit. O opresti cu break.

if(n) e echivalent cu if(n!=0)

  • Upvote 1

fWy1P.gif

 

  • Moderators
Posted

OK :).

 

Deci mai simplu decat

#include <iostream>
using namespace std;
int main()
{
    unsigned n,i=1,x,s=0,p;
    cin>>n;
    while (true)
    {
        i++;
        x=1;
        for (p=2;p<=i/2;p++)
            if (i%p==0)
                x=0;
        if (x==1)
        {
            cout<<i<<" ";
            s++;
            if (s==n)
                break;
        }
    }
    return 0;
}

se poate?

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.