Чи є число простим?#1616

Чи є число простим? (Розбір)

Число називається простим, якщо воно не має інших дільників, крім одиниці та самого себе.

Теорема. Якщо число складене, то воно обов'язково має дільник, що не перевищує \sqrt{n}.

Доказ. Нехай — складене число і — його дільник. Тоді також є дільником числа . Припустимо, що всі дільники числа більші за \sqrt{n}. Тоді одночасно виконуються нерівності d > \sqrt{n} і n / d > \sqrt{n}. Помноживши ці нерівності, отримуємо:

d * (n / d) > \sqrt{n} * \sqrt{n},

тобто n > n. Це призводить до протиріччя. Таким чином, якщо число складене, то принаймні один з його дільників не перевищує \sqrt{n}.

Для перевірки числа на простоту достатньо перевірити, чи ділиться воно на одне з чисел від до \sqrt{n} включно. Якщо ділиться принаймні на одне з цих чисел, то є складеним. В іншому випадку просте.

Реалізація алгоритму

Зчитуємо вхідне значення .

scanf("%d",&n);

Встановимо прапор flag = 1. Це означає, що ймовірно є простим.

flag = 1;

Перебираємо всі можливі дільники числа від до \sqrt{n} включно. Якщо ділиться на , то є складеним, тому встановлюємо flag = 0.

for (i = 2; i <= sqrt(n); i++)
  if (n % i == 0)
  {
    flag = 0;
    break;
  }

Залежно від значення виводимо відповідь.

if (flag == 0) printf("No\n"); 
else printf("Yes\n");

Реалізація алгоритму — функція

Функція IsPrime перевіряє, чи є число простим.

int IsPrime(int n)
{
  for (int i = 2; i <= sqrt(n); i++)
    if (n % i == 0) return 0;
  return 1;
}

Основна частина програми. Зчитуємо вхідне значення .

scanf("%d",&n);

Залежно від простоти числа виводимо відповідь.

if (IsPrime(n)) printf("Yes\n"); 
else printf("No\n");

Java реалізація

import java.util.*;

public class Main
{
  static boolean IsPrime(int n)
  {
    for(int i = 2; i <= Math.sqrt(n); i++)
      if (n % i == 0) return false;
    return true;
  }
  
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    if (IsPrime(n))
      System.out.println("Yes");
    else 
      System.out.println("No");
    con.close();
  }
}

Python реалізація

import math

Функція IsPrime перевіряє, чи є число простим.

def IsPrime(n):
  for i in range(2, int(math.sqrt(n))+1):
    if n % i == 0: return False
  return True

Основна частина програми. Зчитуємо вхідне значення .

n = int(input())

Залежно від простоти числа виводимо відповідь.

if IsPrime(n):
  print("Yes")
else:
  print("No")