Một công thức nguyên tố tò mò


17

Cho một số nguyên dương n đầu ra các số nguyên mộtb (tạo thành giảm phần a / b ) sao cho:

Công thức a / b = tích của k = 1 đến n: (p_k ^ 2 - 1) / (p_k ^ 2 + 1)

Trong đó p k là số nguyên tố thứ k (với p 1 = 2).

Ví dụ:

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

Kiểm tra nguyên tố xác suất được cho phép và sẽ ổn nếu câu trả lời của bạn không thành công do giới hạn trong loại số nguyên của ngôn ngữ của bạn.


Mã ngắn nhất trong byte thắng.


Chúng ta cũng có thể đầu ra 3.0thay vì 3?
Ad Nam

2
@AandN Tôi đoán ... Hãy chắc chắn rằng chương trình của bạn là chính xác cho tất cả các đầu vào, và không bị lỗi dấu phẩy động cho các đầu vào lớn.
orlp

Chúng ta có thể đầu ra abnhư một loại hợp lý?
Alex A.

2
@AlexA. Chỉ khi đầu ra hiển thị rõ ràng cả hai số nguyên.
orlp

1
@SamYonnou Những người đã tồn tại, nhưng lạm dụng các loại số bản địa để tầm thường hóa một vấn đề là một trong những lỗ hổng bị cấm theo mặc định.
Dennis

Câu trả lời:


6

M , 9 byte

RÆN²‘İḤCP

Hãy thử trực tuyến!

Câu đố

Gặp m!

M là một nhánh của Jelly, nhằm vào các thách thức toán học. Sự khác biệt cốt lõi giữa Jelly và M là M sử dụng độ chính xác vô hạn cho tất cả các tính toán bên trong, thể hiện kết quả một cách tượng trưng. Một khi M trưởng thành hơn, Jelly sẽ dần trở nên đa mục đích hơn và ít định hướng toán học hơn.

M là rất nhiều công việc đang tiến (đầy đủ các lỗi, và không thực sự khác biệt so với Jelly ngay bây giờ), nhưng nó hoạt động như một nét duyên dáng cho thách thức này và tôi chỉ không thể cưỡng lại.

Làm thế nào nó hoạt động

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.

ÆNtoán tử cụ thể M duy nhất? Ngoài ra Melly
CalculatorFeline

Không có toán tử nào trong số này là đặc trưng cho M. Sự khác biệt là M tính toán một phân số, trong khi Jelly tính toán một số dấu phẩy động.
Dennis

9

Toán học, 32 byte

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

Hàm không tên nhận đầu vào số nguyên và trả về phân số thực.

Điều này sử dụng thực tế rằng . Mã này sau đó được đánh gôn nhờ thực tế là Mathicala xử lý tất cả các số học cơ bản trên các danh sách. Vì vậy, trước tiên chúng ta tạo một danh sách , sau đó lấy tất cả các số nguyên tố đó và cắm danh sách đó vào biểu thức trên. Điều này cho chúng tôi một danh sách tất cả các yếu tố. Cuối cùng, chúng tôi nhân mọi thứ lại với nhau bằng cách áp dụng vào danh sách, có thể được chơi gôn .(p2-1)/(p2+1) = 1-2/(p2+1){1, 2, ..., n}Times1##&

Ngoài ra, chúng ta có thể sử dụng Arraycho cùng một số byte:

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

1-2= 1, phải không?
Máy

@CatsAreFluffy Yeah ( -1thực sự), nhưng 1-2/x ≠ -1/x. ;)
Martin Ender

@Range@±~Array~
Máy

6

Python 2, 106 byte

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

Các dòng đầu tiên và thứ tư làm tổn thương rất nhiều ... hóa ra việc sử dụng Fractiontốt hơn là nhân riêng và sử dụng gcd, ngay cả trong Python 3.5+ nơi gcdcư trú math.

Thế hệ chính được điều chỉnh từ câu trả lời của @ xnor tại đây , sử dụng định lý Wilson.


5

Ruby, 122 77 65 byte

Cảm ơn Sherlock đã cạo sạch 10 byte.

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

Xác định hàm ẩn danh lấy một số và trả về a Rational.


4

PARI / GP , 33 byte

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

Phiên bản thay thế (46 byte):

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

Phiên bản không cạnh tranh cho t_REALkết quả dấu phẩy động ( ) (38 byte):

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

4

Thạch , 14 13 byte

RÆN²µ’ż‘Pµ÷g/

Hãy thử trực tuyến! Cảm ơn @Dennis cho -1 byte.

R                       Range [1..n]
 ÆN                     Nth prime
   ²                    Square
    µ                   Start new monadic chain
     ’ż‘                Turn each p^2 into [p^2-1, p^2+1]
        P               Product
         µ              Start new monadic chain
          ÷             Divide by...
           g/           Reduce GCD

4

Bình thường 26 25

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

Dùng thử tại đây hoặc chạy Test Suite .

Lưu 1 byte nhờ Jakube!

Thực hiện khá ngây thơ của các thông số kỹ thuật. Sử dụng "mới" (tôi không biết khi nào nó được thêm vào, nhưng tôi chưa bao giờ thấy nó trước đây) P<neg>sẽ trả về giá trị dương của số âm có phải là số nguyên tố hay không. Một số bản đồ, vv có thể có thể được chơi gôn ...


3

Julia, 59 42 byte

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

Đây là một hàm ẩn danh chấp nhận một số nguyên và trả về a Rationalvới BigInttử số và mẫu số.

Chúng tôi bắt đầu bằng cách tạo danh sách các số nguyên tố nhỏ hơn 2 n 2 và chọn n phần tử đầu tiên . Điều này hoạt động vì số nguyên tố thứ n luôn nhỏ hơn n 2 cho tất cả n > 1. ( Xem tại đây .)

Đối với mỗi p của n số nguyên tố được chọn, chúng ta bình phương p sử dụng công suất phần tử ( .^2) và xây dựng tỷ lệ 2 / ( p + 1) hợp lý, trong đó 2 lần đầu tiên được chuyển đổi thành a BigIntđể đảm bảo đủ độ chính xác. Chúng tôi trừ đi điều này từ 1, lấy sản phẩm của mảng hợp lý kết quả và trả về kết quả hợp lý.

Ví dụ sử dụng:

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

julia> f(15)
4506715396450638759507001344//11179755611058498955501765625

Đã lưu 17 nhờ Sp3000!


2

Lồi, 28 byte

Convex là một ngôn ngữ mới mà tôi đang phát triển dựa nhiều vào CJam và Golfscript. Trình thông dịch và IDE có thể được tìm thấy ở đây . Đầu vào là một số nguyên vào các đối số dòng lệnh. Các chỉ mục là một dựa trên. Sử dụng mã hóa CP-1252.

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

Bạn có thể hoặc không thể coi câu trả lời này là cạnh tranh vì tôi đang làm việc với một vài tính năng mà chương trình này sử dụng trước khi thử thách được đăng, nhưng cam kết đã được thực hiện khi tôi thấy thử thách này bị loại bỏ.


2

MATL , 18 byte

:Yq2^tqpwQpZd1Mhw/

Hãy thử trực tuyến!

Thất bại cho đầu vào lớn vì chỉ có số nguyên tối đa 2^52có thể được trình bày chính xác trong nội bộ.

Giải trình

:     % 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

Toán học, 45 byte

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

Số nguyên tố? Phân số? Toán học.


1

Haskell, 53 byte

Hàm ẩn danh, 53 ký tự:

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

Hãy thử tại đây (lưu ý: trong GHCi tiêu chuẩn, trước tiên bạn cần đảm bảo Data.RatioData.Listđược nhập):

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

Lập chỉ mục danh sách của Haskell !!là dựa trên 0. (___!!)là một phần toán tử , tạo thành một hàm ẩn danh sao cho (xs !!) n == xs !! n.

Đó là bốn byte ít hơn để tạo ra toàn bộ chuỗi:

λ 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

Nghiêm túc, 25 byte

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

Đầu ra a\nb ( \nlà một dòng mới). Đầu vào lớn sẽ mất nhiều thời gian (và có thể thất bại do hết bộ nhớ) vì thế hệ nguyên tố khá chậm.

Hãy thử trực tuyến!

Giải trình:

,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

Tiêu đề trông vui nhộn. Tôi đọc nó là "Nghiêm túc, 25 byte ?!"
cdt

@AlexKChen Đã gần 2 năm kể từ khi tôi tạo ngôn ngữ và nó mới được đền đáp :)
Mego
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.