Другие языки программирования и технологии

Простенькая задача. C#

Нужно проверить число на простоту (должно делиться только на 1 и на себя) .
не могу придумать алгоритм.
RR
Remo Rem
637
Идея 5. Скажи что ночь не спал и сам придумал)

using System;
namespace example {
    class Program {
        static void Main() {
            Console.Write(" Введите натуральное число: ");
            uint num = uint.Parse(Console.ReadLine());
            if (SimpleNumber(num)) Console.WriteLine(" Простое. ");
            else Console.WriteLine(" Число не является простым. ");
            Console.ReadKey();
        }
        static bool SimpleNumber(uint number) {
            if (number > 1) {
                if (number != 2 && number % 2 == 0) return false;
                else if (number != 5 && number % 5 == 0) return false;
                else {
                    uint k = number >> 1;
                    if (k % 2 == 0) ++k;
                    for (uint n = k; n != 1; n -= 2) if (number % n == 0) return false;
                }
            } else return false;
            return true;
        }
    }
}
Александр Ехновецкий
Александр Ехновецкий
50 298
Лучший ответ
Тут есть только один алгоритм - перебирать все возможные числа, на которые это число может делиться. Если ни на одно не делится - простое.
Идея 1: перебираем все от 2 до n-1. Тупо, но работает.
Идея 2: число не может делиться на число, большее своей 1/2. Достаточно перебрать от 2 до n/2.
Идея 3: если число делиться на что-то, большее корня из числа, то результат деления будет меньше корня из числа, и число будет делиться и на него тоже. Значит, достаточно перебрать от 2 до корня из n.
Идея 4: если число делится на составное, то также будет делиться и на простые числа, дающие при умножении это составное. Значит, достаточно проверять только простые числа от 2 до корня из n.
Новички обычно реализовывают идею 1 или 2, 3 ненамного сложнее (точнее, вообще не сложнее для программирования, но сложнее для понимания) . Идея 4 - самая правильная, если надо проверять много чисел.
Олег Самиляк
Олег Самиляк
98 446