Нет, я не имею в виду ϕ = 1.618...
и π = 3.14159...
. Я имею в виду функции .
- φ (x) - число целых чисел, меньших или равных числу, к
x
которому относятся простые числаx
. - π (x) - число простых чисел, меньших или равных
x
. - Допустим, что «не пи» - это тогда π̅ (x), и определим его как число композитов, меньшее или равное
x
.
задача
Учитывая , строго положительное целое число x
, вычислить ф (П (х)) . Оценка в байтах.
Примеры
Каждая строка состоит из ввода (от 1 до 100 включительно) и соответствующего вывода, разделенных пробелом.
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 2
9 2
10 4
11 4
12 2
13 2
14 6
15 4
16 6
17 6
18 4
19 4
20 10
21 4
22 12
23 12
24 6
25 8
26 8
27 16
28 6
29 6
30 18
31 18
32 8
33 12
34 10
35 22
36 8
37 8
38 20
39 12
40 18
41 18
42 12
43 12
44 28
45 8
46 30
47 30
48 16
49 20
50 16
51 24
52 12
53 12
54 36
55 18
56 24
57 16
58 40
59 40
60 12
61 12
62 42
63 20
64 24
65 22
66 46
67 46
68 16
69 42
70 20
71 20
72 32
73 32
74 24
75 52
76 18
77 40
78 24
79 24
80 36
81 28
82 58
83 58
84 16
85 60
86 30
87 36
88 32
89 32
90 48
91 20
92 66
93 32
94 44
95 24
96 70
97 70
98 24
99 72
100 36
Используйте эту ссылку для расчета ожидаемого результата для любого входа. Кроме того , список входов и выходов для x <= 1000
предусмотрен здесь на Pastebin . ( Создано с помощью этой программы Minkolang .)
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
источник
Ответы:
GS2 ,
1210 байтИсходный код использует кодировку CP437 . Попробуйте онлайн!
Тестовый забег
Как это устроено
источник
Regex (.NET),
122113 байтовПредполагая, что входные и выходные данные унарные, а выходные данные берутся из основного совпадения регулярного выражения.
Разбивка регулярного выражения:
^(?=((?=.*$(?<=^(\3+(.+.))(.*?(?>(.\4)?)))).)+(.*))
вычисляет π̅ (x) и захватывает остальную часть строки в группе 6 захвата для утверждения во второй части..*$
устанавливает указатель на конец строки, чтобы у нас было целое числоx
в одном направлении.(?<=^(\3+(.+.))(.*?(?>(.\4)?)))
совпадает справа налево и проверяет составное число, выполняя цикл от x до 0.(.*?(?>(.\4)?))
является «переменной», которая начинается с 0 в первой итерации и продолжается от числа в предыдущей итерации и повторяется до x. Поскольку наименьшее составное число равно 4, оно(.\4)?
никогда не будет совпадать, если доступна группа захвата 4.^(\3+(.+.))
проверяет, что осталось от «переменной» выше (то естьx - "variable"
), является ли она составным числом.((?=.*(?=\6$)(?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?)))).)+
вычисляет φ (π̅ (x)), ограничивая операции слева направо с(?=\6$)
..*(?=\6$)
устанавливает указатель в положение π̅ (x). Обозначим y = π̅ (x).(?<=(?!(.+.)\8*(?=\6$)(?<=^\8+))(.+?(?>\9?)))
совпадает справа налево и проверяет относительное простое число, повторяя цикл от (y - 1) до 0(.+?(?>\9?))
является «переменной», которая начинается с 1 в первой итерации и продолжается от числа в предыдущей итерации и повторяется до y(?!(.+.)\8*(?=\6$)(?<=^\8+))
соответствует слева направо 1 и проверяет, являются ли «переменная» и y относительными простыми числами.(.+.)\8*(?=\6$)
выбирает делитель «переменной», который больше 1, и побочным эффектом является то, что у нас есть целое число у слева.(?<=^\8+)
проверяет, является ли делитель «переменной» также делителем у.1 В .NET упреждающий просмотр устанавливает направление на LTR вместо того, чтобы следовать текущему направлению; просмотр сзади устанавливает направление на RTL, а не наоборот.
Проверьте регулярное выражение в RegexStorm .
Редакция 2 отбрасывает группы без захвата и использует атомарные группы вместо условного синтаксиса.
источник
J
15 15байтЭто молчаливый, монадический глагол. Попробуйте его в Интернете с J.js .
Как это устроено
источник
Серьезно , 27 байтов
Я победил CJam! Попробуйте онлайн
Пояснение (
a
относится к вершине стека,b
относится к секунде сверху):Примечание: с момента публикации этого ответа я добавил функции pi и phi в Seriously. Вот неконкурентный ответ с этими функциями:
Пояснение (некоторые команды смещены, чтобы не перекрывать другие):
источник
Юлия,
5250 байтЭто создает безымянную функцию, которая принимает и целое число и возвращает целое число. Чтобы назвать его, дайте ему имя, например
f=x->...
.Ungolfed:
источник
sum
вместо того,count
чтобы сохранить пару символов. Это немного расстраивает, хотя - другой способ подсчета простых чисел,sum(isprime,1:x)
точно такой же длины, какendof(primes(x))
.sum
не для пустых коллекций, аcount
возвращает 0. Таким образомsum
, не даст желаемого результата дляx<4
.Mathematica, 24 байта
источник
PhiNotPi@#&
: 11 байт: PPyth, 14 байт
Демонстрация , Верификатор
Мы вычисляем композиты с помощью простого фильтра, берем его длину и сохраняем в
J
. Затем мы берем gcd ofJ
с каждым числом доJ
и считаем, сколько результатов равно 1.источник
Минколанг 0,11 , 12 байт (НЕ конкурентно)
Этот ответ не является конкурентным. Я реализовал пи и фи как встроенные модули, прежде чем опубликовать вопрос, что дает мне несправедливое преимущество. Я публикую это только для тех, кто интересуется языком.
Попробуй это здесь.
объяснение
источник
CJam, 28 байтов
Попробуйте эту скрипку в интерпретаторе CJam или проверьте все контрольные примеры сразу .
Как это устроено
источник
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
. Это правильно?Python, 137
139источник
range(n) if
и])) if
Сетчатка , 48 байт
Попробуйте онлайн!
объяснение
Преобразовать ввод в унарный.
Подсчитайте составные числа, не превышающие ввод, посчитав, как часто мы можем сопоставить строку, которая состоит как минимум из двух повторений с коэффициентом не менее 2.
Преобразовать в унарный снова.
Вычислите φ, посчитав, из скольких позиций невозможно найти коэффициент (по крайней мере 2) суффикса из этой позиции, который также является фактором префикса (если мы найдем такой коэффициент, то этот
i <= n
коэффициент будет равенn
поэтому не взаимно к нему). В.
конце гарантирует, что мы не считаем ноль (для которого мы не можем найти фактор по крайней мере 2).источник
Regex (.NET),
8886 байтПопробуйте онлайн! (Как программа Retina.)
Использует тот же ввод / вывод, что и ответ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ , т.е. унарный ввод, и он соответствует подстроке длины результата.
Можно было бы еще больше сократить это, заменив одну или обе уравновешивающие группы прямыми ссылками.
Альтернатива при том же количестве байтов:
Есть также некоторые альтернативы для первой половины, например, использование отрицательного прогноза вместо положительного для композитных чисел, или использование там условного.
объяснение
Я предполагаю, что у вас есть базовое понимание балансировки групп , но вкратце, группы захвата в .NET являются стеками (поэтому каждый раз, когда вы повторно используете группу захвата, новый захват помещается сверху) и
(?<-x>...)
извлекает захват из стекаx
. Это очень полезно для подсчета вещей.источник
PARI / GP, 27 байт
источник
Желе неконкурентоспособное
7 байт. Этот ответ не является конкурирующим, поскольку он использует язык, который задним числом.
Как это устроено
источник
Октава,
5251Изменить: сохранено 1 байт благодаря Томасу Ква
Объяснение:
источник
PARI / GP, 35 байт
источник
SageMath 26 байт
Хорошо работает даже для
n=0
иn=1
, благодаря реализации Sage.источник
Желе , 6 байт
Попробуйте онлайн!
Это сотрудничество между caird coinheringahhing и мистером Xcoder в чате
объяснение
источник
Gaia , 5 байт
Попробуйте онлайн!
источник
Ом v2 , 7 байт
Попробуйте онлайн!
источник
MATL , 9 байт (не конкурирует)
Этот ответ не является конкурирующим, так как язык задним числом.
Использует версию (10.1.0) языка / компилятора.
Попробуйте онлайн!
объяснение
источник
GAP, 33 байта
Number(l,p)
подсчитывает, сколько элементовl
удовлетворяютp
. Чтобы компенсировать тот факт, что 1 не является ни простым, ни составным, мне нужно вычесть из n больше числа простых чисел до n. Вместо-1
двух байтов я начинаю список с -2 вместо 1 или 2, добавляя еще одно число, которое считается простымIsPrime
для только одного дополнительного байта.источник
Python 3,5 - 130 байт
Если недопустимо передавать функцию как p (n, 0,0), тогда +3 байта.
Это использует тот факт, что я использую теорему Вильсона, чтобы проверить, является ли число составным, и должен вызвать математический модуль для факториальной функции. Python 3.5 добавил функцию gcd в математический модуль.
Первый цикл кода будет увеличивать k на единицу, если число составное, и увеличиваться на 0 в остальном. (Хотя теорема Вильсона справедлива только для целых чисел больше 1, она рассматривает 1 как простое число, поэтому позволяет нам использовать это).
Затем второй цикл перебирает диапазон количества композиций и увеличивает g только тогда, когда значения не pi и l взаимно просты.
g тогда число значений, меньших или равных количеству составных чисел, меньших или равных n.
источник
Python 3 + sympy ,
5958 байт* -1 байт путем замены
compositepi(k)
наk+~primepi(k)
.Попробуйте онлайн!
источник
05AB1E ,
118 байтПопробуйте онлайн!
Это может быть не конкуренция - я не могу узнать, когда был сделан 05AB1E.
Как это устроено
источник
Пыть , 6 байт
Объяснение:
Попробуйте онлайн!
источник
APL NARS, 38 байтов, 19 символов
13π - общая функция, а 2π - простая функция подсчета <= ее аргумент. Контрольная работа
источник
Добавить ++ , 21 байт
Попробуйте онлайн!
Как это устроено
R
þP
þ
P
bL
1_
dR
Þ%
bL
G
!!
Да, я действительно хотел попробовать новый LaTex
источник