Вопрос
Софи Жермен главным является простым р таким образом, что 2р + 1 является простым , а также. Например, 11 - простое число Софи Жермен, потому что 23 также простое число. Напишите самую короткую программу для вычисления простых чисел Софи Жермен в порядке возрастания
правила
- Простые числа Софи Жермен должны генерироваться вашей программой, а не из внешнего источника.
- Ваша программа должна вычислить все простые числа Софи Жермен под 2³²-1
- Вы должны распечатать каждый отдельный штрих Софи Жермен, найденный вашей программой.
- Человек с самым низким счетом выигрывает
счет
- 2 балла за байт вашего кода
- -10, если вы можете показать простое число, сгенерированное вашей программой, больше чем 2³²-1
code-challenge
primes
Мяу микс
источник
источник
Ответы:
CJam
Для 17 символов мы получаем полное перечисление до 2 ^ 32:
Для еще 4 символов мы получаем достаточно большой диапазон, чтобы включить простое число SG больше 2 ^ 32:
с 4294967681 = 2 ^ 32 + 385 <2 ^ 32 + 400.
Конечно, мы могли бы в равной степени расширить диапазон бесплатно
источник
I,
рассматриваетсяI
как 32-разрядное целое число со знаком, поэтому максимальное значение дляI
-2 ** 31 - 1
.Pyth, 19 байтов * 2 - 10 = 28
Обратите внимание, что онлайн-компилятор / исполнитель не показывает вывод, потому что это бесконечный цикл.
Разъяснение:
источник
PZ
не возвращает правдивое или ложное значение. Возвращает простую факторизациюZ
. Тестирование для простого -!tPZ
это проверка того, содержит ли первичная факторизация только один фактор.!tP
ошибки0
и1
быть простыми, хотя, так как их первичная факторизация содержит только 1 фактор. Простое решение - заменить всеZ
наK
и назначитьK2
в начале.K1
вместоK2
, и поменяйте местами if и инкремент. Таким образом, вы можете удалить)
. И+1*K2
это то же самое, что иhyK
.Pyth - 2 * 16 байт - 10 = 22
Использует обычный метод первичной проверки в Pyth с
!tP
и применяет его как к числу, так и к его безопасному простому, с небольшим приемом для проверки обоих сразу. Идет до10^10
, так что я иду за бонусом.Объяснение скоро.Попробуйте до 1000 онлайн .
источник
источник
CJam, 34 (2 * 22 - 10)
Печатает все простые числа Софи Жермен
12 ** 9
, в том числе4294967681 > 2 ** 32
.По моим оценкам, это займет около 8 часов на моей машине. Я буду управлять этим вечером.
источник
Haskell, 2 * 54-10 = 98
132i
это первичная проверка.p
берет все числа,n
где обаn
и2*x+1
простые.p
это бесконечный список.Редактировать: лучший способ проверить,
2*n+1
является ли простое число.источник
Юлия, 2 * 49 - 10 = 88
Печатает их в формате списка
[2,3,5,11,...]
. Если этот формат, использующийprimes
функцию или ожидающий завершения всех вычислений для печати, неприемлем, он печатает их по одному на строку во время работы.Это немного длиннее, 52 символа. Оба вычисляют все простые числа Софи Жермен до
2^33
, поэтому они должны получить скидку в 10 баллов.источник
Python 3,
124123 байтаКак это работает?
Попробуйте это онлайн здесь .
Мой компьютер говорит, что он сгенерировал 0,023283% всех простых чисел Софи Жермен ниже 2 ^ 32.
Когда он закончится, я выложу его на pastebin, если будет достаточно строк. Вы можете использовать это, чтобы проверить, что у вас есть все.
источник
.5
короче0.5
Perl, 2 * 57-10 = 104
42 секунды до 2 ^ 32, от 1m26 до 2 ^ 33. Будет работать на 50% быстрее, если
2*$_+1
записано как,1+$_<<1
но это еще один байт.Также устанавливается модуль,
primes.pl
который имеет множество фильтров, в том числе один для простых чисел Софи-Жермена. Итак:primes.pl --so 2**33
(20 байт)источник
Рубин, 61 * 2 - 10 = 112
Это займет целую вечность, чтобы распечатать все значения до 2 ** 32
редактировать
Сбрил несколько байтов, подставив Float :: INFINITY для 1.0 / 0
источник
PARI / GP, 46 * 2 - 10 = 82
источник