Введение
Функция подсчета простых чисел , также известная как функция Pi , возвращает количество простых чисел, меньших или равных x.
Вызов
Ваша программа возьмет целое число x, которое вы можете считать положительным, и выведите одно целое число, равное количеству простых чисел, меньших или равных x. Это соревнование по коду , поэтому победителем станет программа с наименьшим количеством байтов.
Вы можете использовать любой язык по вашему выбору при условии, что он существовал до того, как возникла эта проблема, но если в языке есть встроенная функция подсчета простых чисел или функция проверки простоты (например, Mathematica), эта функция не может использоваться в вашем коде. ,
Пример входов
Вход:
1
Выход:
0
Вход:
2
Выход:
1
Вход:
5
Выход:
3
Ответы:
05AB1E , 3 байта
Это предполагает, что встроенные модули факторизации разрешены. Попробуйте онлайн!
Как это работает
источник
Python 2, 45 байт
Используется теорема Вильсона для простого генератора. Продукт
p
отслеживает(k-1)!^2
, иp%k
1 для простых чисел и 0 для не простых.источник
MATL ,
11, 10, 8, 5 байтовПопробуйте онлайн!
Я написал версию, в которой было действительно классное объяснение того, как работают матрицы MATL:
:YF!s1=1
Но это уже не актуально. Проверьте историю изменений, если вы хотите увидеть ее.
Новое объяснение:
Три байта сохранены благодаря гениальному решению Дениса
источник
YF!s1=s
Желе ,
85 байт3 байта сохранены благодаря @Dennis!
Попробуйте онлайн!
Порт ответа DJMcMayhem на MATL (прежняя версия) уточнен Деннисом.
источник
ÆE
, так как каждому показателю соответствует свой простой множитель.RÆESL
добивается именно этого.!ÆEL
будет еще короче.Шаблоны MediaWiki с ParserFunctions , 220 + 19 = 239 байт
Для вызова шаблона:
Расположен в стиле Лисп:
Просто базовый тест на простоту от 2 до n . Числа с тремя скобками вокруг них являются переменными, где
{{{1}}}
есть п ,{{{2}}}
есть число испытывается,{{{3}}}
является фактором , чтобы проверить.источник
Perl, 33 байта
Включает +1 для
-p
Дайте номер ввода на STDIN
primecount.pl
Дает неправильный результат для,
0
но это нормально, операционная система запросила поддержку только для положительных целых чисел.источник
Сетчатка, 31 байт
Количество байтов предполагает кодировку ISO 8859-1. Преобразовать ввод в унарный, сгенерировать диапазон от
1
доn
, каждый на отдельной строке. Подходим простые числа.Попробуйте онлайн - ввод намного больше, чем 2800, либо превышен, либо не хватает памяти.
Ссылки:
Генератор дальности Мартина
Первоклассная проверка Мартина
источник
Желе , 3 байта
Попробуйте онлайн!
Как это работает
источник
Желе ,
13 11 10 9 8 76 байтНикаких встроенных простых функций вообще не используется
-1 байт благодаря @miles (используйте таблицу)
-1 байт благодаря @Dennis (преобразовать из унарного для подсчета делителей)
TryItOnline
Или посмотрите первые 100 терминов серии
n=[1,100]
, также в TryItOnlineКак?
источник
%þ`¬Sċ2
используя таблицу остатков.ḍþḅ1ċ2
сохраняет байт.JavaScript (ES6),
4543 байтаМодификация моей
363533-байтовой функции простоты (1 байт сохранен @Neil, 2 - @Arnauld):(Я не могу опубликовать это где-либо, потому что это число простое? Принимает только полные программы ...)
Тестовый фрагмент
Показать фрагмент кода
источник
&
в середине своей функции первичности.PowerShell v2 +, 98 байт
Внимание: это медленно для большого ввода.
По существу, унарный поиск из этого числа является простым числом? , в сочетании с
for
петлей и$j++
счетчиком. Немного дополнительной логики на лицевой стороне, чтобы учесть ввод граничных случаев1
и2
, благодаря тому, как ограждение работает вfor
циклах.источник
05AB1E , 5 байтов
Предполагается, что встроенные функции факторизации допускаются.
Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
ÅPg
это то, что было бы сейчас, верно?CJam , 7 байтов
Попробуйте онлайн! Использует функцию факторизации.
Объяснение:
источник
Желе , 6 байт
Здесь используются только базовая арифметика и теорема Вильсона. Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
C # 5.0
7877Ungolfed
источник
Pyth -
76 байтПоскольку другие используют основные функции факторизации ...
Тестовый пакет .
источник
Баш + coreutils, 30
Ideone.
Пакет Bash + coreutils + BSD-games, 22
Этот короткий ответ требует , чтобы у вас есть пакет bsdgames установлен:
sudo apt install bsdgames
.источник
Пайк,
86 байтПопробуй это здесь!
Спасибо Maltysen за новый алгоритм
источник
C #, 157 байт
Полная программа с тестовыми примерами:
Начинает занимать некоторое время, когда вы превышаете 1 миллион.
источник
Matlab, 60 байт
Продолжая мое приложение к однострочным функциям Matlab. Без использования факторизации:
Учитывая, что простое число
y
имеет только два фактора[1,y]
: мы считаем числа в диапазоне,[1,x]
которые имеют только два фактора.Использование факторизации позволяет значительно сократить (до 46 байт).
Вывод: надо заглянуть в языки игры в гольф: D
источник
На самом деле, 10 байт
Это было самое короткое решение, которое я обнаружил, которое не приводило к ошибкам интерпретатора в TIO. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
Желе , 3 байта
У желе есть встроенная функция подсчета
ÆC
простых чисел и функция проверки простых чиселÆP
, вместо этого она использует встроенную функцию генерации простых чиселÆR
и принимает длинуL
.Я предполагаю, что это примерно такая же граница, как и использование встроенных простых факторизаций, которые также будут занимать 3 байта с
!Æv
(!
факториал,Æv
подсчет простых факторов)источник
PHP,
9692 байтаСохранено 4 байта благодаря Роману Грефу
Тест онлайн
Не проверенный код тестирования:
Тест онлайн
источник
isInt(...)?1:0
а не толькоisInt(...)
APL (Dyalog Unicode) , 13 байтов SBCS
Попробуйте онлайн!
⍳
ɩ ndices 1 ... N⧽
∘.|
Остаток стол ( с использованием тех двух осей , как)⍳
ɩ ndices 1 ... N0+.=
сумма элементов равна нулю (т.е. сколько делителей у каждого есть)2+.=
сумма элементов равна двум (то есть сколько простых чисел там)источник
Python 3, 40 байт
Нечетное целое число k является простым, если только 2 ** (k-1) конгруэнтно 1 mod k. Таким образом, мы просто проверяем это условие и добавляем 1 для случая k = 2.
источник
MATL , 9 байт
Это позволяет избежать простого разложения. Его сложность O ( n ²).
Попробуйте онлайн!
источник
JavaScript (ES6),
50 + 246 + 243 байтаСохранено
35 байтов благодаря Нейлу:eval
может получить доступ кn
параметру.В
eval(...)
проверяет , еслиn
первично.Предыдущие решения:
Количество байтов должно быть +2, потому что я забыл назвать функцию
f=
(необходим для рекурсии)46 + 2 байта (сохранено 3 байта благодаря продуктам ETH):
50 + 2 байта:
источник
eval
можно получить доступ кn
параметру вашей функции (которую вы забыли назвать, стоит 2 байта; приятно знать, что я не единственный, кто совершает эту ошибку), который экономит вам 5 байтов.eval
. Протестировано с Firefox, Chrome и Edge это сработало для меня. Объяснение: eval () анализирует в контексте оператора . Два примера:a=12;f=b=>eval('a + 5');f(8)
дисплеи17
иa=12;f=a=>eval('a + 5');f(8)
дисплеи13
.Java 7,102 байта
Грубая сила
Ungolfed
источник
1
. В настоящее время возвращается1
вместо0
. Вы можете исправить это, либо измененияreturn c;
кreturn n<2?0:c;
или изменения,c=1,
к,c=n<2?0:1,
.q 35 байт
источник
На самом деле, 10 байт
Если мой первый ответ «На самом деле» запрещен для использования функции генерации простых чисел, то это резервный ответ с использованием теоремы Уилсона. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Попробуйте онлайн
источник