To co napisał @Agron na pewno nie przyśpiesza programu (bo nie ma żadnego związku z algorytm) a do tego moim zdaniem (jak
pewnie wielu innych doświadczonych programistów) zaciemnia kod.
Radziłbym nie stosować tamtej podpowiedzi. Pozostawień klamer daję większą przejrzystość kodu i pozwala uniknąć błędu kiedy dany blok jest rozszerzany o kolejną instrukcję,
Można jedynie złączyć poniższe wywołanie:
printf("%d",tab1[tab2[i]-1]);
printf ( "\n");
na
printf("%d \n",tab1[tab2[i]-1]);
ale klamry zostawiłbym.
Druga uwaga: Staraj się nazywać zmienne jak najbardziej zrozumiale. Nazyw tab1, tab2 nie wiele mówią.
Trzecia uwaga: Deklarowanie zmiennych powinieneś robić jak najbliżej miejsca ich użycia. np zamiast deklarować zmienną “i” na początku programu możesz ją deklarować w bloku for (jak to zrobiłeś w pierwszej pętli).
Btw nie edytuj swoich postów poprawiając kod bo też zaciemnia zrozumienie konwersacji.
=====================
Ok temat optymalizacji. Kolega @kostek135 podał Ci już kilak słów kluczowych o które warto przepytać wujka google. Ja skupił bym się trochę na poniższej pętli:
Jak rozumiem jest to pętla wyszukująca kolejne liczby pierwsze. Parametr “i” jest kandydatem na kolejną liczbę pierwszą. Inkrementując wartość i o jeden sprawdzamy także liczby parzyste. W przypadku inkrementowania o wartość 2 algorytm na tej pętli eliminuje połowę sprawdzeń.