เฉพาะช่วงเวลามากมาย


26

ตั้งแต่ยูคลิดเรารู้ว่ามีช่วงเวลามากมาย อาร์กิวเมนต์เป็นความขัดแย้งโดย: ถ้ามีเพียงขอบเขตหลายสมมติว่าp1,p2,...,pnแล้วแน่นอนm:=p1p2...pn+1ไม่หารด้วยใด ๆ ของช่วงเวลาเหล่านี้ดังนั้นตัวประกอบที่สำคัญที่จะต้องให้ผลผลิตที่สำคัญใหม่ที่ไม่ได้อยู่ในรายการ ดังนั้นการสันนิษฐานว่ามีเฉพาะช่วงเวลาที่ จำกัด เท่านั้นจึงเป็นเท็จ

ทีนี้สมมติว่า2เป็นเพียงนายกเท่านั้น วิธีการจากด้านบนให้ผลตอบแทน2+1=3ในรูปแบบไพรม์ใหม่ (เป็นไปได้) ใช้วิธีถัวเฉลี่ยอีกครั้ง23+1=7แล้ว237+1=43แล้ว23743+1=13139เพื่อให้ทั้ง13และ139เป็นช่วงเวลาใหม่ ฯลฯ ในกรณีที่เราได้รับหมายเลขคอมโพสิตเราก็จะเลือกนายกคนใหม่อย่างน้อยที่สุด ผลนี้ในA000945

ท้าทาย

รับค่าเฉพาะp1และจำนวนเต็มnคำนวณคำn -th pnของลำดับที่กำหนดไว้ดังต่อไปนี้:

pn:=min(primefactors(p1p2...pn1+1))

ลำดับเหล่านี้รู้จักกันในชื่อEuclid-Mullin -sequences

ตัวอย่าง

สำหรับp1=2 :

1 2
2 3
3 7
4 43
5 13
6 53
7 5
8 6221671
9 38709183810571

สำหรับp1=5 ( A051308) ):

1 5
2 2
3 11
4 3
5 331
6 19
7 199
8 53
9 21888927391

สำหรับp1=97 ( A051330 )

1 97
2 2
3 3
4 11
5 19
6 7
7 461
8 719
9 5

คำตอบ:


10

JavaScript (ES6),  45  44 ไบต์

รับอินพุตเป็น(n)(p1)โดยที่nถูกทำดัชนี 0

n=>g=(p,d=2)=>n?~p%d?g(p,d+1):--n?g(p*d):d:p

ลองออนไลน์!

แสดงความคิดเห็น

n =>                // n = 0-based index of the requested term
  g = (             // g is a recursive function taking:
    p,              //   p = current prime product
    d = 2           //   d = current divisor
  ) =>              //
    n ?             // if n is not equal to 0:
      ~p % d ?      //   if d is not a divisor of ~p (i.e. not a divisor of p + 1):
        g(p, d + 1) //     increment d until it is
      :             //   else:
        --n ?       //     decrement n; if it's still not equal to 0:
          g(p * d)  //       do a recursive call with the updated prime product
        :           //     else:
          d         //       stop recursion and return d
    :               // else:
      p             //   don't do any recursion and return p right away

9

05AB1E , 6 ไบต์

สิ่งนี้สร้างและส่งออกกระแสอนันต์

λλP>fW

ลองออนไลน์! (ลิงก์มีเวอร์ชันที่แก้ไขเล็กน้อยλ£λP>fWซึ่งจะแทนคำแรกที่n )

คำอธิบาย

ตรงไปตรงมามาก รับพี1และnโปรแกรมทำสิ่งต่อไปนี้:

  • เริ่มต้นด้วยพี1เป็นพารามิเตอร์เริ่มต้นสำหรับสตรีมไม่สิ้นสุด (ซึ่งถูกสร้างขึ้นโดยใช้ครั้งแรกλ) และเริ่มต้นสภาพแวดล้อมแบบเรียกซ้ำซึ่งสร้างคำศัพท์ใหม่หลังจากการเติมแต่ละครั้งและผนวกเข้ากับสตรีม
  • ประการที่สองλตอนนี้ถูกใช้ในสภาพแวดล้อมแบบเรียกซ้ำเปลี่ยนการทำงาน: ตอนนี้มันจะดึงองค์ประกอบที่สร้างขึ้นก่อนหน้านี้ทั้งหมด (เช่นรายการ[λ0,λ1,λ2,...,λn-1] ) โดยที่nแทน หมายเลขการวนซ้ำปัจจุบัน
  • ส่วนที่เหลือเป็นเรื่องไม่สำคัญ: Pนำผลิตภัณฑ์ ( λ0λ1λ2λn-1 ) >เพิ่มหนึ่งผลิตภัณฑ์นี้และfWดึงปัจจัยสำคัญขั้นต่ำ

6

J , 15 ไบต์

-10 ไบต์ขอบคุณไมล์!

ส่งคืนลำดับสูงสุด n (ดัชนีเป็นศูนย์) - ขอบคุณ@miles

(,0({q:)1+*/)^:

ลองออนไลน์!

J , 25 ไบต์

ส่งคืนnรายการ th

_2{((],0{[:q:1+*/@])^:[])

ลองออนไลน์!


1
(,0({q:)1+*/)^:สำหรับ 15 ไบต์ส่งคืนลำดับจนถึงn(ทำดัชนีเป็นศูนย์)
ไมล์

@miles ขอขอบคุณ!
Galen Ivanov

ดีมาก. @ ฉันเกิดอะไรขึ้นที่นั่นทางไวยากรณ์ เราใส่กริยาและการรวมเข้าด้วยกัน ผมคิดว่าการผลิตคำวิเศษณ์verb conj
โยนาห์

1
@Jonah มันเป็นเคล็ดลับที่ฉันเรียนรู้จากการเล่นกอล์ฟ ฉันคิดว่าเป็นหนึ่งในกฎการแยกวิเคราะห์แบบเก่าที่ยังคงใช้ได้
ไมล์

@miles ฉันเพิ่งรู้ว่ามันเป็นคำวิเศษณ์ (หรือคำนาม) มันปรับเปลี่ยนนามด้านซ้ายซึ่ง "ยึดติด" ที่ด้านขวาของ^:แล้วที่จะกลายเป็นคำกริยาที่ใช้กับหาเรื่องขวา ฉันคิดว่านั่นคือสิ่งที่เกิดขึ้นตามหลักไวยากรณ์
โจนาห์

5

Python 2 , 56 ไบต์

i=input();k=1
while 1:
 k*=i;print i;i=2
 while~k%i:i+=1

ลองออนไลน์!


แสดงความคิดเห็น

i=input() # the initial prime
k=1       # the product of all previous primes
while 1:  # infinite loop
 k*=i     # update the product of primes
 print i  # output the last prime
 i=2      # starting at two ...
 while~k%i: # find the lowest number that divides k+1
  i+=1
            # this our new prime

ลองออนไลน์!


ฉันเพิ่งเริ่มด้วย Python แต่คุณต้องการเป็นint(input())อย่างอื่นไหม istr
แอนโธนี

2
ใน Python 3 สิ่งนี้จะเป็นจริงเช่นเดียวกับinput()ส่งคืนสตริงเสมอ ใน Python 2 input()พยายามประเมินอินพุต ฉันใช้ Python 2 ในกรณีนี้เพราะรหัสผลลัพธ์สั้นลงเล็กน้อย สำหรับรหัสจริงคุณควรลองใช้ Python 3 เพราะเป็น Python รุ่นใหม่และรองรับมากกว่านี้
ovs

สิ่งนี้จะยุติลงหลังจากขั้นตอน n ขั้น?
sintax

@sintax มันจะออกผลลัพธ์ลำดับสำหรับ p1 รับไปเรื่อย ๆ ตามที่ได้รับอนุญาตจากกฎลำดับเริ่มต้น
ovs

4

เยลลี่ขนาด 8 ไบต์

P‘ÆfṂṭµ¡

ยอมรับโปรแกรมแบบเต็ม (ใช้การทำดัชนีเป็นศูนย์) P0 และ n ซึ่งจะพิมพ์ตัวแทน Jelly ของรายการ P0 ไปยัง Pnรวมทั้ง (ในฐานะลิงก์แบบ dyadic n=0เราจะได้รับคืนเป็นจำนวนเต็มไม่ใช่รายการ)

ลองออนไลน์!

อย่างไร?

P‘ÆfṂṭµ¡ - Link: integer, p0; integer n
      µ¡ - repeat the monadic chain to the left n times, starting with x=p0:
P        -   product of x (p0->p0 or [p0,...,pm]->pm*...*p0)
 ‘       -   increment
  Æf     -   prime factors
    Ṃ    -   minimum
     ṭ   -   tack
         - implicit print

3

05AB1E , 8 ไบต์

GDˆ¯P>fß

อินพุตแรกคือ nที่สองคือนายก พี.

ลองใช้แบบออนไลน์หรือแบบทดสอบอื่น ๆ อีกมาก (ชุดการทดสอบไม่มีกรณีทดสอบสำหรับn9เพราะสำหรับ พี=2 และ พี=5builtin fใช้เวลานานเกินไป)

คำอธิบาย:

G         # Loop (implicit input) n-1 amount of times:
 Dˆ       #  Add a copy of the number at the top of the stack to the global array
          #  (which will take the second input p implicitly the first iteration)
   ¯      #  Push the entire global array
    P     #  Take the product of this list
     >    #  Increase it by 1
      f   #  Get the prime factors of this number (without counting duplicates)
       ß  #  Pop and only leave the smallest prime factor
          # (after the loop: implicitly output the top of the stack as result)

ฉันมีλλP>fW(6 ไบต์) โดยเอาท์พุทเป็นรายการที่ไม่มีที่สิ้นสุดและλ£λP>fW(7 ไบต์) สำหรับครั้งแรกnเงื่อนไข อย่างไรก็ตามการได้รับnTHควรเป็น 9 ไบต์ ... ถ้าเพียง แต่เรามีธงที่ชอบ£แต่สำหรับองค์ประกอบสุดท้าย!
Mr. Xcoder

@ Mr.Xcoder " ถ้าเพียง แต่เรามีธงที่ชอบ£แต่สำหรับองค์ประกอบสุดท้าย! " เช่น? ;) แก้ไข: ที่จริงแล้วมันไม่ได้ผลเหมือน£รายการ ... โดยใช้รายการเช่น[1,2]กับผลลัพธ์ในสองรายการที่หลวมกับ 1 และ 2 รายการสุดท้าย (เช่น12345จะกลายเป็น[5,45]แทน[45,3]หรือ[3,45]ด้วย12S.£) ..
Kevin Cruijssen

อืมฉันไม่เห็นว่าλ.£ควรจะทำงานอย่างไร ฉันใช้การตั้งค่าสถานะเป็นในฟังก์ชันเพิ่มเติมที่เกี่ยวข้องกับλ(ดูการสนทนานี้กับ Adnan ) โดยทั่วไปฉันต้องการแฟล็กบางอย่างèเช่นเมื่อเรียกใช้λè...}มันจะสร้างองค์ประกอบที่ n แทนการสตรีมที่ไม่มีที่สิ้นสุด (เช่นเดียวกับที่λ£ใช้สำหรับการสร้างองค์ประกอบแรกที่ n)
Mr. Xcoder

@ Mr.Xcoder อ่าขอโทษที่คุณใช้£สภาพแวดล้อมแบบเรียกซ้ำ ใช่แล้วλ.£จะไม่ทำงานแน่นอนฉันไม่ดี Nice 6-byter โดยไม่คำนึงถึง ตอนนี้คุณต้องรอการตอบกลับของ@flawrไม่ว่าจะอนุญาตหรือไม่ (อาจเป็น)
Kevin Cruijssen

3

Japt , 12 11 ไบต์

พยายามดิ้นรนเพื่อให้ถูกต้องดังนั้นอาจพลาดบางสิ่งที่สามารถเล่นกอล์ฟได้

ใช้nเป็นอินพุตแรกและp1เป็นอาร์เรย์เดี่ยวเป็นวินาที ส่งคืนnคำศัพท์แรก เปลี่ยนhเป็นgเพื่อคืนค่าnเทอมที่ 0 ที่จัดทำดัชนีแทน

@Z×Ä k Î}hV

ลองมัน

@Z×Ä k Î}hV     :Implicit input of integer U=n & array V=[p1]
@               :Function taking an array as an argument via parameter Z
 Z×             :  Reduce Z by multiplication
   Ä            :  Add 1
     k          :  Prime factors
       Î        :  First element
        }       :End function
         hV     :Run that function, passing V as Z, and
                : push the result to V.
                : Repeat until V is of length U

3

เรติน่า 56 ไบต์

,|$
$*
"$&"{~`.+¶
$$¶_
)`\b(__+?)\1*$
$.1$*
1A`
.$

\*
,

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

,|$
$*

แทนที่เครื่องหมายจุลภาคในแง่ของเมล็ดพันธุ์ที่มีและผนวก* *สิ่งนี้จะสร้างนิพจน์ Retina สำหรับสตริงที่มีความยาวของผลิตภัณฑ์ของค่า

"$&"{
)`

วนซ้ำจำนวนครั้งที่กำหนดโดยอินพุตแรก

~`.+¶
$$¶_

แทนที่หมายเลขในบรรทัดแรกชั่วคราวด้วย$และเติม a_ไปยังบรรทัดที่สองจากนั้นประเมินผลลัพธ์เป็นโปรแกรม Retina ดังนั้นจึงต่อท้ายสตริง_ของความยาว 1 มากกว่าผลิตภัณฑ์ของค่า

\b(__+?)\1*$
$.1$*

ค้นหาปัจจัยที่เล็กที่สุดของตัวเลขเป็นทศนิยมและผนวก a *พร้อมสำหรับลูปถัดไป

1A`

ลบอินพุตการวนซ้ำ

.$

ลบรายการสุดท้าย *ลบสุดท้าย

\*
,

แทนที่*s ที่เหลือด้วย,s


2

JavaScript (Node.js) , 54 ไบต์

f=(p,n,P=p,F=n=>-~P%n?F(n+1):n)=>--n?f(p=F(2),n,P*p):p

ลองออนไลน์!

Ungolfed

F=(p,n=2)=>            // Helper function F for finding the smallest prime factor
  p%n                  //   If n (starting at 2) doesn't divide p:
    ?F(n+1)            //     Test n+1 instead
    :n                 //   Otherwise, return n
f=(p,n,P=p)=>          // Main function f:
  --n                  //   Repeat n - 1 times:
    ?f(p=F(P+1),n,P*p) //     Find the next prime factor and update the product
    :p                 //   Return the last prime


2

Ruby 2.6, 51 ไบต์

f=->s,n{[s,l=(2..).find{|d|~s%d<1}][n]||f[l*s,n-1]}

(2..)ช่วงอนันต์เริ่มจาก 2 ยังไม่รองรับ TIO

นี่คือฟังก์ชันเรียกซ้ำที่ใช้ค่าเริ่มต้นs(อาจเป็นแบบไพรม์หรือคอมโพสิต) ส่งคืนเมื่อ n = 0 (แก้ไข: โปรดทราบว่านี่หมายความว่ามันเป็นศูนย์ดัชนี) ส่งกลับจำนวนน้อยที่สุดlที่มากกว่า 1 และหาร-(s+1)เมื่อ n = 1 s=l*sและทำn=n-1ซ้ำกับและ


1
คุณควรพูดถึงว่าคุณกำลังทำดัชนีเป็นศูนย์ ฉันแทนที่(2..)ด้วย2.step(อีกต่อไปเพียง 1 ไบต์) เพื่อให้มันทำงานบน TIO และทุกอย่างถูกปิดโดยหนึ่ง ลองออนไลน์!
หมึกมูลค่า

2

APL (ขยาย Dyalog) 15 ไบต์

นี่คือการดำเนินงานอย่างเป็นธรรมที่เรียบง่ายของอัลกอริทึมที่ใช้ขยายปัจจัยสำคัญที่เป็นประโยชน์มาก builtin, ลองออนไลน์!

{⍵,⊃⍭1+×/⍵}⍣⎕⊢⎕

คำอธิบาย

{⍵,⊃⍭1+×/⍵}⍣⎕⊢⎕

             ⊢⎕  First get the first prime of the sequence S from input.
{         }⍣⎕    Then we repeat the code another input number of times.
     1+×/⍵       We take the product of S and add 1.
                Get the prime factors of product(S)+1.
                Get the first element, the smallest prime factor of prod(S)+1.
 ⍵,              And append it to S.




1

Perl 6 , 33 32 ไบต์

-1 ไบต์ต้องขอบคุณ nwellnhof

{$_,{1+(2...-+^[*](@_)%%*)}...*}

ลองออนไลน์!

บล็อกโค้ดที่ไม่ระบุชื่อที่รับหมายเลขและส่งคืนรายการที่ไม่ทำงาน

คำอธิบาย:

{                              }  # Anonymous codeblock
                           ...*   # That returns an infinite list
 $_,                              # Starting with the input
    {                     }       # Where each element is
     1+(2...             )          # The first number above 2
                      %%*           # That cleanly divides
               [*](@_)                # The product of all numbers so far
            -+^                       # Plus one

1
-+^[*](@_)บันทึกเป็นไบต์
nwellnhof

0

Haskell , 49 ไบต์

g 1
g a b=b:g(a*b)([c|c<-[2..],1>mod(a*b+1)c]!!0)

ลองออนไลน์!

ส่งคืนลำดับอนันต์เป็นรายการสันหลังยาว

คำอธิบาย:

g 1                                            -- Initialise the product as 1
g a b=                                         -- Given the product and the current number
       b:                                      -- Return the current number, followed by
         g                                     -- Recursively calliong the function with
          (a*b)                                -- The new product
               (                             ) -- And get the next number as
                [c|c<-[2..],             ]!!0  -- The first number above 2
                            1>mod       c      -- That cleanly divides
                                 (a*b+1)       -- The product plus one
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.