MathewPL Opublikowano 25 Marca 2007 Zgłoś Opublikowano 25 Marca 2007 (edytowane) Mam problem z napisaniem takich programów Dana jest funkcja prime(n) jesli jest pierwsz zawraca true. Napisz algorytm który dla naturalnych liczb a i b wyznaczy ilosc liczb pierwszych w przedziale <a,b> Specyfikacja: Wejście: a,b-liczby naturalne określające przedział poszukiwan liczb pierwszych Wyjście: ilp -- ilość liczb pierwszych <a,b> K01: ilp <- 0 K02: dla i = a, a +1,...,b:wykonuj krok K03 K03: Jeśli prime(i) = true, to ilp <- ilp + 1 K04:Zakończ ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Dana jest funkcja prime(n) jesli jest pierwsz zawraca true. Liczba Euklidesa = p1 * p2 * p3...Pk + 1 E1 = 2+1 =3 E2 = 2*3 + 1 = 7 E3 = 2*3*5 + 1 = 31 Zaprojektować algorytm wykazjuący k-tą liszbę euklidesa Specyfikacja: Wejście: K - nr liczby euklidesa do wyliczenia, k >0 Wyjście: E - k-ta liczba Euklidesa K01: E <- 1 K02: p <- 2 K03: dla i = 1,2,...,k wykonuj kroki K04...K06 K04: do E <- E*p K05: P <- p+1 K06: jeśli prime(n)= false wróć do kroku K05 K07: E <- E+1 K08: Zakończ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Dana jest funkcja prime(n) jesli jest pierwsz zawraca true.Napisz algorytm który wyznaczy różnice pomiedzy największą i nijmniejsza liczba pierwsza.Algorytm ma reagowac na przypanek gdy nie ma liczb pierwszych. Specyfikacja: Wejście: a,b-liczby naturalne określające krańce przedziału <a,b> Wyjście: R - rużnica pomiędzy największa a najmniejsza liczbą pierwszą w przedziale <a,b> Jeśli R = 0, to w <a,b> brak liczb pierwszych lub jest jedna K01: pmin <- 0;pmax <- 0 K02: dla i = a,a + 1,...,b wykonuj krok K03 K03: jeśli prime(n) = true, to prim <- i i idz do K04 K04: dla i = b, b-1,...,a wykonuj krok K05 K05: jeśli prime(n) = true, to pmax <- i i idz do K06 K06: R <- pmax - mmin K07: Zakończ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Dana funkcja prime(n). Napisz algorytnm który w przedziale <a,b> wyznaczy wszystkie pary kolejnych liczb pierwszych różniżcych sie od siebie o 2 Specyfikacja: Wejście: a,b-liczby naturalne określające krańce przedziału <a,b> Wyjście: pary liczb kolejnych pierwszych rużniących sie o 2 K01: p1 <- 2; p2 <- a K02: dopuki p2 jest <= b wykonuj kroki K03...K06 K03: jeśli prime(p2) = false, to przejdz do kroku K06 K04: jesli p2 - p1 = 2, to pisz p1,p2 K05: p1 <- p2 K06: p2 <- p2 +1 K07: Zakończ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ I jeszcze jak ktos może tu zamieścic algorytm zliczający liczby pierwsze p przedziale <a,b> podanym przez uzytkownika Edytowane 25 Marca 2007 przez MathewPL Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dobo90 Opublikowano 25 Marca 2007 Zgłoś Opublikowano 25 Marca 2007 #include <stdio.h>#include <math.h>int czy_pierwsza(int x) { int i; for(i = 2; i <= sqrt(x); i++) if(x % i == 0) return 0; return 1;}int main(void) { int a, b, i; printf("Od: "); scanf("%i", &a); printf("Do: "); scanf("%i", &b); for(i = a; i <= b; i++) { if(czy_pierwsza(i)) printf("%i\n", i); } return 0;} Taki na szybko pisany kod. Na pewno duzo wydajniejsza metoda bedzie sito Eratostenesa. To po prostu dziala na zasadzie brute force ;). Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 25 Marca 2007 Zgłoś Opublikowano 25 Marca 2007 (edytowane) const float blad = 0.1f;int czy_pierwsza(int x) { int i; for(i = 2; i <= sqrt(x) + blad; i++) if(x % i == 0) return 0; return 1;}tak bedzie bezpieczniej, bo floaty nie sa zbyt dokladne. Prosty przyklad sqrt(16) moze wyjsc 3.99998 Edytowane 25 Marca 2007 przez Nargil Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Guardian_McLeavy Opublikowano 3 Kwietnia 2007 Zgłoś Opublikowano 3 Kwietnia 2007 (edytowane) Tutaj masz kod Sita Erastotenesa (do 10^6). #include <stdio.h>#define SIZE 1000010unsigned int tab[SIZE];int main(void){ unsigned int i, tmp; for(i=0;i<SIZE;i++) tab[i]=1; /* Tworzenie Sita */ for(i=2;i*i<SIZE;i++) { if(tab[i]) { tmp=i*i; for(;tmp<SIZE;tmp+=i) tab[tmp]=0; } } return 0;} Edytowane 3 Kwietnia 2007 przez Guardian_McLeavy Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jakkrzysiek Opublikowano 14 Kwietnia 2007 Zgłoś Opublikowano 14 Kwietnia 2007 heh tak czytam te posty i nadziwić się nie mogę, co wy tu wypisujecie :D przecież jest jasno napisane że dana jest funkcja nprime która określa czy podana jej liczba jest pierwsza, ponadto dla każdego programu jest napisane w krokach jak ma wyglądać jego algorytm. Więc nie widzę w czym problem tkwi... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Guardian_McLeavy Opublikowano 14 Kwietnia 2007 Zgłoś Opublikowano 14 Kwietnia 2007 Gdzie masz tresc tej funkcji? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
greg505 Opublikowano 14 Kwietnia 2007 Zgłoś Opublikowano 14 Kwietnia 2007 a tak poza tym, wyglada to na zadania zadane w szkole/na uczelni wiec co to tu jeszcze robi?! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...