Программа которая находит все простые числа из интервала в С(Си) - C (СИ)
Формулировка задачи:
Помогите пожалуйста написать эту программу, я пытался сам, но у меня выводит ГЛУПОСТЬ Вот что нужно... Написать программу, которая находит все простые числа из интервала. Вводим два целых числа
A
иB
, которые представляют собой начало и конец отрезка, программа выводит список всех простых чисел, расположенных от меньшего к большему. Это как оно должно выглядеть...Решение задачи: «Программа которая находит все простые числа из интервала в С(Си)»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE_ARRAY (256)
static unsigned * primes = NULL;
static unsigned counter = 2, current_size = 0;
void give_me_mem ()
{
current_size++;
primes = realloc(primes, current_size * SIZE_ARRAY * sizeof(unsigned));
}
int is_prime (unsigned n)
{
unsigned i = 0;
if (n < 2)
return 0;
for (; i < counter; i++)
if (n % primes[i] == 0)
return 0;
return 1;
}
void push_me_to_primes (unsigned n)
{
if (counter / current_size == SIZE_ARRAY)
give_me_mem();
primes[counter++] = n;
}
void dump (unsigned start, unsigned end)
{
unsigned i = 0;
fprintf(stdout, "primes between %u and %u are:\n", start, end);
while (i < counter && primes [i] < start)
i++;
while (i < counter)
fprintf(stdout, "%u ", primes[i++]);
putchar('\n');
}
int main(int argc, char ** argv)
{
unsigned start = 10, end = 100, i = 1;
give_me_mem();
primes[0] = 2;
primes[1] = 3;
for (; i <= end; i += 2)
if (is_prime(i))
push_me_to_primes (i);
dump(start, end);
free(primes);
exit(EXIT_SUCCESS);
}
Объяснение кода листинга программы
В данном коде реализована программа для поиска простых чисел в заданном интервале. Список действий программы:
- Включаем необходимые заголовочные файлы:
stdio.h- для работы с функциями ввода-вывода;string.h- для работы со строками;stdlib.h- для работы с функциейrealloc.
- Определяем константу
SIZE_ARRAY- размер массива для хранения простых чисел. - Статически объявляем переменные:
primes- указатель на массив для хранения простых чисел;counter- счетчик простых чисел;current_size- размер выделенной памяти под массив.
- Функция
give_me_mem- выделяет дополнительную память под массивprimes. - Функция
is_prime- проверяет число на простоту. Если число меньше или равно 1, возвращает 0. Иначе, ищет делители числа от 2 доcounter(включительно). Если делитель найден, возвращает 0. В противном случае, возвращает 1. - Функция
push_me_to_primes- добавляет число в массивprimes. ЕслиcounterдостигаетSIZE_ARRAY, вызывается функцияgive_me_memдля выделения дополнительной памяти. - Функция
dump- выводит простые числа в заданном интервале. Выводит число от 2 доcounterи проверяет, является ли оно простым. Если число простое, выводит его. - В функции
main:- Инициализируем переменные
startиend- границы интервала для поиска простых чисел; - Вызываем функцию
give_me_memдля выделения памяти под массивprimes; - Инициализируем первые два элемента массива
primes- 2 и 3; - Запускаем цикл для поиска простых чисел в интервале от
startдоendс шагом 2; - Если число простое, вызываем функцию
push_me_to_primesдля добавления числа в массивprimes; - Выводим простые числа в заданном интервале с помощью функции
dump; - Освобождаем память, выделенную под массив
primes, с помощью функцииfree; - Завершаем программу с кодом
EXIT_SUCCESS.
- Инициализируем переменные