จำนวนเฉพาะเป็นจำนวนมาก


11

ให้เป็นจำนวนมาก (ในฐาน 10) เช่น 1234567891011121314151617 ให้หา "subnumbers" ที่สำคัญในนั้น
Prime "หมายเลขย่อย" คือลำดับของตัวเลขที่ต่อเนื่องกัน (นำมาจากอินพุต) ซึ่งแสดงถึงจำนวนเฉพาะ (ในฐาน 10)

  • อินพุต : ตัวเลข (ทั้งสตริงไฟล์หรืออะไรก็ได้ที่คุณต้องการ)
  • เอาท์พุท : หมายเลขย่อยหลักทั้งหมดแยกออกจากกัน (ในรายการไฟล์สตริงที่คั่นด้วยเครื่องหมายจุลภาค ... ) หากผลลัพธ์ว่างเปล่าคุณสามารถใช้การประชุมที่คุณชอบ (สตริงฮาร์ดโค้ดสตริงว่างเปล่าซึ่งพูดพล่อยๆ แต่โปรแกรมไม่ควร ชน
  • ตัวอย่าง
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. เอาต์พุตที่ว่างเปล่า]

นี่คือรหัสกอล์ฟ โปรแกรมที่สั้นที่สุดชนะ!
[แก้ไข]: กฎเพิ่มเติมต้องอธิบายโปรแกรม! ไม่ใช่ทุกคนที่สามารถใช้ภาษาเยลลี่ได้อย่างคล่องแคล่ว :)


3
ยินดีต้อนรับสู่ PPCG!
Luis felipe De jesus Munoz

ที่เกี่ยวข้องอย่างมาก
user202729

1
ไม่ได้ระบุ ทำในสิ่งที่คุณชอบ
Regis Portalez

1
เคล็ดลับ: เร็วเกินไปที่จะรับคำตอบ มันสามารถกีดกันผู้อื่นจากการโพสต์โซลูชั่น
Shaggy

2
@ RegisPortalez ยินดีต้อนรับและความท้าทายที่ดี! ฉันพบว่าฟีเจอร์ "ยอมรับ" ไม่ได้ใช้ทุกอย่างบน PPCG อย่างที่เป็นอยู่ในเว็บไซต์อื่น ๆ ในเครือข่าย เรามักจะเห็นคุณค่าคำตอบที่ดีในภาษาใด ๆ
ngm

คำตอบ:


6

05AB1E (ดั้งเดิม) 3 ไบต์

Œʒp

ลองออนไลน์!

สตริงย่อยของอินพุตที่มีความสำคัญ


นั่นจะยากที่จะทำให้สั้นลง :)
Regis Portalez

ภาษาที่เหมาะสมสำหรับภารกิจนี้
Jonathan Allan

5
@mob นั่นขึ้นอยู่กับการเข้ารหัส ในการเข้ารหัส 05AB1Eคำตอบนี้มีความยาว 3 ไบต์
เดนนิส

2
ตามนี้ 34567 = 13 * 2659 เป็นนายกดูเหมือนว่าผิด: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh จริงๆแล้วมันเป็นข้อผิดพลาดของฟังก์ชั่น p (prime) ในรุ่น 05AB1E ใหม่: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA ที่เก็บข้อมูลแล้ว แต่ยังไม่ได้ถูกผลักบน TIO ฉันได้เปลี่ยนคำตอบเป็นเวอร์ชันดั้งเดิมในระหว่างนี้
Kaldo

6

Perl 6 , 28 ไบต์

{grep &is-prime,+«m:ex/.+/}

ลองออนไลน์!

การ:exตั้งค่าสถานะ ("ครบถ้วนสมบูรณ์") ไปยังตัวดำเนินการจับคู่mทำให้มันกลับมาทุกการแข่งขันที่เป็นไปได้ของ.+(เช่นสตริงย่อยของอักขระหนึ่งตัวหรือมากกว่า) แม้กระทั่งทับซ้อนกัน hyperoperator เปลี่ยนรายชื่อของMatchวัตถุที่เป็นตัวเลขซึ่งจะถูกกรองแล้วสำหรับ primeness grep &is-primeโดย


ที่นี่ฉันจะไปกับ{+«m:ex/(.+)<?{$0.is-prime}>/}
แบรดกิลเบิร์ต b2gills

@ BradGilbertb2gills ฉันก็ลองเช่นกัน! ฉันผิดหวังเล็กน้อยที่มันนานกว่านั้น
ฌอน

ขอบคุณสำหรับการอธิบาย - มีประโยชน์เสมอกับไดโนเสาร์ Perl4 เช่นฉัน!
Toby Speight


5

Python 2 , 66 65 ไบต์

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

ลองออนไลน์!


ควรจะเป็นwhile k<=nหรือเป็นค่าใช้จ่าย 0 ไบต์while~n+k
โจนาธานอัลลัน

@JanathanAllan ขอบคุณ ตอนแรกฉันคิดว่าควรแยกตัวเลขออกจากผลลัพธ์ แต่ดูเหมือนว่าจะไม่เป็นเช่นนั้น
ovs

@JonathanAllan คุณช่วยอธิบายรหัสจากwhileคำสั่งได้ไหม? ฉันไม่เคยเห็นรหัสประเภทนี้มาก่อน ยังไม่เคยเห็นการใช้ประโยชน์จาก``ทำอะไร?
tarit goswami

1
@taritgoswami while stmt:จะทำงานตราบใดที่stmtมีค่าที่ถือว่าเป็นความจริงโดยหลาม จำนวนเต็มเท่านั้น falsy 0ในหลามเป็น ~n+k != 0ดังนั้นรหัสจะใช้เป็น ~เป็นผู้ประกอบการระดับบิตสมบูรณ์และเทียบเท่ากับ~n <=> <=> ขณะที่เรากำลังที่เพิ่มขึ้นโดยในการดำเนินงานทุกในกรณีนี้เพื่อเทียบเท่า -n - 1~n + k != 0-n - 1 + k != 0k != n + 1k1k != n + 1k <= n
ovs

1
@taritgoswami และ`n`เหมือนกับrepr(n)ใน Python 2 (ไม่ทำงานใน Python 3)
ovs


3

เยลลี่ ,  5  4 ไบต์

-1 ต้องขอบคุณ Kevin Cruijssen ( เป็นนามแฝงÆP)

ẆḌẒƇ

Monadic Link ยอมรับรายการตัวเลข * ซึ่งให้รายการของจำนวนเต็มเฉพาะ

* ไปตาม "ทั้งสตริงไฟล์หรืออะไรก็ได้ที่คุณชอบ" - ใช้จำนวนเต็มนำหน้ารหัสด้วย D

ลองออนไลน์!

อย่างไร?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPสามารถถ้าฉันไม่เข้าใจผิด?
Kevin Cruijssen

อาใช่นั่นคือนามแฝงใหม่ - ขอบคุณ!
Jonathan Allan

2

Java 8, 148 147 ไบต์

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

ลองออนไลน์

คำอธิบาย:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT


2

Bash + GNU Core Utils: 80 77 ไบต์

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

นี่ไม่ใช่สั้นที่สุด แต่ฉันมีปัญหาในการหาอะไรดีกว่านี้ ต้องการความช่วยเหลือ!

โดยติดกับ POSIX เท่านั้นฉันได้ 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Bash การแบ่งสตริงช่วยได้หรือไม่ มันเป็นช่วงรั้งความอัปยศที่จะถูกขยายก่อนพารามิเตอร์ ...
Toby Speight

@TobySpeight ที่จะต้องมีสองลูป (หนึ่งสำหรับการเริ่มต้นหนึ่งสำหรับท้าย) ไม่พูดถึงว่าคุณไม่สามารถใช้ตัวแปรภายในของการทดแทนการแบ่งส่วน Zsh อนุญาต! เส้นทางหลักสู่ความห้วนในใจของฉันคือการใช้ Awk เพื่อสร้างสารตั้งต้นทั้งหมด
markasoftware





0

Pyth, 8 ไบต์

fP_TsM.:

ชุดทดสอบ

รับอินพุตเป็นสตริงเอาต์พุตรายการจำนวนเต็ม ยังสามารถรับอินพุตเป็นint โดยการเพิ่ม`ที่ส่วนท้ายสำหรับไบต์พิเศษ

คำอธิบาย:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

และ`เพียงแค่แปลงไปintstr


0

ภาษา Wolfram (Mathematica)ขนาด 40 ไบต์

Select[PrimeQ@*FromDigits]@*Subsequences

ลองออนไลน์!

อินพุตและเอาต์พุตเป็นรายการของตัวเลข ในกรณีที่ไม่มีหมายเลขย่อยเฉพาะรายการที่ว่าง{}จะถูกส่งกลับ

ใช้@*สำหรับCompositionฟังก์ชั่น Subsequencesจะช่วยให้รายการ subsequences ทั้งหมดของการป้อนข้อมูลและSelect[PrimeQ@*FromDigits]เป็นรูปแบบที่ผู้ประกอบการSelectที่ส่งกลับรายการขององค์ประกอบทั้งหมดที่มีการผลตอบแทนPrimeQ@*FromDigitsTrue


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