Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pętlę - licbzy pierwsze

Ostatnio zmodyfikowano 2012-12-30 23:23
Autor Wiadomość
kejkun
Temat założony przez niniejszego użytkownika
pętlę - licbzy pierwsze
» 2012-12-30 22:27:40
nie rozumiem złożoności kodu , proszę o wyjaśnienie.
pytania moje niżej
C/C++
#include <iostream>

using namespace std;

int main()
{
    int n, i, p, lp;
    bool t;
   
    cin >> n;
   
    lp = 0;
    p = 2;
   
    while( lp < n )
    {
        t = true;
        for( i = 2; i < p; i++ )
        if( p % i == 0 )
        {
            t = false;
            break;
        }
       
        if( t )
        {
            cout << p << " ";
            lp++;
        }
        p++;
    }
   
    cout << endl;
   
    return 0;
}


1.
C/C++
for( i = 2; i < p; i++ )

i = 2   , ale p = 2
stąd  2 < 2   fałsz, zatem ta pętla powinna wykonać 0 obiegów ?????

2. przenalizujmy sytuacje dla " 2"
if ( 2 % 2 = = 0 , a tak jest)
wtedy :
t = false
break -> koniec ? i idziemy do .. ?
if ( t rózne od false )
to
C/C++
cout << p << " ";
lp++;
 no tylko t  jest false, a nie różne od false
zatem czemu wypisuje  " 2 " :O ?
;/
P-72461
jsc
» 2012-12-30 22:43:49
Przy 1 masz rację (ten kod jest po prostu zły), a co do 2 to:
w wierszu 17 t przyjmuje za wartość true
w wierszu 18 to twój punkt 1, ale nakazuję on przeskoczyć przez strukturę sterującą if i sterowanie ląduje w wierszu 24
w wierszu 25 jest if sprawdza czy t to true i każe wykonać swoje ciało, czyli
w wierszu 27 następuje wyświetlenie wartości p czyli 2
P-72463
kejkun
Temat założony przez niniejszego użytkownika
» 2012-12-30 23:02:55
(ten kod jest po prostu zły)
a czemu zły ?
jak dobrze wypisuje liczby pierwsze :D ?
P-72464
jsc
» 2012-12-30 23:12:39
Oczywiście, same dwójki czyli liczby pierwsze...
P-72467
kejkun
Temat założony przez niniejszego użytkownika
» 2012-12-30 23:18:45
nie wiem o co Ci chodzi

więc zobacz:

C/C++
#include <iostream>

using namespace std;

int main()
{
    int n, i, p, lp;
    bool t;
   
    cin >> n;
   
    lp = 0;
    p = 2;
   
    while( lp < n )
    {
        t = true;
       
        for( i = 2; i < p; i++ )
        if( p % i == 0 )
        {
            t = false;
            break;
        }
        if( t )
        {
            cout << p << " ";
            lp++;
        }
        p++;
    }
    cout << endl;
   
    return 0;
}

dla n = 5
5 kolejnych liczb pierwszych daje ten kod.
P-72469
jsc
» 2012-12-30 23:23:13
Nie zauważyłem inkrementacji p.
P-72470
« 1 »
  Strona 1 z 1