редактировать: я надеюсь, что это не звучит как снисходительный ответ. Я просто очень хотел проиллюстрировать, что с точки зрения компьютера, вы должны проверить все возможные числа, которые могут быть факторами X, чтобы убедиться, что оно простое. Компьютеры не знают , что они составные, просто взглянув на них, поэтому вам нужно повторить
Пример: X - простое число?
Для случая, когда X = 67:
Как это проверить?
I divide it by 2... it has a remainder of 1 (this also tells us that 67 is an odd number)
I divide it by 3... it has a remainder of 1
I divide it by 4... it has a remainder of 3
I divide it by 5... it has a remainder of 2
I divide it by 6... it has a remainder of 1
Фактически, вы получите остаток от 0, только если число не простое.
Вам нужно проверять каждое число меньше X, чтобы убедиться, что оно простое? Нету. Больше нет, благодаря математике (!)
Давайте посмотрим на меньшее число, например 16.
16 не простое число.
почему? потому что
2*8 = 16
4*4 = 16
Таким образом, 16 делится поровну более чем на 1 и на себя. (Хотя «1» технически не простое число, но это технические детали, и я отвлекся)
Итак, мы делим 16 на 1 ... конечно, это работает, это работает для каждого числа
Divide 16 by 2... we get a remainder of 0 (8*2)
Divide 16 by 3... we get a remainder of 1
Divide 16 by 4... we get a remainder of 0 (4*4)
Divide 16 by 5... we get a remainder of 1
Divide 16 by 6... we get a remainder of 4
Divide 16 by 7... we get a remainder of 2
Divide 16 by 8... we get a remainder of 0 (8*2)
Нам действительно нужен только один остаток от 0, чтобы сказать нам, что он составной (противоположность «простому» - «составной»).
Проверка, делится ли 16 на 2, это то же самое, что проверка деления на 8, потому что 2 и 8 умножаются, чтобы дать вам 16.
Нам нужно только проверить часть спектра (от 2 до квадратного корня из X), потому что наибольшее число, которое мы можем умножить, равно sqrt (X), в противном случае мы используем меньшие числа для получения избыточных ответов. .
17 простых?
17 % 2 = 1
17 % 3 = 2
17 % 4 = 1 <--| approximately the square root of 17 [4.123...]
17 % 5 = 2 <--|
17 % 6 = 5
17 % 7 = 3
Результаты после sqrt (X), такие как 17 % 7
и т. Д., Являются избыточными, поскольку они обязательно должны умножаться на что-то меньшее, чем sqrt (X), чтобы получить X.
То есть
A * B = X
если A и B оба больше sqrt (X), то
A * B даст число, большее X.
Таким образом, одно из значений A или B должно быть меньше, чем sqrt (X), и излишне проверять оба этих значения, поскольку вам нужно только знать, делит ли одно из них X равномерно (четное деление дает вам другое значение в качестве ответа)
Надеюсь, это поможет.
edit: в BigInteger , как я недавно узнал, есть более сложные методы проверки простоты, и в Java есть встроенный метод «это число, вероятно, простое число» или «это число определенно составное». через другой SO ответ:]