Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Упорядочение простых чисел


Автор: Anna39 12.1.2012, 15:45
Необходимо написать программу: "Из заданного интервала вывести все простые числа по убыванию. Границы интервала задаются с клавиатуры".
Как определить, простое число или нет, я знаю, и часть программы уже написала. Далее, по идее, от меня требуется запихнуть все найденные простые числа в массив, и отсортировать его, чтобы потом вывести на экран. На теории знаю, как это делается. Не получается лишь скомпоновать все части вместе. Подскажите пожалуйста, как это лучше сделать.

Автор: t_gran 12.1.2012, 16:09
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%88%D0%B5%D1%82%D0%BE_%D0%AD%D1%80%D0%B0%D1%82%D0%BE%D1%81%D1%84%D0%B5%D0%BD%D0%B0
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%88%D0%B5%D1%82%D0%BE_%D0%A1%D1%83%D0%BD%D0%B4%D0%B0%D1%80%D0%B0%D0%BC%D0%B0
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%88%D0%B5%D1%82%D0%BE_%D0%90%D1%82%D0%BA%D0%B8%D0%BD%D0%B0

Автор: Anna39 12.1.2012, 16:40
хм...возможно, я не до конца сформулировала вопрос. Я знаю, как найти все простые числа в промежутке, мне лишь надо их упорядочить так, чтобы вывести их на экран в обратном порядке smile 

Автор: Dov 13.1.2012, 02:53
Anna39, покажи, что у тебя уже есть. Посмотрим...

Автор: t_gran 13.1.2012, 03:15
Код

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

//----------------------------------------------//
// Начальное формирование данных
void Prepare(bool* arr, unsigned size)
{
   unsigned i;

   arr[0] = arr[1] = false;
   for (i = 2; i < size; ++i)
   {
      arr[i] = true;
   }
}
//----------------------------------------------//
// Алгоритм: Решето Эратосфена
void MarkPrimes(bool* arr, unsigned size)
{
   unsigned i, j;

   for (i = 2; i < size; ++i)
   {
      if (arr[i] == true)
      {
         for (j = i+i; j < size; j += i)
         {
            if (arr[j] == true)
            {
               arr[j] = false;
            }
         }
      }
   }
}
//----------------------------------------------//
// Вывод всех значений
void Print(bool* arr, unsigned size)
{
   unsigned i;

   for (i = size-1; i < size; --i)
   {
      if (arr[i] == true)
      {
         printf("%u ", i);
      }
   }
}
//----------------------------------------------//

int main()
{
   unsigned n = 0;
   
   printf("input max element: ");
   scanf("%u", &n);

   bool* arr = malloc(sizeof(bool) * n);

   Prepare(arr, n);
   MarkPrimes(arr, n);
   Print(arr, n);
   
   free(arr);
   
   return 0;
}

Автор: Anna39 13.1.2012, 07:47
я уже догадалась, как всё сделать, но всё равно спасибо =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)