Учитывая число N, задача состоит в том, чтобы получить сумму пирамиды из N простых чисел. Чтобы прояснить ситуацию, вот пример:
Input: 4
Мы перечислим первые 4
простые числа, а затем вычислим их сумму. После этого мы вычислим суммы сумм и так далее:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Вы можете видеть, что окончательный результат 33 . Вот еще один пример с N = 8:
2
> 5
3 > 13
> 8 > 33
5 > 20 > 83
> 12 > 50 > 205
7 > 30 > 122 > 495
> 18 > 72 > 290 > 1169
11 > 42 > 168 > 674
> 24 > 96 > 384
13 > 54 > 216
> 30 > 120
17 > 66
> 36
19
Вы можете видеть, что окончательный результат 1169 .
Вот еще один пример с нечетным N, N = 3:
2
> 5
3 > 13
> 8
5
Это дает нам 13 в результате
Ваша задача - написать программу или функцию, которая принимает целое число больше 0 и выводит конечный результат.
Вот некоторые результаты теста:
1: 2
2: 5
3: 13
4: 33
5: 83
6: 205
7: 495
8: 1169
9: 2707
10: 6169
11: 13889
12: 30993
13: 68701
14: 151469
15: 332349
16: 725837
17: 1577751
18: 3413221
19: 7349029
20: 15751187
21: 33616925
22: 71475193
23: 151466705
24: 320072415
25: 674721797
26: 1419327223
27: 2979993519
28: 6245693407
29: 13068049163
30: 27297614797
31: 56929779663
32: 118543624847
33: 246475746269
34: 511766428817
35: 1061264813321
36: 2198298700845
37: 4548996804811
38: 9405003164065
39: 19429190057417
40: 40107799133677
41: 82736199371081
42: 170553108953473
43: 351333736092089
44: 723224546040181
45: 1487710742395387
46: 3058157261678325
47: 6282142186547177
48: 12896743408107403
49: 26460652594917673
50: 54262186256186881
51: 111224391050741687
52: 227896496141836195
53: 466805185374509003
54: 955904519939662217
55: 1956988697590280537
56: 4005572366722212927
57: 8196803221276230093
58: 16769645303734608963
59: 34300013739423719561
60: 70136585692535099353
61: 143371352962891226373
62: 292978031452308375001
63: 598482012866917021541
64: 1222083126601616763473
65: 2494459637841415902073
66: 5089478703050176444803
67: 10379794709536133386939
68: 21160351440305258275579
69: 43119914481530819445497
70: 87833066190052490228187
71: 178841897161848754603319
72: 364014682565128163812791
73: 740654046243174781813209
74: 1506496270380756958474835
75: 3063280375436290387756263
76: 6227039507615221644290617
77: 12655020557561801933128885
78: 25712267089927372837530869
79: 52230425385198423845305957
80: 106076955379202815098486497
81: 215397386589448754140867649
82: 437308717912632286770415395
83: 887706233370396897803709611
84: 1801721089699452657985592689
85: 3656329898231436156162865559
86: 7418972676822310377574227797
87: 15051599987013574096449515927
88: 30532404546282900804722616529
89: 61926565462373271494414919017
90: 125582269494835615524470915169
91: 254631689768733901573206365479
92: 516210444730946464864091626473
93: 1046330617753410129672316234861
94: 2120493010460433691014704829565
95: 4296639990460140795780826898943
96: 8704509990931940668688755806845
97: 17631229933967301681217551193565
98: 35706243541395815998303171050377
99: 72298621492552303967009812018997
Это код-гольф , поэтому выигрывает самое короткое количество байтов!
[1169]
для8
) приемлемым?Ответы:
J 15 байт
Объяснение:
В основном так же, как мой ответ Mathematica .
источник
Mathematica,
383635 байтисточник
Минколанг 0,14 , 17 байт
Попробуйте здесь и проверьте все тесты здесь .
объяснение
Я использую в основном тот же алгоритм, что и несколько предыдущих ответов, в которых используются биномиальные коэффициенты. Всякий раз, когда вы видите добавление такой пирамиды чисел, первым должен прийти на ум треугольник Паскаля. Я не вижу, чтобы какие-либо другие ответы объяснили, почему это работает, поэтому я сделаю это.
БОЛЬШЕ объяснений
Как видите, простые числа
2,3,5,7
появляются1,3,3,1
раз в конечном результате. Позвольте немного изменить макет.Количество раз, которое
3
будет способствовать конечному результату, равно числу путей от3
верхнего до левого угла, перемещаясь только вверх и влево . Здесь есть три таких пути3
:Обратите внимание, что я могу изменить направление без потери общности. Поэтому я хочу знать, сколько путей существует от верхнего левого угла до каждой позиции вдоль зубчатого края. Я могу считать их так ...
Для каждого числа в этом треугольнике, если это X единиц слева и Y единиц сверху, то число в этой позиции
Однако способ, которым я его использую,
X+Y = N
является постоянным иX
колеблется от 0 доN
, который идет по одной диагонали. Я умножаю каждый коэффициент на соответствующее простое число, а затем складываю все это.Смотрите статью в Википедии о треугольнике Паскаля, чтобы узнать больше об этом.
источник
JavaScript ES7 107
Злоупотребление фиксированным пределом в 27 - как скучно на самом деле находить простые числа.
Тестовый фрагмент (при использовании массива он будет работать только в Firefox)
источник
Pyth, 18 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
s*V.cLtQUQ.f}ZPZQ0
Pyth -
1615 байтИспользует уменьшение и
first_n
фильтрацию.Тестовый пакет .
источник
Pyth, 16 байт
Очень просто на самом деле:
источник
Haskell, 74 байта
Пример использования:
Как это работает: многократно рассчитать соседние суммы всех простых чисел. Возьмем голову за
n
итерацию.Поскольку оператор индекса
!!
основан на нуле, я добавляю пустой список, чтобы избежать необходимости его использования!!(n-1)
.источник
Matlab, 76 байт
Спасибо Дэвиду за сохранение большого количества байтов!
Старая версия, 98 байт
источник
x
помощьюx=primes(103);
экономит несколько байт, так как вам нужно только идти доN=27
(и это не имеет значения , еслиx
имеет больше записей , чем нужно).conv
была отличная идея, хотя!JavaScript (ES6), 121 байт
объяснение
Большая часть размера приходит от поиска простых чисел.
Тест
Показать фрагмент кода
источник
Утилиты Shell + GNU и BSD, 92
источник
Серьезно, 23 байта
Выводит результат в виде списка длиной 1:
8 -> [1169]
Попробуйте онлайн
Объяснение:
источник
Mathematica 73 байта
Как это работает
Prime@n~Table~{n,#}&
дает список первых#
простых чисел.Partition[#,2,1]&
переставляет список номеров,{a, b, c, d ...}
как{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
затем возвращается{a+b, b+c, c+d...}
.NestWhile
начинается со списка#
простых чисел и применяется повторно,Plus@@@Partition...
если в списке более одного числа.На первые 1000 простых чисел требуется около 1/5 секунды.
источник
Python 2, 159 байт
источник
print
команда внутри цикла? Разве вы не хотите печатать только один раз, в конце?Млечный Путь 1.4.8 ,
2625 байтЭтот ответ не конкурирует. Некоторые операции были созданы после публикации этого вопроса (но не обязательно для этой задачи).
Я смог удалить байт после прочтения комментариев. Выход представляет собой одноэлементный список.
объяснение
использование
источник
Цейлон, 169 байт
Это определяет две функции -
s
вычисляет сумму пирамиды последовательности целых чисел, в то время какp
вызывает это для последовательности первогоn
простых чисел.Похоже, примерно половина размера находит первый
n
простые числа, другая половина вычисляет сумму пирамиды.Вот отформатированная / закомментированная версия:
источник
Желе , 7 байт
Попробуйте онлайн!
Первоначально я написал ответ на брахилоге
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
, но когда он получил 19 байтов, я решил, что, возможно, мне стоит попробовать другой язык.Очевидно, что отображение числа обрабатывает его как диапазон от 1 до самого включительно, а целые числа сортируют больше, чем списки или что-то
''
еще.источник
APL (NARS), 41 символ, 82 байта
При вводе, если нужно использовать большое число, необходимо ввести тип number_x как 47x. Может быть что-то не в порядке: я здесь пишу, что n простых чисел находятся в наборе 1..n ^ 2 Test:
источник
Perl 6 , 52 байта
Попробуйте онлайн!
Блок анонимного кода, который принимает аргумент и распечатывает список из одного элемента, содержащий результат.
источник
Stax , 13 байт
Запустите и отладьте его
источник