Раздел: Задачи / Простейшие /
Первые N простых чисел
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 2.66
Задача 2.66
Дано натуральное число Х. Записать в массив А первые N простых чисел, которые меньше или равны Х. Вывести на экран массив А.
Что такое простое число, я пояснил здесь. Там же мы разработали функцию, которая проверяет, является ли число простым. Для решения задачи мы можем заполнить массив числами от 2 до Х, а затем перебрать массив, проверяя числа на простоту, и записывая в массив А только простые числа.
Пожалуй, так мы и поступим, хотя существуют специальные алгоритмы для нахождения списка всех простых чисел до какого-то числа Х, например, решето Эратосфена. Но мы не в древней Греции, у нас есть компьютеры, и мы можем писать для них программы. Так что не будем заморачиваться, а просто переберём все числа в массиве и проверим их.
Правда, остался ещё один вопрос - какой должна быть длина массива? В идеале она должна быть равна Х-1, так как единица не является простым числом. Однако число Х вводит пользователь, в этом случае мы не будем знать заранее длину массива, и нам придётся использовать динамические массивы. Но это немного усложнит программу, поэтому мы выберем более простой путь: установим длину массива, например, 1000 элементов, и будем проверять число Х, введённое пользователем. Если оно будет больше 1000, то будем выдавать пользователю сообщение о невозможности выполнить программу.
Ну а теперь примеры программ Паскале и С++.
program mytask; {$CODEPAGE UTF8} const MAX_X = 1000; var X : WORD; i, j : WORD; M : array[2..MAX_X] of WORD; A : array[2..MAX_X] of WORD; //**************************************************************** // Проверяет, является ли число простым // ВХОД : N - число // ВЫХОД : TRUE - число N простое, FALSE - не простое //**************************************************************** function IsPrimeNumber(N : WORD) : boolean; var i : WORD; begin Result := TRUE; case N of 0..3 : begin if N < 2 then Result := FALSE; //Не простое число Exit; end; end; for i := 2 to (N-1) do if (N mod i) = 0 then //Не простое число begin Result := FALSE; Break; end; end; //******************************************************************* // ОСНОВНАЯ ПРОГРАММА //******************************************************************* begin //Ввод числа Write('Введите число от 2 до 1000: '); ReadLn(X); //Проверка числа if (X < 2) or (X > MAX_X) then begin WriteLn('Число должно быть более 1 и менее ', MAX_X); WriteLn('Нажмите ENTER для выхода...'); ReadLn; Exit; //Выйти из программы, если число неправильное end; //Подготавливаем массивы for i := 2 to MAX_X do begin if i <= X then M[i] := i else M[i] := 0; A[i] := 0; end; j := 2; //Ищем простые числа и записываем их в массив А for i := 2 to MAX_X do begin if IsPrimeNumber(M[i]) then begin A[j] := M[i]; Inc(j); end; //Выйти из цикла, когда достигли Х if i > X then Break; end; //Выводим простые числа из массива А for j := 2 to X do begin //Прервать цикл, если чисел больше нет if A[j] = 0 then Break; //Вывести очередное число Write(A[j], ' '); end; WriteLn(#10#13'Нажмите ENTER для выхода...'); ReadLn; end.
#include <cstdlib> #include <iostream> using namespace std; const int MAX_X = 1000; //**************************************************************** // Проверяет, является ли число простым // ВХОД : N - число // ВЫХОД : TRUE - число N простое, FALSE - не простое //**************************************************************** bool IsPrimeNumber(int N) { bool Res = true; switch (N) { case 0 : Res = false; break; case 1 : Res = false; break; case 2 : Res = true; break; case 3 : Res = true; break; default : for (int i = 2; i < N; i++) if (0 == (N % i)) //Не простое число { Res = false; break; } } return(Res); } //******************************************************************* // ОСНОВНАЯ ПРОГРАММА //******************************************************************* int main(int argc, char *argv[]) { unsigned int X = 0; unsigned int i = 0, j = 0; unsigned int M[MAX_X-1]; unsigned int A[MAX_X-1]; setlocale(LC_ALL, "Russian"); //Ввод числа cout << "Введите число от 2 до 1000: "; cin >> X; //Проверка числа if ((X < 2) || (X > MAX_X)) { cout << "Число должно быть более 1 и менее " << MAX_X << endl; system("PAUSE"); return 1; } //Подготавливаем массивы for (i = 0; i < MAX_X; i++) { if ((i+2) <= X) M[i] = i; else M[i] = 1; A[i] = 0; } j = 0; //Ищем простые числа и записываем их в массив А for (i = 0; i < MAX_X; i++) { if (IsPrimeNumber(M[i])) { A[j] = M[i]; j++; } //Выйти из цикла, когда достигли Х if ((i+2) > X) break; } //Выводим простые числа из массива А for (j = 0; j < (X-1); j++) { //Прервать цикл, если чисел больше нет if (A[j] == 0) break; //Вывести очередное число cout << A[j] << ' '; } cout << endl; system("PAUSE"); return EXIT_SUCCESS; }
Ну и картинка с примером результата:
Можно, конечно, что-то упростить, попытаться найти готовые алгоритмы и т.п. Но это решение рабочее, и, с моей точки зрения, более понятное для начинающих.
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |