สูตรเศษส่วนเฉพาะส่วนที่น่าสงสัย


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หรือไม่?
Adnan

2
@ แอนฉันเดาว่า ... ตรวจสอบให้แน่ใจว่าโปรแกรมของคุณถูกต้องสำหรับอินพุตทั้งหมดและไม่ประสบกับข้อผิดพลาดจุดลอยสำหรับอินพุตขนาดใหญ่
orlp

เราสามารถส่งออกaและbเป็นประเภทที่มีเหตุผล?
Alex A.

2
@AlexA เฉพาะในกรณีที่เอาต์พุตแสดงจำนวนเต็มทั้งสองอย่างชัดเจน
orlp

1
@ SamYonnou ผู้ที่มีอยู่แล้ว แต่การใช้ประเภทของหมายเลขพื้นเมืองเพื่อใช้แก้ปัญหาเล็กน้อยเป็นหนึ่งในช่องโหว่ที่ต้องห้ามตามค่าเริ่มต้น
Dennis

คำตอบ:


6

M , 9 ไบต์

RÆN²‘İḤCP

ลองออนไลน์!

เรื่องไม่สำคัญ

พบกับ M!

M เป็นทางแยกของเจลลี่มุ่งเป้าไปที่ความท้าทายทางคณิตศาสตร์ ความแตกต่างที่สำคัญระหว่างเจลลี่และเอ็มคือ M ใช้ความแม่นยำไม่สิ้นสุดสำหรับการคำนวณภายในทั้งหมดแสดงผลลัพธ์ที่เป็นสัญลักษณ์ เมื่อ M โตขึ้นเรื่อย ๆ เยลลี่จะค่อยๆกลายเป็นอเนกประสงค์มากขึ้นและใช้คณิตศาสตร์น้อยลง

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-ที่เฉพาะเจาะจง ยัง Melly
เครื่องคิดเลข

ไม่มีตัวดำเนินการเหล่านี้เฉพาะกับ M ความแตกต่างคือ M คำนวณเศษส่วนในขณะที่ Jelly จะคำนวณจำนวนจุดลอยตัว
Dennis

9

Mathematica ขนาด 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แต่ ;)
Martin Ender

@Range@±~Array~
CalculatorFeline

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 ขึ้นไปที่อาศัยอยู่ในgcdmath

Prime generation ดัดแปลงมาจากคำตอบของ @ xnor ที่นี่ซึ่งใช้ทฤษฎีบทของ Wilson


5

Ruby, 122 77 65 ไบต์

ขอบคุณ Sherlock สำหรับการโกนที่มีขนาด 10 ไบต์

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

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!

การปฏิบัติตามข้อกำหนดที่ไร้เดียงสา ใช้ "ใหม่" ที่สวยงาม (ฉันไม่รู้ว่าเมื่อสิ่งนี้ถูกเพิ่มเข้ามา แต่ฉันไม่เคยเห็นมาก่อน) P<neg>ซึ่งจะคืนค่าบวกของจำนวนลบเป็นจำนวนเฉพาะหรือไม่ การทำแผนที่บางอย่างและอื่น ๆ อาจถูก golfed ...


3

Julia, 59 42 ไบต์

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

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อที่รับจำนวนเต็มและส่งกลับRationalด้วยBigIntตัวเศษและส่วน

เราเริ่มต้นด้วยการสร้างรายการของหมายเลขสำคัญน้อยกว่า 2 n 2และเลือกแรกnองค์ประกอบ สิ่งนี้ได้ผลเพราะนายกลำดับที่nน้อยกว่าn 2สำหรับทุกn > 1 เสมอ ( ดูที่นี่ )

สำหรับแต่ละpของn primes ที่เลือกไว้เราจะใช้กำลังสองของp ในการคำนวณกำลังสอง ( .^2) และสร้างเหตุผล 2 / ( p + 1) โดยที่ 2 ถูกแปลงเป็น a ก่อนBigIntเพื่อให้แน่ใจว่ามีความแม่นยำเพียงพอ เราลบสิ่งนี้ออกจาก 1 นำผลของอาร์เรย์ rationals ที่เกิดขึ้นมาและคืนค่า rational ที่ได้

ตัวอย่างการใช้งาน:

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

julia> f(15)
4506715396450638759507001344//11179755611058498955501765625

บันทึกแล้ว 17 ขอบคุณ Sp3000!


2

นูน, 28 ไบต์

นูนเป็นภาษาใหม่ที่ฉันกำลังพัฒนาซึ่งขึ้นอยู่กับ 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


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

การจัดทำดัชนีรายการของ Haskell !!นั้นเป็นแบบ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.