Czesc, Mam mały problem z programem a mianowicie nie działa dla zakresu większego niż 3856 i nie wiem jaki jest tego powód. Konsultowałem już z kilkoma osobami jednak nikt nie był mi w stanie pomóc.
#include <stdio.h>
#include <stdlib.h>
//Generator liczb pierwszych do 535 liczb.
//Maksymalna deklaracja tablicy 124 999 999;
//Dziala do zakresu 3856 - powyzej sie zaawiesza.
//Wyswietlanie wszystkich liczb spowalnia
//Jednakowo dziala dla CodeBlock i Dev
unsigned long int tab[8048];
unsigned long int pierwsza[8048] = { 2, 3 }; //Poczštkowy zbior dwoch liczb
int main()
{
//deklaracja zmiennych
unsigned long int a, b, c, m, i, p, n;
//podanie zakresu do jakiego ma szukac
printf("Podaj wartosc zakresu dla wyznaczenia liczb :");
scanf("%lu", &m);
//Wypelnienie tablicy liczbami z zakresu
for (i = 0; i <= m; i++) {
tab[i] = i;
}
//Wartosci poczatkowe
a = 1; //zakres
b = 2; //Ilosc liczb pierwszych
c = 1;
while (c <= m) {
//wyznaczenie zakresu na podstawie zaleznosci
a = pierwsza[b - 1] * 2;
//zerowanie w tablicy wartosci nie bedacych pierwszymi
//dla danego zakresu
for (i = 0; i < b; i++) {
n = 2;
while (pierwsza[i] * n <= a) {
p = pierwsza[i] * n;
tab[p] = 0;
n++;
}
}
//policzenie liczb pierwszych
b = 0;
for (i = 2; i <= a; i++) {
if (tab[i] != 0) {
b++;
}
}
//Wpisanie do tablicy nowych liczb pierwszych
n = 0;
for (i = 2; i <= a; i++) {
if (tab[i] != 0) {
pierwsza[n] = tab[i];
n++;
}
}
//c=pierwsza[b-1]; >> tak powinno być
c = pierwsza[b - 1] + 4; //działa tylko dla 4 i więcej
}
printf("Liczby to:\n");
//wyswietlenie liczb
for (i = 0; i < b; i++) {
printf("%lu\n", pierwsza[i]);
}
printf("\nNajwieksza liczba pierwsza %lu\n", pierwsza[b - 1]);
printf("\nLiczb pierwszych jest:%lu\n", b);
system("PAUSE");
return 0;
}