liczby pierwsze
Ostatnio zmodyfikowano 2011-12-20 14:09
ptaq Temat założony przez niniejszego użytkownika |
» 2011-12-20 11:21:15 domyślam się ze dostrzegasz błąd w tym algorytmie =], więc prosze nie znęcaj sie :D tylko podaj jakąś czytelniejsza wskazówke ;p |
|
pekfos |
» 2011-12-20 12:27:20 1. Twój program nie spełnia wymagań postawionych w zadaniu. 2. Jeśli myślisz, że tworzenie programów to tylko pisanie kodu, to się mylisz -.- Napisz testy, sformatuj wyjście, itp. bo same dobre wyniki nie wystarczą bi ci zaliczyli. |
|
ison |
» 2011-12-20 12:50:29 to normalne że dostajesz błędną odpowiedź jak nie stosujesz się do tego co jest napisane w zadaniu ;) czytanie ze zrozumieniem jest dosyć ważną umiejętnością przy rozwiązywaniu tego typu zadań. Co więcej w tym temacie już zostało dokładnie napisane co masz źle, przeczytaj jeszcze raz wszystkie posty :) |
|
ptaq Temat założony przez niniejszego użytkownika |
» 2011-12-20 13:06:57 hmmm teraz juz chyba spełnia wszystkie warunki??? i dalej nic #include <iostream> #include <cmath>
bool sprawdz( int a, float p ) { int d = 3; if( a == 1 || a % 2 == 0 ) return false; do { if( a % d == 0 ) return false; d += 2; } while( d < p ); return true; }
int main()
{ unsigned long n; unsigned int y; float p; do { std::cin >> n; } while( n >= 100000 ); unsigned long int a[ n ]; unsigned long int i = 0; do { std::cin >> a[ i ]; if( a[ i ] >= 1 && a[ i ] <= 10000 ) i++; } while( i < n ); i = 0; do { y = a[ i ]; p = sqrt( y ); if( y == 2 || y == 3 ) { std::cout << "TAK" << std::endl; } else if( sprawdz( y, p ) == true ) { std::cout << "TAK" << std::endl; } else if( sprawdz( y, p ) == false ) { std::cout << "NIE" << std::endl; } i++; } while( i < n ); return 0; }
|
|
szyx_yankez |
» 2011-12-20 13:13:53 To jest najprostsze zadanie. Ty za bardzo kombinujesz :D
Obczaj ten kod, przeanalizuj i postaraj się zrozumieć, nie kopiuj bezmyślnie:D
#include <iostream>
bool IsFirst( int n ) { if( n == 1 ) return false; for( int i = 2; i * i <= n; ++i ) { if( n % i == 0 ) return false; } return true; }
int main() { int Num, a; std::cin >> Num; for( int i = 0; i < Num; ++i ) { std::cin >> a; if( IsFirst( a ) ) { std::cout << "TAK" << std::endl; } else std::cout << "NIE" << std::endl; } return 0; } |
|
malan |
» 2011-12-20 13:20:12 @szyx_yankez: for( int i = 0; i < Num; ++i ) { std::cin >> a; if( IsFirst( a ) ) { std::cout << "TAK" << std::endl; } else std::cout << "NIE" << std::endl; }
/edit: wyprzedziłeś mnie :P |
|
ison |
» 2011-12-20 13:21:05 @ptaq, zakresu liczb nie musisz sprawdzać, to jest tylko informacja dla Ciebie na jakiego rzędu wielkości liczby musi być Twój program przygotowany |
|
ptaq Temat założony przez niniejszego użytkownika |
» 2011-12-20 14:09:45 poszło :D niepotrzebny był ten pierwiastek ;p , ale ja tego z palca nie wyssałem bo : "jeśli liczba naturalna N większa od 1 nie jest podzielna przez żadną z liczb pierwszych nie większych od pierwiastka z N, to N jest liczbą pierwszą" . Chyba ze ja to źle interpretuje . Tak czy inaczej dziekuje za pomoc !!
#include <iostream> #include <cmath>
bool sprawdz( int a ) { int d = 3; if( a == 1 || a % 2 == 0 ) return false; do { if( a % d == 0 ) return false; d += 2; } while( d < a ); return true; }
int main()
{ unsigned long n; unsigned int y; float p; std::cin >> n; unsigned long int a[ n ]; unsigned long int i = 0; do { std::cin >> a[ i ]; y = a[ i ]; if( y == 2 || y == 3 ) { std::cout << "TAK" << std::endl; } else if( sprawdz( y ) ) { std::cout << "TAK" << std::endl; } else { std::cout << "NIE" << std::endl; } i++; } while( i < n ); return 0; }
|
|
1 « 2 » |