Решето Эратосфена (работает некорректно) - C (СИ)
Формулировка задачи:
вроде компилируется однако не работает корректно
#include<stdio.h>
int main()
{
int n,j,c;
int i = 2;
int mass [10] = {2};
for (n = 0; n < 10; n++,i++)
mass[n] = i;
for(c=2; c<10; c++){
if (mass[c] !=0){
for(j = c*2; j<10; j+=c){
mass[j]=0;
}
}
}
for(i=0; i<10; i++){
if(mass[i]!=0){
printf("%d\n", mass[i]);
}
}
}Решение задачи: «Решето Эратосфена (работает некорректно)»
textual
Листинг программы
#include<stdio.h>
#define MAX 100
int main()
{
int n, j, c;
int i = 2;
int mass [MAX];
for (n = 0; n < MAX; n++)
mass[n] = n;
mass[1] = 0;
for(c=2; c<MAX; c++){
if (mass[c] !=0){
for(j = c*2; j<MAX; j+=c)
mass[j]=0;
}
}
for(; i<MAX; i++) {
if(mass[i]!=0)
printf("%d\n", mass[i]);
}
}
Объяснение кода листинга программы
В этом коде реализуется алгоритм Решето Эратосфена. Он предназначен для вычисления количества простых чисел в заданном диапазоне. Простые числа — это числа, которые делятся только на 1 и на само себя. Список действий, которые происходят в коде:
- Создается массив
massразмеромMAX. - В цикле заполняется значениями от 0 до
MAX-1. - Устанавливается значение
mass[1]равным 0. - Начинается второй цикл, который ищет простые числа. В этом цикле устанавливаются значения в массиве
massравные 0 для всех кратных текущего числа (с которого начинается поиск). - Начинается третий цикл, который выводит на экран значения массива
mass, которые не равны 0. Это и есть простые числа. Алгоритм Решето Эратосфена работает некорректно в данном коде из-за неправильно выбранного начального значения для переменнойiв третьем цикле. Вместоi=2должно бытьi=3.