Когда вы делаете это:
if(i % Primes[j] != 0 && Primes[j] !=0)
{
Primes[j]=i;
}
Вы говорите: «Если текущее число не делится на данное простое число, замените данное простое число на текущее число».Это не то, что вы хотите.
Вам необходимо проверить, не делится ли текущее число на любое простое число.Таким образом, вам нужно зациклить список простых чисел, чтобы убедиться, что ваш номер не делится ни на один из них, и, если это так, добавить число в конец списка.Вы можете сделать это следующим образом:
int num_primes = 0;
for (i=2;i<101;i++)
{
int is_prime = 1;
for(j=0; j<num_primes && is_prime; j++)
{
if(i % Primes[j] == 0)
{
is_prime = 0;
}
}
if (is_prime) {
Primes[num_primes++] = i;
}
}
В приведенном выше коде мы используем num_primes
для подсчета числа простых чисел, которые у нас есть, и is_prime
, чтобы увидеть, нашли ли мы простое число, которое делиттекущий номер.Когда вы делите каждое число на простое число, если остаток равен 0, вы знаете, что число не простое, и установите is_prime
в 0. Это также приводит к немедленному выходу из внутреннего цикла.Затем, если is_prime
все еще установлен в конце внутреннего цикла, у вас есть простое число, и вы добавляете его в конец списка.
У вас также есть ошибка «по одному» при печатицикл:
for(k=0;k<51;k++)
Поскольку Primes
имеет размер 50, самый большой допустимый индекс - 49. Поэтому измените его на:
for(k=0;k<50;k++)