GolfScript, 59 символів
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Цей сценарій не відповідає деяким вимогам:
- Він працює правильно лише для входів
n >= 2, інакше він виходить з ладу.
- Вихід обрізається цілим числом.
- Жахлива продуктивність для будь-яких помірно великих розмірів
n
Короткий опис коду:
~:N..*Вхід зберігається в N, і ми натискаємо і обидва, nі квадрат n*nвідразу.
.,2>Ми створимо список простих чисел, фільтруючи масив [2..n*n]. Ми використовуємо наш попередній обчислення n*nяк (дуже погано!) Верхньої межі для пошуку простого числа, що перевищує n.
{:P{(.P\%}do(!},Наш попередній масив фільтрується пробним поділом. Кожне ціле число P тестується на кожне ціле число [P-1..1].
{{N-.*}$0=}:C~Сортує попередній масив на основі відстані до nта захоплює перший елемент. Зараз у нас найближчий розквіт.
[1.{.@+.N<}do]CМи генеруємо Fibonnacis, поки не отримаємо один більший, ніж n. На щастя, цей алгоритм, природно, відслідковує попередні Fibonnaci, тому ми їх кидаємо в масив і використовуємо наш попередній сортування відстані. Зараз у нас є найближчі Фібонначі.
+++4/Середній. Зауважте, що GolfScript не підтримує поплавці, тому результат усікається.
GolfScript, 81 символ
Ось варіант, який відповідає всім вимогам.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Щоб забезпечити належну поведінку n<2, я уникаю 2<(збоїв, коли масив невеликий), а замість цього використовую 3,|2,^. Це гарантує, що масив головного кандидата - саме [2]коли n < 2. Я змінив верхню межу для наступного прайму з n*nна 2*n( постулат Бертранда ). Також 0 вважається числом Фібонначі. Результат обчислюється математикою з фіксованою точкою в кінці. Цікаво, що здається, що результат завжди знаходиться в четверті (0, .25, .5, .75), тому, сподіваюся, достатньо двох точних точок.
Моя перша тріщина при використанні GolfScript, я впевнений, що є можливість для вдосконалення!