Простые числа везде ...
они прячутся внутри Пи
3.141592653 58979 3238 462643 3832 795028841 971693993751
Давайте получим эти простые числа!
Соревнование
Получив в качестве входных данных целое число n>0
, выясните, сколько простых чисел спрятано в первых n
цифрахPi
Примеры
Ибо n=3
мы должны искать простые числа в [3,1,4]
. Есть 2 простых числа (3,31)
, поэтому ваш код должен выводить 2
For n=10
, первые 10 цифр [3,1,4,1,5,9,2,6,5,3]
и ваш код должен выводиться, 12
потому что они [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]
были скрыты (и найдены!)
Тестовые случаи
вход -> выход
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
правила
Ваш код должен быть в состоянии найти все простые числа , по крайней мере , наn=50
Да, вы можете жёстко первые 50 цифр от Pi
если вы любите
записи жесткого кодирования ответов неверны
Это код-гольф. Самый короткий ответ в байтах побеждает!
Ответы:
05AB1E ,
108 байт-2 байта благодаря
p
Аднану ( векторизация)Попробуйте онлайн! (будет работать до n = 98413, но будет очень медленным даже для n = 50 из-за необходимости проверять такие большие числа на простоту - TIO истекает через 60 секунд для n = 50.)
Как?
источник
<žsþŒÙpO
должен работать на 8 байтовp
векторизует спасибо!Mathematica, 76 байт
источник
Tr[1^...]
Это умный способ найти длину списка, хорошо!Mathematica,
1049790 байтХахахаха, мне удалось сделать эту работу. Я понятия не имею, как использовать Mathematica. XD
Входные данные:
источник
50 96
ОП говорит, что 50 цифр содержат 93 простых числа, поэтому точность Симпи может быть выключена ..?Python 3 ,
274237207194189 байт-37 байт благодаря Wheat Wizard! -14 байтов благодаря Mr.Xcoder.
Твердо кодирует первые 50 цифр числа Пи, но все остальное вычисляет вручную.
Попробуйте онлайн!
источник
l=list("31415...)
должен сэкономить ~ 40 символов. И это изменение позволяет вам заменитьmap(str,i)
простоi
.len(l)
R
156123 байтаСупер интересное решение. Работаю над правильным.
Сохранено 33 байта благодаря @Giuseppe.
R (+ цифры и gmp), 198 байт
Правильное решение. Принимает в
n
качестве ввода.Используется
numbers::dropletPi(50)
для генерации первых 50 десятичных знаков числа Пи.gsub
удаляет десятичную точкуsubstring
принимает каждую возможную подстроку (неожиданный сюрприз) от pi доn
.Возвращенный список сглаживается и конвертируется в
gmp
российскийbigz
формат. Этот формат требуется для хранения целых чисел длиной 50.unique
принимает уникальные значения этого вектора. Этот результат сохраняется вx
.Затем мы проверяем на простоту. Это сложно, потому что есть множество крайних случаев и неприятностей:
Для высокого
n
, есть0
в пи. Это приводит к подстрокам с ведущим нулем.as.bigz
производитNA
s с тем, что должно быть удалено.На аналогичном замечании подстрока
"0"
будет аварийно завершенаgmp::factorize
, поэтому ее также необходимо удалить.Для
n=1
,x = 3
. Что само по себе нормально, ноbigz
представление3
является итеративным, поэтому запутаетсяsapply
и сообщит о 16 простых числах. Для этого мы берем минимальную длину вектораx
и количество простых чисел в нем.gmp::isprime
не может надежно обрабатывать большие числа. Таким образом, вместо этого мы используем,gmp::factorize
и проверка длины вывода равна 1.Так что во всем мы убираем
0
иNA
изx
. Мы разлагаем всеx
и проверяем на длину. Мы подсчитываем количество вхождений1
и возвращаемmin(occurences, length(x))
.источник
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))
вместо вашего вектора 123 байта :)Желе ,
5932 байта-27 байт благодаря Эрику Аутгольферу.
Попробуйте онлайн!
объяснение
источник