Skocz do zawartości
MathewPL

[c++] 4 Programy

Rekomendowane odpowiedzi

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 przez MathewPL

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#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 ;).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez Guardian_McLeavy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...