Warunek w if-ie, żeby wykonał się kod w nim zawarty, musi "zwrócić" wartość true, w tablicy
bool tab[n];
przechowywane będą wartości true i false, w postaci liczb 0 - false, 1 - true
Wykrzyknik ! powoduje to, że jeżeli w tab[...] o indeksie i, jest liczba 0 (czyli false) to jest w tym momencie Nasze true (odwraca znaczenie false na true), równoznaczny warunek, który też jest "prawdziwy", czyli zwraca wartość true dla tego zapisu to
if (tab[i] == 0)
int i = 2;
tab[i] = 0;
if (! tab[i]) // - true
if (tab[i] == 0) // - true
tab[i] = 1;
if (tab[i]) // - true
if (tab[i] == 1) // - true
#include <iostream>
int main()
{
int n;
std::cout << "Podaj zakres: "; std::cin >> n;
bool tab[n] = {0};
//for (int i=2; i<=n; i++)
// tab[i] = 0;
for (int i=2; i*i<=n; ++i) {
if (! tab[i])
for (int j=i*i; j<=n; j+=i)
tab[j] = 1;
}
for (int i=2; i<=n; ++i)
if (! tab[i])
std::cout << i << " ";
std::cout << std::endl;
return 0;
}
=
#include <iostream>
int main()
{
int n;
std::cout << "Podaj zakres: "; std::cin >> n;
bool tab[n] = {0};
//for (int i=2; i<=n; i++)
// tab[i] = 0;
for (int i=2; i*i<=n; ++i) {
if (tab[i] == 0)
for (int j=i*i; j<=n; j+=i)
tab[j] = 1;
}
for (int i=2; i<=n; ++i)
if (tab[i] == 0)
std::cout << i << " ";
std::cout << std::endl;
return 0;
}