Cześć, zajmuję się aktualnie problemem wypisywania liczb pierwszych z zakresu <1;n> i napisałem program (sito Eratostenesa) który ogólnie działa ale są dwie rzeczy których nie rozumiem. Kod:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
n += 1;
int t[n];
t[0] = 0;
t[1] = 0;
for(int j = 2; j <= n; j++)
{
t[j] = 1;
}
for(int i = 2; i <= n; i++)
{
if(t[i] == 1 && i*i <= n)
{
for(int x = i*i; x <=n; x+=i)
t[x] = 0;
}
}
for(int k = 1; k <= n; k++)
{
if(t[k] == 1)
cout<<k<<" ";
}
return 0;
}
1. Zakres wartości - tutaj wszędzie użyłem int, próbowałem z long long ale problem polega na tym, że program przestaje działać dla n dużo mniejszego od maksymalnej wartości danego typu danych, Przykładowo dla int program nie działa dla n = 100 000 a maksymalną wartością dla int jest chyba ponad 2 000 000 000 więc dużo więcej i tutaj pojawia się moje pytanie - dlaczego program nie działa dla wartości większych? Dodam że jak użyłem long long to granica się podniosła, ale dla 260 000 nie działał a zakres jest dużo większy
2. Druga sprawa to tablice - jak deklaruję tablicę int t[5] to zawiera ona elementy t[0] t[1] t[2] t[3] t[4]. Ja w programie wpisuję n i dalej dodaję 1 do tego n (n += 1) tak żeby tablica t[n] zawierała elementy od t[0] do t[n]. Jak to zatem możliwe że po uruchomieniu programu i wpisaniu 100 ostatnią wypisaną przez program liczbą jest 101?