Программа нахождения простых чисел

Когда мы говорим о простых числах, мы обращаемся к фундаментальному понятию в теории чисел, которое привлекает внимание математиков и компьютерных ученых уже на протяжении многих столетий. Простые числа — это числа, которые имеют всего два делителя: 1 и самих себя. Их уникальные свойства и важность в криптографии, компьютерной науке и многих других областях делают их объектом интенсивного изучения. В этой статье мы рассмотрим одну из самых популярных задач, связанных с простыми числами — программу нахождения всех простых чисел в заданном диапазоне.

Теория

Простое число — число, которое имеет ровно два делителя — единицу и само число. Это означает, что единица не может быть простым числом.

Решето Эратосфена — это эффективный алгоритм для поиска всех простых чисел до заданного натурального числа.

Для примера возьмем диапазон чисел от 1 до 50.

Сначала мы исключаем единицу, так как она не является простым числом.

Затем вы переходите к первому числу, которое не было вычеркнуто, и отмечаете его как простое.

Затем вы вычеркиваете все остальные числа, кратные этому простому числу. Например, 2 — это единственное четное простое число, и мы вычеркиваем все его кратные числа.

Затем переходим к следующему не вычеркнутому числу (3) и делаем то же самое, и так далее.

В результате останутся только простые числа. Например, в диапазоне до 50, мы увидим, что простые числа — это 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43 и 47.

C++

Пример программы на C++, которая находит простые числа в заданном диапазоне. Программа использует метод «Решето Эратосфена» для оптимизации процесса поиска простых чисел.

#include <iostream>
#include <vector>

using namespace std;

// Функция для нахождения всех простых чисел до n
void findPrimes(int n) {
    vector<bool> isPrime(n + 1, true);

    for (int p = 2; p * p <= n; ++p) {
        if (isPrime[p]) {
            for (int i = p * p; i <= n; i += p) {
                isPrime[i] = false;
            }
        }
    }

    cout << "Простые числа в диапазоне от 2 до " << n << ":\n";
    for (int i = 2; i <= n; ++i) {
        if (isPrime[i]) {
            cout << i << " ";
        }
    }
    cout << endl;
}

int main() {
    int n;
    cout << "Введите верхний предел поиска простых чисел: ";
    cin >> n;

    if (n >= 2) {
        findPrimes(n);
    } else {
        cout << "Неверный ввод. Пожалуйста, введите число больше или равное 2." << endl;
    }

    return 0;
}

C#

Пример программы на C#, которая находит простые числа в заданном диапазоне с использованием классического метода проверки каждого числа на простоту.

using System;

class PrimeNumberFinder
{
    static bool IsPrime(int num)
    {
        if (num <= 1)
            return false;
        if (num <= 3)
            return true;
        if (num % 2 == 0 || num % 3 == 0)
            return false;

        for (int i = 5; i * i <= num; i += 6)
        {
            if (num % i == 0 || num % (i + 2) == 0)
                return false;
        }
        return true;
    }

    static void FindPrimes(int start, int end)
    {
        Console.WriteLine($"Простые числа в диапазоне от {start} до {end}:");
        for (int i = start; i <= end; i++)
        {
            if (IsPrime(i))
            {
                Console.Write(i + " ");
            }
        }
        Console.WriteLine();
    }

    static void Main()
    {
        Console.Write("Введите начало диапазона: ");
        int start = int.Parse(Console.ReadLine());

        Console.Write("Введите конец диапазона: ");
        int end = int.Parse(Console.ReadLine());

        if (start < 2)
            start = 2;

        FindPrimes(start, end);
    }
}

Python

def is_prime(num):
    if num <= 1:
        return False
    if num <= 3:
        return True
    if num % 2 == 0 or num % 3 == 0:
        return False

    i = 5
    while i * i <= num:
        if num % i == 0 or num % (i + 2) == 0:
            return False
        i += 6

    return True

def find_primes(start, end):
    print(f"Простые числа в диапазоне от {start} до {end}:")
    for num in range(start, end + 1):
        if is_prime(num):
            print(num, end=" ")

if __name__ == "__main__":
    start = int(input("Введите начало диапазона: "))
    end = int(input("Введите конец диапазона: "))

    if start < 2:
        start = 2

    find_primes(start, end)

Java

import java.util.Scanner;

public class PrimeNumberFinder {
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        if (num <= 3) {
            return true;
        }
        if (num % 2 == 0 || num % 3 == 0) {
            return false;
        }

        for (int i = 5; i * i <= num; i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) {
                return false;
            }
        }

        return true;
    }

    public static void findPrimes(int start, int end) {
        System.out.println("Простые числа в диапазоне от " + start + " до " + end + ":");
        for (int num = start; num <= end; num++) {
            if (isPrime(num)) {
                System.out.print(num + " ");
            }
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Введите начало диапазона: ");
        int start = scanner.nextInt();

        System.out.print("Введите конец диапазона: ");
        int end = scanner.nextInt();

        if (start < 2) {
            start = 2;
        }

        findPrimes(start, end);
    }
}

Pascal

program PrimeNumberFinder;

var
  start, endRange, num, i: Integer;
  isPrime: Boolean;

function IsPrime(num: Integer): Boolean;
var
  i: Integer;
begin
  if num <= 1 then
    IsPrime := False
  else if num <= 3 then
    IsPrime := True
  else if (num mod 2 = 0) or (num mod 3 = 0) then
    IsPrime := False
  else
  begin
    i := 5;
    while (i * i <= num) do
    begin
      if (num mod i = 0) or (num mod (i + 2) = 0) then
      begin
        IsPrime := False;
        Exit;
      end;
      i := i + 6;
    end;
    IsPrime := True;
  end;
end;

procedure FindPrimes(start, endRange: Integer);
begin
  writeln('Простые числа в диапазоне от ', start, ' до ', endRange, ':');
  for num := start to endRange do
  begin
    if IsPrime(num) then
      write(num, ' ');
  end;
  writeln;
end;

begin
  write('Введите начало диапазона: ');
  readln(start);

  write('Введите конец диапазона: ');
  readln(endRange);

  if start < 2 then
    start := 2;

  FindPrimes(start, endRange);
end.

JavaScript

function isPrime(num) {
    if (num <= 1) {
        return false;
    }
    if (num <= 3) {
        return true;
    }
    if (num % 2 === 0 || num % 3 === 0) {
        return false;
    }

    for (let i = 5; i * i <= num; i += 6) {
        if (num % i === 0 || num % (i + 2) === 0) {
            return false;
        }
    }

    return true;
}

function findPrimes(start, end) {
    console.log(`Простые числа в диапазоне от ${start} до ${end}:`);
    for (let num = start; num <= end; num++) {
        if (isPrime(num)) {
            process.stdout.write(num + " ");
        }
    }
    console.log();
}

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('Введите начало диапазона: ', (start) => {
    rl.question('Введите конец диапазона: ', (end) => {
        start = parseInt(start);
        end = parseInt(end);

        if (start < 2) {
            start = 2;
        }

        findPrimes(start, end);
        rl.close();
    });
});

PHP

<?php
function isPrime($num) {
    if ($num <= 1) {
        return false;
    }
    if ($num <= 3) {
        return true;
    }
    if ($num % 2 == 0 || $num % 3 == 0) {
        return false;
    }

    for ($i = 5; $i * $i <= $num; $i += 6) {
        if ($num % $i == 0 || $num % ($i + 2) == 0) {
            return false;
        }
    }

    return true;
}

function findPrimes($start, $end) {
    echo "Простые числа в диапазоне от $start до $end:<br>";
    for ($num = $start; $num <= $end; $num++) {
        if (isPrime($num)) {
            echo $num . " ";
        }
    }
    echo "<br>";
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $start = (int)$_POST["start"];
    $end = (int)$_POST["end"];

    if ($start < 2) {
        $start = 2;
    }

    findPrimes($start, $end);
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Нахождение простых чисел</title>
</head>
<body>
    <h2>Введите начало и конец диапазона:</h2>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        Начало: <input type="text" name="start"><br>
        Конец: <input type="text" name="end"><br>
        <input type="submit" value="Найти">
    </form>
</body>
</html>
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Давайте поможем друг другу! Если вы нашли ошибку или хотите предложить лучшее решение, пожалуйста, напишите об этом в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *