pętlę - licbzy pierwsze
Ostatnio zmodyfikowano 2012-12-30 23:23
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 #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. 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 no tylko t jest false, a nie różne od false zatem czemu wypisuje " 2 " :O ? ;/ |
|
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 |
|
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 ? |
|
jsc |
» 2012-12-30 23:12:39 Oczywiście, same dwójki czyli liczby pierwsze... |
|
kejkun Temat założony przez niniejszego użytkownika |
» 2012-12-30 23:18:45 nie wiem o co Ci chodzi więc zobacz: #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. |
|
jsc |
» 2012-12-30 23:23:13 Nie zauważyłem inkrementacji p. |
|
« 1 » |