ช่วงเติมแต่งในช่วงแรก ๆ


16

คำนิยามของสารเติมแต่งเฉพาะ:

  • ตัวเลขที่มีตรง 2 ตัวหารจะเรียกว่านายกรัฐมนตรีตัวเลข

  • ตัวเลขที่เป็นจำนวนเฉพาะและผลรวมของตัวเลขก็คือจำนวนเฉพาะเรียกว่าส่วนเติมเต็ม


งาน:

กำหนดจำนวนเต็มxคำนวณจำนวนเฉพาะทั้งหมดในจำนวนเฉพาะจำนวนแรกxโดย2พิจารณาทั้งจำนวนเฉพาะจำนวนแรกและจำนวนเฉพาะ ตัวเลขแสดงในฐาน 10

กฎ:

  • เอาท์พุทประกอบด้วยทั้งหมดเฉพาะสารเติมแต่งในหมู่คนแรกที่xเฉพาะ
  • 0 < x < 151สำหรับความท้าทายนี้เพื่อวัตถุประสงค์ในการใช้งาน
  • เนื่องจากช่วงการบวกเป็นจำนวนเต็มทั้งหมดจึงไม่อนุญาตให้ใช้ทศนิยม (เช่น: คุณควรส่งออก2ไม่ใช่2.0) และจะต้องไม่แสดงเป็นเศษส่วน

ตัวอย่าง:

10 -> 2 3 5 7 11 23 29

คำอธิบาย:

10 ช่วงแรกคือ2 3 5 7 11 13 17 19 23 29และ2 3 5 7 11 23 29มีผลรวมของตัวเลขเฉพาะจำนวนหลักเท่านั้น, ค่าเหล่านั้น, ตามลำดับ2,3,5,7,2,5,11, ดังนั้นจึงเป็นค่าบวก

ตามคำอธิบายจากexample 1กรณีทดสอบอื่น ๆ อาจเป็น:

2 -> 2 3

25 -> 2 3 5 7 11 23 29 41 43 47 61 67 83 89

7 -> 2 3 5 7 11

ลีดเดอร์บอร์ด:


หมายเหตุ:โปรดอ่านกฎที่แก้ไขใหม่ 1 ซึ่งจะนำการเปลี่ยนแปลงรูปแบบผลลัพธ์เล็กน้อย


รหัสของคุณควรสั้นที่สุดเนื่องจากเป็นดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์จะชนะ โชคดี!


ไม่เป็นไร. แม้ว่าฉันจะแนะนำให้รอประมาณ 24 ชั่วโมงเพราะทุกครั้งที่คุณยอมรับคำตอบพวกเขาจะได้รับ 15 ตัวแทน แต่พวกเขาจะสูญเสียเมื่อคุณไม่ตอบรับ มันค่อนข้างน่าผิดหวังในบางครั้งที่จะนั่งรถไฟเหาะและเสียเวลาและรับตัวแทนอย่างต่อเนื่อง
Rɪᴋᴇʀ

คำตอบ:


8

Pyke, 9 7 ไบต์

~p>#Yss

ลองออนไลน์!

ไบต์เดียวis_primeถูกผลักเพียง 3 ชั่วโมงที่ผ่านมา Github กระทำ

~p      -    All the prime numbers
  >     -   first input of them
   #Yss -  filter(^)
    Y   -     digits(^)
     s  -    sum(^)
      s -   is_prime(^)

3
คุณเพิ่งแก้ไขภาษาของคุณให้เหมาะกับความท้าทายนี้หรือไม่? : D
Džuris

ดังนั้น ... sหมายความว่า is_prime กับตัวเลขและรวมอยู่ในรายการ?
Conor O'Brien

@ ConorO'Brien ใช่ฉันทำรายการและจำนวนเต็มมากเกินไป
Blue

@ ไม่ทราบ, ฉันตั้งใจมาสักพักแล้วเพราะฉันยังไม่มีโหนดเดียวสำหรับทำการตรวจสอบเฉพาะ, แยกตัวประกอบเป็นเฉพาะและตัวแบ่งเท่านั้น ก่อนที่ฉันจะต้องทำ_Pซึ่งมีความยาว 1 ไบต์ในกรณีนี้
Blue

1
คู่แข่งรายใหม่สำหรับ "คุณลักษณะภาษาที่อายุน้อยที่สุดที่จะชนะการท้าทาย"? ใต้ลวดโดย ~ 2 ชั่วโมง
Sparr

8

Python 2, 124 118 ไบต์

ด้วยความช่วยเหลือจาก Riker:

n,f,P=input(),filter,lambda n:all(n%i for i in range(2,n))
f(lambda x:P(sum(map(int,`x`)))&P(x),f(P,range(2,n*n))[:n])

เดิม:

n,o,c,P=input(),0,2,lambda n:all(n%i for i in range(2,n))
while o<n:
 o+=P(c)
 if P(sum(map(int,`c`)))and P(c):print c
 c+=1

การตรวจสอบเบื้องต้นใน Python ไม่สนุก


ฉัน (อ่าน: ให้ conor เขียนโค้ดเจ๋ง ๆ ให้ฉัน) ทดสอบกับ 9n แล้วไม่ทำงาน : / n ** 2 ใช้งานได้ แต่มีค่า 1 ไบต์
Rɪᴋᴇʀ

ลองn*nสำหรับn**2
Conor โอไบรอัน

8

โรดา , 136 135 ไบต์

f n{P=[2]S=[2]seq 3,863|{|i|{P|{P+=i;s=0;((""..i)/"")|parseInteger _|s+=_;S+=i if[s in P and not(i in S)]}if{|p|[i%p>0]}_}if[#P<n]}_;S}

ลองออนไลน์!

มันเป็นฟังก์ชั่นที่คืนค่าช่วงเติมที่ร้องขอ

การใช้งาน: main { f(25) | print ap for ap }รายงานการใช้รหัสเวอร์ชัน 0.12 roda-0.12ซึ่งอยู่ในสาขา

Ungolfed:

function f(n) {
    primes := [2]
    ultraprimes := [2]
    seq(3, 863) | for i do
        break if [ #primes = n ]
        if [ i%p != 0 ] for p in primes do
            primes += i
            sum := 0
            ((""..i)/"") | parseInteger _ | sum += digit for digit
            ultraprimes += i if [ sum in primes and not (i in ultraprimes) ]
        done
    done
    ultraprimes
}

1
ภาษาดี! คุณทำมันเองเมื่อนานมาแล้วดูเหมือนว่า? 10/10 ดูดีสวย
Rɪᴋᴇʀ

ภาษาเรียบร้อย! คุณรันโปรแกรมอย่างไร
Kritixi Lithos

กำลังจะถามสิ่งเดียวกัน แม้ว่าฉันจะดูเอกสารฉันไม่สามารถเรียกใช้หรือรวบรวมแหล่งที่มาได้ทั้งหมด แนวทางของคุณคืออะไร
Mr. Xcoder

@KritixiLithos @ Xcoder123 ต้องใช้ Java 8 และ Gradle รุ่นที่ฉันใช้ในคำตอบนี้คือ 0.12 (ในสาขาของตัวเอง) พื้นที่เก็บข้อมูลต้องถูกโคลนซ้ำ ที่จะทำให้ขวด Runnable gradle fatJarขอร้อง คุณได้รับข้อผิดพลาดเมื่อรวบรวม?
fergusq

@fergusq Running gradle fatJarดูเหมือนจะไม่สร้างขวดให้ฉัน
Kritixi Lithos

5

Perl 6 , 53 ไบต์

{grep *.comb.sum.is-prime,grep(*.is-prime,0..*)[^$_]}

ลองมัน

ขยาย:

{
  grep
    *.comb.sum.is-prime, # find the ultra primes from:
    grep(
      *.is-prime,        # find the primes
      0..*               # from all integers
    )[ ^$_ ]             # grab only the first x primes
}

หากความท้าทายนี้เปลี่ยนไปเพื่อให้คุณได้รับช่วงเวลาพิเศษxแรกสิ่งนี้อาจสั้นลงได้

{grep({($_&.comb.sum).is-prime},0..*)[^$_]}

5

Python 2 , 96 87 ไบต์

p=-input(),0;m=k=1
while sum(p):
 m*=k*k;k+=1;p+=m%k,
 if m%k*p[int(`k`,36)%35]:print k

ขอบคุณ @xnor สำหรับการเล่นกอล์ฟ 9 ไบต์!

ลองออนไลน์!


ดูเหมือนว่าการใช้รายการตัวแปรตัวบ่งชี้จะสั้นกว่า
xnor

int(`k`,36)%35ผลรวมหลักสามารถทำได้ที่สั้นกว่าที่เป็นอยู่ อินพุตทั้งหมดจะเล็กพอที่จะทำให้พอเพียงนี้
xnor


ว้าว! ผมไม่แน่ใจว่าวิธีการที่ฉันคิดว่าของ Dict บูลีน แต่ไม่ tuple บูลีน (ย้อนหลังคือ 20/20) แต่sum(p)และint(`k`,36)%35มีบางสิ่งบางอย่างอื่น ... ขอบคุณ!
Dennis

5

Mathematica, 61 47 ไบต์

Prime@Range@#~Select~PrimeQ@*Tr@*IntegerDigits&

ไม่คุ้นเคยกับไวยากรณ์จดชวเลขของ Mathematica - นั่น@*คืออะไร *ดูไม่เหมือนมันอยู่ในสถานที่ที่เหมาะสมที่จะคูณ?
numbermaniac

3
@numbermaniac it's function composition. f@*g is essentially f@g@##&.
Martin Ender

4

Jelly, 10 bytes

ÆNDS$€ĖÆPM

Try it online!

How?

A slightly different approach...

ÆNDS$€ĖÆPM - Main link: n (>0)           e.g. 10
ÆN         - nth prime number                 29
     €     - for each in range(1,nth prime)   [1,    2,    3,   ..., 27,    28,     29]
    $      - last two links as a monad
  D        -     decimal digit list          [[1],  [2],  [3],  ...,[2,7], [2,8],  [2,9]]
   S       -     sum                          [1,    2,    3,   ..., 9,     10,     11]
      Ė    - enumerate                       [[1,1],[2,2],[3,3],...,[9,27],[10,28],[11,29]]
       ÆP  - is prime? (vectorises)          [[0,0],[1,1],[1,1],...,[0,1], [0,0],  [1,1]]
         M - indices of maximal elements     [       2,    3,   ...,                29]

3
Nice use of Ė.
Dennis



2

MATL, 15 13 bytes

2 bytes saved thanks to @Luis

:Yq"@V!UsZp?@

Try it at MATL Online

Explanation

        % Implicitly grab input as a number (N)
:       % Create an array [1...N]
Yq      % Get the k-th prime for each element k in that array
"       % For each element in this list
  @     % Get the current element
  V!U   % Break it into digits
  s     % Sum up the digits
  Zp    % Determine if this is a prime number
  ?@    % If it is, push the value to the stack
        % Implicit end of for loop and implicit display of the stack

@LuisMendo Ah! I knew there was some way to shorten that first part. Thanks
Suever


1

Ohm, 10 bytes (CP437)

@▓_π;░_}Σp

This would be much shorter if I had vectorization or a component for the first N primes, but alas, I did not before this challenge (but I do now!).

Explanation:

@▓_π;░_}Σp    Main wire, arguments: a

@▓  ;         Map...over the range (1..n)
  _π            nth prime
     ░        Select from ToS where...
      _}Σ       The sum of all digits
         p      is prime

1

PowerShell, 120 bytes

for($n=$args[0];$n){for(;'1'*++$i-notmatch($s='^(?!(..+)\1+$)..')){}if('1'*([char[]]"$i"-join'+'|iex)-match$s){$i};$n--}

Try it online!

Prime checking in PowerShell sucks.

The outer for loop goes from input $n down to 0. In the inner loop, we use a prime generator on $i, then check if the digit-sum (-join'+'|iex) is also a prime. If so, we put $i on the pipeline. In either case, we decrement $n-- and the outer for loop continues. The resulting $is are gathered from the pipeline and an implicit Write-Output happens at program completion.



0

MATL, 13 bytes

:YqtFYA!XsZp)

Try it at MATL Online!

Explanation

:      % Range [1 2 ... n], where n is implicit input
Yq     % Array of first n prime numbers
t      % Duplicate
FYA    % Convert to decimal digits. Gives a matrix, where each original 
       % number corresponds to a row. Left-pads with zeros if needed
!Xs    % Sum of rows
Zp     % Is prime? (element-wise)
)      % Use as logical index into the array of the first n prime numbers
       % Implicitly display
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.