Цікава формула простій фракції


17

З урахуванням додатного цілого n виведіть цілі числа a і b (утворюючи зменшений дріб a / b ) таким чином, що:

Формула a / b = добуток від k = 1 до n: (p_k ^ 2 - 1) / (p_k ^ 2 + 1)

Де p k - k- е просте число (при p 1 = 2).

Приклади:

1   -> 3, 5
2   -> 12, 25
3   -> 144, 325
4   -> 3456, 8125
5   -> 41472, 99125
15  -> 4506715396450638759507001344, 11179755611058498955501765625
420 -> very long

Імовірнісні прості перевірки дозволені, і це нормально, якщо відповідь не вдасться через обмеження в цілому типі вашої мови.


Виграє найкоротший код у байтах.


Чи можемо ми вивести 3.0замість цього 3?
Аднан

2
@AandN Я думаю ... Переконайтеся, що ваша програма правильна для всіх входів, хоча вона не страждає від помилок з плаваючою комою для великих входів.
orlp

Чи можемо ми вивести aі bяк раціональний тип?
Алекс А.

2
@AlexA. Тільки якщо на виході чітко показано обидва цілих числа.
orlp

1
@SamYonnou Ті, які вже існують, але зловживання натурними типами чисел, щоб тріавілізувати проблему, - одна з лазів, заборонених за замовчуванням.
Денніс

Відповіді:


6

М , 9 байт

RÆN²‘İḤCP

Спробуйте в Інтернеті!

Дрібниці

Знайомтесь з М!

М - вилка желе, спрямована на математичні завдання. Основна відмінність Jelly від M полягає в тому, що M використовує нескінченну точність для всіх внутрішніх обчислень, представляючи результати символічно. Як тільки M стане більш зрілим, Jelly поступово стане більш багатоцільовим і менш орієнтованим на математику.

M дуже багато роботи в прогрес (повної помилок, а не на самому ділі , що відрізняється від молочка прямо зараз), але він працює як шарм для цієї проблеми , і я просто не міг встояти.

Як це працює

RÆN²‘İḤCP  Main link. Argument: n

R          Range; yield [1, ..., n].
 ÆN        Compute the kth primes for each k in that range.
   ²‘      Square and increment each prime p.
     İ     Invert; turn p² + 1 into the fraction 1 / (p² + 1).
      Ḥ    Double; yield 2 / (p² + 1).
       C   Complement; yield 1 - 2 / (p² + 1).
        P  Product; multiply all generated differences.

Є ÆNєдиним M-конкретним оператором? Також Меллі
калькуляторFeline

Жоден з цих операторів не є специфічним для М. Різниця полягає в тому, що M обчислює дріб, тоді як Jelly обчислює число з плаваючою комою.
Денніс

9

Математика, 32 байти

1##&@@(1-2/(Prime@Range@#^2+1))&

Безіменна функція, яка приймає цілий вхід і повертає фактичний дріб.

Для цього використовується той факт, що . Код потім гольфується завдяки тому, що Mathematica містить усі основні арифметичні над списками. Таким чином, ми спочатку створюємо список , потім отримуємо всі ці праймери та підключаємо цей список до вищевказаного виразу. Це дає нам список усіх факторів. Нарешті, ми множимо все разом, додавши до списку, в який можна пограти .(p2-1)/(p2+1) = 1-2/(p2+1){1, 2, ..., n}Times1##&

Крім того, ми можемо використовувати Arrayдля того ж числа байтів:

1##&@@(1-2/(Prime~Array~#^2+1))&

1-2= 1, правда?
CalculatorFeline

@CatsAreFluffy Так ( -1насправді), але 1-2/x ≠ -1/x. ;)
Мартін Ендер

@Range@±~Array~
КалькуляторFeline

6

Python 2, 106 байт

from fractions import*
n=input()
F=k=P=1
while n:b=P%k>0;n-=b;F*=1-Fraction(2*b,k*k+1);P*=k*k;k+=1
print F

Перший та четвертий рядки так сильно болять ... просто виявилося, що використання Fractionбуло краще, ніж множення окремо та використання gcd, навіть у Python 3.5+, де gcdпроживає math.

Прем'єр - покоління адаптовано з відповіді @ XNOR в тут , який використовує теорему Вільсона.


5

Рубі, 122 77 65 байт

Дякуємо Шерлоку за гоління 10 байт.

require'prime'
->n{Prime.take(n).map{|x|1-2r/(x*x+1)}.reduce(:*)}

Визначає анонімну функцію, яка приймає число і повертає a Rational.


4

PARI / GP , 33 байти

n->prod(i=1,n,1-2/(prime(i)^2+1))

Альтернативна версія (46 байт):

n->t=1;forprime(p=2,prime(n),t*=1-2/(p^2+1));t

Неконкурентна версія, що дає результат з плаваючою комою ( t_REAL) (38 байт):

n->prodeuler(p=2,prime(n),1-2/(p^2+1))


4

Pyth, 26 25

/RiFN=N*MCm,tdhd^R2.fP_ZQ

Спробуйте тут або запустіть тестовий набір .

1 байт збережено завдяки Jakube!

Досить наївна реалізація специфікацій. Використовується спіфічний "new" (я не маю уявлення, коли це було додано, але я його раніше ніколи не бачив), P<neg>який повертає, чи є позитивне значення від'ємного числа простим чи ні. Деякі карти, тощо, можливо, можуть бути гольф ...


3

Джулія, 59 42 байти

n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)

Це анонімна функція, яка приймає ціле число і повертає a Rationalз BigIntчисельником і знаменником.

Почнемо з генерування списку простих чисел менше 2 n 2 та вибору перших n елементів. Це працює тому, що н го простих завжди менше n 2 для всіх n > 1. ( Дивіться тут .)

Для кожного р з обраних n простих простих чисел, ми квадратуємо p, використовуючи елементну потужність ( .^2), і будуємо раціональний 2 / ( p + 1), де 2 спочатку перетворюється на a, BigIntщоб забезпечити достатню точність. Віднімаємо це від 1, беремо добуток отриманого масиву раціональних і повертаємо отриманий раціональний.

Приклад використання:

julia> f = n->prod(1-big(2).//-~primes(2n^2)[1:n].^2)
(anonymous function)

julia> f(15)
4506715396450638759507001344//11179755611058498955501765625

Збережено 17 завдяки Sp3000!


2

Опукла, 28 байт

Convex - це нова мова, яку я розробляю, яка базується на CJam та Golfscript. Інтерпретатора та IDE можна знайти тут . Введення - це ціле число в аргументах командного рядка. Індекси одноосновні. Використовує кодування CP-1252.

,:)_{µ²1-}%×\{µ²1+}%×¶_:Ðf/p

Ви можете чи не можете вважати цю відповідь змагальною, оскільки я працював над декількома функціями, якими користується ця програма до опублікування виклику, але зобов’язання було зроблено, коли я побачив, як ця проблема виходить з ладу.


2

MATL , 18 байт

:Yq2^tqpwQpZd1Mhw/

Спробуйте в Інтернеті!

Не вдалося отримати великі входи, оскільки до цілих чисел 2^52 яких, можна точно представити внутрішньо.

Пояснення

:     % implicitly take input n. Generate range [1,...,n]
Yq    % first n prime numbers
2^    % square
tqp   % duplicate. Subtract 1. Product
wQp   % swap. Add 1. Product
Zd    % gcd of both products
1M    % push the two products again
h     % concatenate horizontally
w/    % swap. Divide by previously computed gcd. Implicitly display

2

Математика, 45 байт

Times@@Array[(Prime@#^2-1)/(Prime@#^2+1)&,#]&

Прими? Дроби? Математика.


1

Haskell, 53 байти

Анонімна функція, 53 символи:

(scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!)

Спробуй це тут (примітка: в стандартній GHCi вам потрібно спочатку переконатися , що Data.Ratioі Data.Listімпортуються):

λ (scanl(*)1[1-2%(p*p+1)|p<-nubBy(((>1).).gcd)[2..]]!!) 5
41472 % 99125
:: Integral a => Ratio a

Індексація списку Хаскелла !! заснована на 0. (___!!)є секцією оператора , утворюючи анонімну функцію, так що (xs !!) n == xs !! n.

Це на чотири байти менше, щоб генерувати всю послідовність:

λ mapM_ print $ take 10 $     -- just for a nicer output
    scanl(*)1[1-2%(n*n+1)|n<-[2..],all((>0).rem n)[2..n-1]]
1 % 1
3 % 5
12 % 25
144 % 325
3456 % 8125
41472 % 99125
3483648 % 8425625
501645312 % 1221715625
18059231232 % 44226105625
4767637045248 % 11719917990625
:: IO ()

0

Серйозно, 25 байт

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\

Виходи a\nb ( \nце новий рядок). Великі входи потребуватимуть тривалого часу (і можуть вийти з ладу через втрату пам’яті), тому що основне покоління досить повільне.

Спробуйте в Інтернеті!

Пояснення:

,r`PªD;⌐k`M┬`π`Mi│g;)@\)\
,r                         push range(input)
  `PªD;⌐k`M                map:
   P                         k'th prime
    ª                        square
     D                       decrement
      ;                      dupe
       ⌐                     add 2 (results in P_k + 1)
        k                    push to list
           ┬               transpose
            `π`M           map product
                i│         flatten, duplicate stack
                  g;)      push two copies of gcd, move one to bottom of stack
                     @\    reduce denominator
                       )\  reduce numerator

Назва виглядає веселою. Я читав це як "Серйозно, 25 байт ?!"
katana_0

@AlexKChen Минуло майже 2 роки, як я створив мову, і це зараз окупилося :)
Mego
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.