Я попытался создать простой алгоритм сортировки простых чисел под названием «Сито Эратосфена» и попытался сделать это с помощью двойного for
l oop. Но valgrind возвращает предупреждение:
Условное перемещение зависит от неинициализированной переменной из-за выделения стека.
Это способ, которым я написал второе for
l oop невозможно в C?
Предполагается, что простые числа меньше 1000000
Вот код:
int range = 1000000;
int main()
{
int all_nums[range];
for (int i=2;i<range;i++)
{
all_nums[i-2]=i;
}
int sieve[range];
for (int i=0;i<range;i++)
{
sieve[i]=0;
}
// this is where the problem starts
int index_sieve = 0;
float max_sqrt = sqrt(range);
for (int i = 0; i < range; i++)
{
if (all_nums[i] != 0 && all_nums[i]<max_sqrt)
{
sito[index_sieve] = all_nums[i];
index_sieve += 1;
for (int x = i+1; x<range; x++)
{
if (all_nums[x] != 0 && all_nums[x] % all_nums[i] == 0)
{
all_nums[x] = 0;
}
}
}
else if (all_nums[i] != 0 && all_nums[i] > max_sqrt)
{
sieve[index_sieve] = all_nums[i];
index_sieve += 1;
}
}
}
По сути, это проверяет числа от 2 до 1000000. Если число не равно 0, я сохраняю его и пытаюсь разделить каждое большее число. Если остатка нет, я превращаю это число в 0, второе for
l oop заканчивается, а I go возвращается к первому for
l oop, чтобы взять другое число.
В строке else if
есть небольшое условие, которое гласит: если число, на которое я смотрю, меньше, чем наибольшее число в диапазоне, то это и каждое старшее число простое
Я подозреваю, что я не могу написать вторую for
l oop так, но я новичок в C и могу ошибаться, но кроме этого я не могу найти что-нибудь неинициализированное.