Liczby pierwsze
Ostatnio zmodyfikowano 2013-11-30 22:09
Tym3k Temat założony przez niniejszego użytkownika |
Liczby pierwsze » 2013-11-30 17:22:06 #include <iostream> #include <conio.h> #include <ctime> #include <cstdlib> #include <math.h> using namespace std;
void uzupelnij_tablice( int tablica[], int ile, int min, int max ) { srand( time( 0 ) ); for( int i = 0; i < ile; i++ ) { tablica[ i ] = rand() %( max - min + 1 ) + min; cout << tablica[ i ] << ","; } cout << endl << endl; }
int liczby_pierwsze( int tablica[], int ile, int max ) { int x, i; for( int j = 0; j < ile; j++ ) { if( tablica[ j ] > max ) max = tablica[ j ]; } cout << "max: " << max << endl << endl; int zakres_gorny; zakres_gorny = int( sqrt( max ) ); cout << zakres_gorny; for( int i = 2; i < zakres_gorny; i++ ) { if( tablica[ i ] != 0 ) { x = i + i; while( x <= ile ) { tablica[ x ] = 0; x += i; } } } for( i = 2; i < ile; i++ ) if( tablica[ i ] != 0 ) { cout << "liczby pierwsze: " << tablica[ i ] << endl; } }
int main() { int dlugosc; int tab[ dlugosc ]; do { cout << "wybierz dluggosc tablicy od 10 do 20" << endl; cin >> dlugosc; } while( dlugosc < 10 || dlugosc > 20 ); uzupelnij_tablice( tab, dlugosc, 1, 99 ); liczby_pierwsze( tab, dlugosc, 1 ); getch(); }
Czasami do liczby pierwszej dodaje jakby 1 lub 2, ktoś może widzi błąd? w sensie, gdy na przykład podam 10 liczb: 83 49 79 62 94 89 2 3 35 24 Podaje z tego liczby pierwsze 79 62 89 3 62 nie jest liczbą pierwszą tylko 61 i właśnie, zawsze się trafi jedna lub więcej takich błędnych wyników które są powiększone/pomniejszenie o 2 lub 1. |
|
pekfos |
» 2013-11-30 19:15:37 Algorytm sprawdzający jest zły i niepoprawnie tworzysz tablicę tab.
|
|
Tym3k Temat założony przez niniejszego użytkownika |
» 2013-11-30 20:47:23 Algorytm napisze inaczej, ale mógłbyś mi powiedzieć co źle zrobiłem z tablicą? |
|
pekfos |
» 2013-11-30 20:48:43 Rozmiar tablicy musi być stałą, znaną w czasie kompilacji. |
|
Tym3k Temat założony przez niniejszego użytkownika |
» 2013-11-30 22:09:59 #include <iostream> #include <conio.h> #include <ctime> #include <cstdlib> #include <math.h>
using namespace std;
const int dlugosc = 100; int tab[ dlugosc ];
int uzupelnij_tablice( int tablica[], int ile, int min, int max ) { srand( time( 0 ) ); for( int i = 0; i < ile; i++ ) { tablica[ i ] = rand() %( max - min + 1 ) + min; cout << tablica[ i ] << ","; } cout << endl << endl; }
bool czy_pierwsza( int l ) { for( int i = 2; i < l; i++ ) { bool wynik = true; for( int i = 2; i < l; i++ ) { if( l > 2 ) if( l % i == 0 ) { wynik = false; break; } } return wynik; } } int powtorka( int l ) { int s = 0; for( int i = 0; i < l; i++ ) { if( l == tab[ i ] ) { s = s + 1; } } return s; }
int main() { uzupelnij_tablice( tab, dlugosc, 1, 99 ); for( int i = 0; i < dlugosc; i++ ) { int l = tab[ i ]; if( czy_pierwsza( tab[ i ] ) ) cout << "Liczba pierwsza: " << tab[ i ] << " wystapila: " << powtorka( tab[ i ] ) << " razy" << endl; } getch(); }
zrobiłem! |
|
« 1 » |