usprawnienie programu w c

s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

usprawnienie programu w c

Post autor: s3ba »

Zadanie:
2. Napisać funkcję czyPierwsza sprawdzającą czy dana liczba jest liczbą pierwszą; przy jej
pomocy:
a) wypisać pierwszą setkę liczb pierwszych o wartości powyżej 10^9 ,
b) wygenerować 10000 liczb losowych i wyznaczyć częstość występowania liczb
pierwszych.

Napisalem taki kod, oblicza chyba poprawnie, jednak program jest strasznie wolny, czy ktos ma pomysl jak go usprawnic aby chodzil szybciej? Chodzi o podpunkt a). Z gory dzieki za pomoc.

Kod: Zaznacz cały

#include <stdio.h>

int pierwsza( int liczba )
{
    int czy_pierwsza = 1, x = 2;

    while( ( x <= ( liczba / 2 )) && ( czy_pierwsza == 1 ) )
            {
             if( liczba % x == 0 )
             czy_pierwsza = 0;
             ++x;
             }
             return czy_pierwsza;
}
int main(){
    	int liczba=pow(10,9),x=0;

        for (liczba; liczba <= pow(10,12); liczba++)
        {
        if( pierwsza( liczba ) == 1 )
        {	printf( "Liczba %d jest liczba pierwsza.
", liczba );
        	x++;
            }
        if (x==100)
        break;
        }
        
        system("pause");
}
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

usprawnienie programu w c

Post autor: spajder »

Dla tak dużych liczb niestety nie ma sensu pisać Sita Eratostenesa. Do do usprawnień:
1. nie trzeba dzielić przez wszystkie liczby do \(\displaystyle{ \frac{n}{2}}\), wystarczy do \(\displaystyle{ \sqrt{n}}\)

2. Jeśli chcesz naprawdę usprawnić program to musisz zupełnie zmienić test pierwszości. Jest dużo metod, poczytaj sobie:
ODPOWIEDZ