Coprimes สูงถึง N


51

กำหนดตัวเลขn >= 2ให้ส่งออกจำนวนเต็มบวกทั้งหมดน้อยกว่าnตำแหน่งgcd(n, k) == 1(โดยkเป็นหนึ่งในหมายเลขเอาต์พุตใด ๆ ) ตัวเลขของการเรียงลำดับนี้เป็นcoprimeซึ่งกันและกัน

ตัวอย่าง: 10ให้ผลลัพธ์[1, 3, 7, 9](ในรูปแบบใดก็ได้ที่คุณต้องการตราบใดที่ตัวเลขนั้นถูกคั่นอย่างไม่น่าสงสัยและในรายการบางประเภท) รายการไม่สามารถมีรายการซ้ำและไม่ต้องเรียงลำดับ

กรณีทดสอบเพิ่มเติม:

2 -> [1]
3 -> [1, 2]
6 -> [1, 5]
10 -> [1, 3, 7, 9]
20 -> [1, 3, 7, 9, 11, 13, 17, 19]
25 -> [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24]
30 -> [1, 7, 11, 13, 17, 19, 23, 29]

นอกจากนี้เรายังไม่นับจำนวนข้างต้นnที่เป็น coprime nเพียงเพราะฉันค่อนข้างมั่นใจว่ามีวิธีการแก้ปัญหาที่ไม่สิ้นสุด

หมายเหตุ: ตัวเลขที่เป็น coprime ซึ่งกันและกันยังถูกกล่าวถึงว่าค่อนข้างดีเยี่ยมหรืออยู่ร่วมกัน


สตริงที่แยกออก (เช่น1\n3\n) นับเป็นเอาต์พุตที่ถูกต้องหรือไม่?
devRicher

@devRicher ที่ใช้งานได้แน่นอน
Rɪᴋᴇʀ

สัญชาตญาณเกี่ยวกับการมีจำนวนอนันต์เหนือ n ที่ coprime ถึง n รู้สึกถูกต้องสำหรับฉัน มีช่วงเวลาที่ไม่ จำกัด จำนวนมากและนายกจะเป็น coprime ที่มีหมายเลขด้านล่างทุกอัน ดังนั้นนายกทุกคนที่มีค่ามากกว่า n (ซึ่งมีจำนวนอนันต์) จึงเป็นส่วนหนึ่งของรายการ coprime
Brian J

@BrianJ ไม่ใช่แค่นั้น หากและnเป็น coprimes, C + knและnนอกจากนี้ยังมี coprimes สำหรับจำนวนเต็มทั้งหมดk
เดนนิส

1
สนุกจริงเหล่านี้เป็นที่เรียกว่าtotatives
Wojowu

คำตอบ:


17

เยลลี่ 3 ไบต์

gÐṂ

ลองออนไลน์!

มันทำงานอย่างไร

gÐṂ - (Monadic) โปรแกรมเต็มรูปแบบ

g - ตัวหารร่วมมากที่ยิ่งใหญ่ที่สุด
 ÐṂ - รักษาองค์ประกอบด้วยค่าลิงค์ขั้นต่ำ (เช่นที่มี GCD == 1)
       โปรดทราบว่าสิ่งนี้จะสร้างช่วง [1, อินพุต] (โดยรวม) โดยอัตโนมัติ

พิสูจน์ความถูกต้อง

เนื่องจากเราต้องการดึง coprimes เท่านั้นค่าต่ำสุดของที่ยิ่งใหญ่ที่สุด-Common-หารรายการมีให้เป็น1สำหรับÐṂเคล็ดลับในการทำงาน เรามาพิสูจน์กันว่า (ในสองวิธีที่ต่างกัน):

  1. ช่วงที่สร้างโดยนัย มี 1และ gcd ( 1 , x ) = 1[1,input]1 * ตัวหารร่วมมากที่สุดมักเป็นจำนวนเต็มบวกอย่างเคร่งครัดดังนั้น 1จึงรับประกันได้ว่าจะเกิดขึ้นและจะเป็นค่าต่ำสุดเสมอgcd(1,x)=1xZ1

  2. จำนวนเต็มบวกสองตัวที่ต่อเนื่องกันเป็น coprime เสมอ พิจารณา , กับy =x,yZ 1 จากนั้นเราก็ใช้เวลาอีกจำนวนเต็มบวก kดังกล่าวว่า k | xและ k | Yy=x+1kkxky

    นี่ก็หมายความว่าดังนั้นk ( x + 1k(yx)จึง k | 1 จำนวนเต็มบวกเท่านั้นที่จะหารคือเองดังนั้นจึงรับประกันได้ว่าจะปรากฏในรายการและจะเป็นค่าต่ำสุดเสมอk(x+1x)k1111


2
คุณเก่งกว่าเดนนิสในภาษาของเขาหลังจากผ่านไป 9 เดือน!
อดัม

@ Adámฉันไม่แน่ใจว่า ÐṂมีตัวตนอยู่ในตอนนั้นหรือไม่ฉันค่อนข้างพอใจกับสิ่งนี้
Mr. Xcoder

2
สำหรับบันทึกDṂนั้นมีอยู่จริง แต่มันใช้ได้เฉพาะกับพระ การมอบหมายการดำเนินการÞ, ÐṂ, ÐṀสำหรับ dyadsลงวันที่ 9 พฤษภาคม 2017
เดนนิส

@Dennis ฉันรู้ว่ามันมีเหตุผลที่ดีว่าทำไมคุณถึงไม่มีรุ่น 3 ไบต์ เราสงสัยเกี่ยวกับเรื่องนั้นในการแชทด้วยดังนั้นขอขอบคุณสำหรับข้อมูลที่เป็นประโยชน์!
Mr. Xcoder

56

Python 2 , 61 47 ไบต์

lambda n:[k/n for k in range(n*n)if k/n*k%n==1]

ลองออนไลน์!

พื้นหลัง

พิจารณาแหวน ) ในขณะที่แหวนวงนี้มักจะถูกกำหนดโดยใช้การเรียนตกค้าง modulo nก็ยังสามารถจะคิดว่าเป็นชุด Z n = { 0 , ... , n - 1 }ที่บวกและการคูณผู้ประกอบการจะถูกกำหนดโดย + n(Zn,+n,n)nZn={0,,n1}และa+nb=(a+b)%n , ที่ + ,anb=ab%nแสดงการบวก, การคูณและโมดูโลตามปกติของจำนวนเต็ม+,, and %

สององค์ประกอบและbของZ nถูกเรียกว่าmultiplicative inverses แบบโมดูโลnถ้าa n b = 1abZnn . สังเกตว่า 1anb=1%nเมื่อใดก็ตามที่ n > 11%n=1n>1

แก้ไขและให้เป็น coprime ของnในZ n ถ้าn>1anZnสำหรับสององค์ประกอบ xและ yของ Z nเรามี a xanx=anyxyZn . นี่ก็หมายความว่า( x - Y )ax%n=ay%nและเราทำตามนั้น n a ( x - y )คือ nหาร a ( x - y )ให้เท่ากัน ตั้งแต่ nหุ้นไม่มี divisors สำคัญกับนี้หมายความว่า n | x - Y สุดท้ายเพราะ - n < x - Y < nเราสรุปได้ว่า x = Y นี่แสดงว่าผลิตภัณฑ์ a aa(xy)%n=ax%nay%n=0na(xy)na(xy)nanxyn<xy<nx=yเป็นองค์ประกอบที่แตกต่างกันทั้งหมดของ Z n ตั้งแต่ Z nมีตรงคือมีที่ไม่ซ้ำกันใน Z nดังกล่าวว่าn B = 1an0,,an(n1)ZnZnองค์ประกอบ nหนึ่งรายการ (และอีกหนึ่งรายการ) ของผลิตภัณฑ์เหล่านั้นจะต้องเท่ากับ 1n1 bZnanb=1

ตรงกันข้ามแก้ไขและให้เป็นองค์ประกอบของZ nที่ไม่ coprime เพื่อn ในกรณีนี้มีความสำคัญต่อดังกล่าวที่หน้า|และพี| n หากn>1aZnnppapnaยอมรับว่าอินเวอร์สการคูณแบบโมดูโล (เรียกมันว่าb ) เราจะได้a n b = 1ซึ่งหมายความว่าa bnbanb=1และดังนั้น ( a b - 1 )ab%n=1ดังนั้น n | - 1 ตั้งแต่หน้า|เราทำตามที่หน้า| ในทางกลับกันตั้งแต่หน้า| nเรายังทำตามที่หน้า| - 1 วิธีนี้ p ( a b ) - ( a b - 1 ) = 1(ab1)%n=ab%n1=0nab1papabpnpab1p(ab)(ab1)=1ซึ่งขัดแย้งกับสมมติฐานที่ว่าเป็นจำนวนเฉพาะp

นี้พิสูจน์ให้เห็นว่างบดังต่อไปนี้จะเทียบเท่าเมื่อ 1n>1

  • และ nเป็น coprimean

  • ยอมรับคูณผกผันโมดูโลnan

  • ยอมรับไม่ซ้ำกันคูณผกผันโมดูโลnan

มันทำงานอย่างไร

สำหรับคู่ของจำนวนเต็มแต่ละและในZ n , จำนวนเต็มk : = n + Bจะไม่ซ้ำกัน; ในความเป็นจริงaและbเป็นความฉลาดทางและส่วนที่เหลือของkหารด้วยnนั่นคือให้kเราสามารถกู้a = k / nและb = kabZnk:=an+babknka=k/n , โดยที่ /หมายถึงการหารจำนวนเต็ม สุดท้ายตั้งแต่n - 1และn - 1 , kเป็นองค์ประกอบของ Z n 2 ; อันที่จริง, k ( n - 1 ) n + ( nb=k%n/an1bn1kZn2 1k(n1)n+(n1)=n21

ตามที่ระบุไว้ข้างต้นถ้าaและเป็น coprime จะมีb ที่ไม่ซ้ำกันเช่นa bnbคือกล่าวคือจะมีค่าเฉพาะ kซึ่ง k / nab%n=1kและ k / n kk/n=aดังนั้นรายการที่สร้างขึ้นจะมีครั้งว่าk/nk%n=(k/n)(k%n)%n=1a

ตรงกันข้ามถ้าและnเป็นไม่ได้an coprime สภาพจะเป็นเท็จสำหรับค่าทั้งหมดของ kซึ่ง a = k / nk/nk%n=1ka=k/nเพื่อให้รายการที่สร้างขึ้นจะไม่ได้มีa

นี่เป็นการพิสูจน์ว่ารายการแลมบ์ดาที่ส่งคืนจะประกอบด้วยcoprimes ทั้งหมดของในZnครั้งว่าZn


26
"GCD เราจะไปไหนเราไม่ต้องการ GCD"
Rɪᴋᴇʀ

1
ว้าว นั่นคือทั้งหมดที่ฉันต้องการเขียน แต่เห็นได้ชัดว่าฉันต้องการ 15 ตัวอักษร ยังว้าว เยี่ยมมาก
Eric Lagergren

24

วุ้น 4 ไบต์

gRỊT

ลองออนไลน์!

มันทำงานอย่างไร

gRỊT  Main link. Argument: n

 R    Range; yield [1, ..., n].
g     Compute the GCD of n and each k in [1, ..., n].
  Ị   Insignificant; return 1 for GCDs less or equal to 1.
   T  Truth; yield the indices of all truthy elements.

33
การเข้ารหัสในภาษานี้ใช้เวลาบางส่วนgRỊT
ETHproductions

1
ฉันจัดการเพื่อ (AB) การใช้ "มูลค่าการเชื่อมโยงขั้นต่ำ" รวดเร็ว ( ÐṂ) เพื่อที่จะได้รับ3 ไบต์
Mr. Xcoder

14

Mathematica ขนาด 25 ไบต์

Range@#~GCD~#~Position~1&

{{1}, {3}, {7}, {9}}รูปแบบการออกแปลกเล็กน้อยซึ่งแต่ละผลเป็นห่อในรายการที่แยกต่างหากเช่น หากไม่เป็นไรฉันมีวิธีแก้ปัญหาสองข้อที่ 30 ไบต์:

Select[Range[x=#],#~GCD~x<2&]&
#&@@@Range@#~GCD~#~Position~1&

Mathematica มีอยู่จริงCoprimeQแต่มันยาวเกินไป


1
อะไรQหมายถึงในCoprimeQ?
Conor O'Brien

2
@ ConorO'Brien "คำถาม" ฉันเดา จบทุกปัญหาการตัดสินใจสร้าง-ins ใน Q เหมือนEvenQ, หรือPrimeQ SubsetQ
Martin Ender

10

2sable , 4 ไบต์

รหัส:

ƒN¿–

คำอธิบาย:

ƒ       # For N in the range [0, input]..
 N¿     #   Compute the GCD of N and the input
   –    #   If 1, print N with a newline

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!


ทำได้ดี (เกือบ) เต้นเดนนิส (ไม่กี่นาทีสาย)
Zacharý

10

Python, 93 82 74 ไบต์

f=lambda a,b:f(b,a%b)if b else a<2
lambda c:[i for i in range(c)if f(i,c)]

fตรวจสอบ coprimes ซ้ำ ๆ และแลมบ์ดาที่สองสร้างพวกเขา ส่งออกรายการ


7

ที่จริงแล้ว 8 ไบต์

;╗R`╜┤`░

ลองออนไลน์!

คำอธิบาย:

;╗R`╜┤`░
  R`  `░  elements of range(1, n+1) where
;╗  ╜     n and the element
     ┤    are coprime

1
ฉันเชื่อว่าคุณสามารถทำได้range(1, n)ถ้าบันทึกได้ไบต์ใด ๆ
ETHproductions

1
@ETHproductions มันไม่ได้ สองตัวเลือกคือR( range(1, n+1)) และr( range(n)) เนื่องจากพวกมันเท่ากันฉันจึงเลือกR (เนื่องจากฉันกดปุ่มแคปล็อคขณะเขียนรหัส)
Mego

ใช่นั่นคือสิ่งที่ฉันคิด ฉันไม่เห็นคำสั่งที่ดูเหมือนจะเพิ่มขึ้น แต่ฉันคิดว่าอาจมีอยู่แล้ว
ETHproductions



6

JavaScript (ES6), 64 61 ไบต์

บันทึกแล้ว 3 ไบต์ด้วย @ user81655

n=>[...Array(n).keys()].filter(b=>(g=a=>b?g(b,b=a%b):a<2)(n))

ตัวอย่างการทดสอบ

f=n=>[...Array(n).keys()].filter(b=>(g=a=>b?g(b,b=a%b):a<2)(n))

for(var i = 2; i < 50; i++) console.log(i + ":", `[${ f(i) }]`);


คุณไม่สามารถสลับa==กับa<2?
Rɪᴋᴇʀ

@EasterlyIrk ไม่แน่ใจaอาจเป็น 0 ในบางจุด ฉันจะต้องตรวจสอบ
ETHproductions

คุณสามารถย้ายฟังก์ชั่น GCD ลงในfilterเพื่อลบความต้องการที่จะรับbพารามิเตอร์:...keys()].filter(b=>(g=a=>b?g(b,b=a%b):a<2)(n))
user81655

@ user81655 เยี่ยมมากขอบคุณ! :-)
ETHproductions

6

แมงกะพรุนขนาด19 18 ไบต์

p
[#
`B
&~xr1
NnEi

สิ่งนี้ทำงานโดยการคำนวณการแยกตัวประกอบเฉพาะของทุกหมายเลขในช่วงและตรวจสอบว่ามันตัดกับอินพุต (แมงกะพรุนยังไม่มี gcd บิวท์อิน) สำหรับเหตุผลในการตีกอล์ฟผลลัพธ์จะเรียงตามลำดับจากมากไปน้อย ลองออนไลน์!

คำอธิบาย

ก่อนปิดiได้รับการประเมินอินพุต; สำหรับการป้อนข้อมูล10, ค่าของi-cell 10คือ

r1
i

ที่นี่r(ช่วง) ถูกใช้กับอินพุตและ 1 เนื่องจากอินพุตมีค่ามากกว่า 1 ช่วงจึงอยู่ในลำดับจากมากไปหาน้อย สำหรับการป้อนข้อมูลนี้จะช่วยให้10[9 8 7 6 5 4 3 2 1]

[#
`B
&~x
Nn

ส่วนนี้เป็นฟังก์ชั่นใหญ่ที่มีการประเมินiและช่วงข้างต้น

~x
n

ทางแยก ( n) ของปัจจัยหลัก ( x)

&~x
Nn

มันว่างเปล่า ( N)

`
&~x
Nn

ไปที่ระดับ 0 ทดสอบองค์ประกอบแต่ละช่วง

[#
`B
&~x
Nn

กรอง ( #) ช่วงที่เกี่ยวข้องกับรายการบูลีนนี้ ฟังก์ชั่นที่ผลิตโดย[ต้องการใช้อาร์กิวเมนต์#เป็นอาร์กิวเมนต์ของตัวเองดังนั้นเราจึงใส่Bบล็อกเพื่อป้องกัน#การรับอาร์กิวเมนต์ใด ๆ มิฉะนั้นจะใช้ค่าของ~-cell เป็นอาร์กิวเมนต์ของฟังก์ชันขนาดใหญ่ ในที่สุดpพิมพ์ผลลัพธ์


5

แบบสแต็กไม่ใช่แบบ24 24ไบต์

ที่บันทึกไว้ 3 ไบต์แรงบันดาลใจจากทับทิม Borsunho ของ ( 1 eqถึง2<)

{!n:>1+:n gcd 2<keep}

ลองที่นี่!

นี่คือแลมบ์ดาที่รับค่าอาร์กิวเมนต์เดียวและให้ค่าอาร์เรย์

{!n:>1+:n gcd 2<keep}
{!                  }  n-lambda
  n                    push n
   :>                  range [0, n)
     1+                range [1, n]
       :               duplicate
        n gcd          element-wise gcd with n
              2<       element-wise equality with 1
                       this yields the range [1, n] and a boolean mask of coprime numbers
                keep   then, we simply apply the mask to the range and keep coprimes.

ทำไมการไม่เข้าร่วมจึงเป็นเช่นนี้?
Zacharý

@ZacharyT ส่วนใหญ่keepไม่ได้ทำงานอย่างดี
Conor O'Brien

5

CJam , 14 ไบต์

{:X{Xmff%:*},}

ลองออนไลน์!

คำอธิบาย

เราไม่จำเป็นต้องตรวจสอบตัวหารที่เป็นไปได้ทั้งหมดaและbเพื่อทดสอบว่าพวกเขาเป็นผู้ดีหรือไม่ มันเพียงพอที่จะดูว่าส่วนใดในปัจจัยที่สำคัญของการแบ่งba

:X     e# Store the input in X.
{      e# Filter the list [0 1 ... X-1] by the results of this block...
  Xmf  e#   Get the prime factors of X.
  f%   e#   Take the current value modulo each of those prime factors.
  :*   e#   Multiply the results. Iff any of them divide the current
       e#   value, there's a 0 in the list, and the result of the product
       e#   is also 0, dropping the value from the resulting list.
},

5

Mathematica ขนาด 26 ไบต์

Pick[r=Range@#,r~GCD~#,1]&

1
โอ้ฉันกำลังมองหาบางอย่างเช่นเลือก ฉันเดาว่าตอนนี้ฉันดีใจที่ไม่พบมัน ;) แต่มันควรจะมีประโยชน์มากสำหรับความท้าทายในอนาคต
Martin Ender


4

Brachylog , 16 13 ไบต์

>.$p'(e:A*?),

นี่คือฟังก์ชันที่ใช้Nเป็นอินพุตและสร้างจำนวนเต็มทั้งหมดที่น้อยกว่าและ coprime ให้กับมัน

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

คำอธิบาย:

โปรแกรม Brachylog เป็นสายของข้อ จำกัด โดยทั่วไป LHS ของข้อ จำกัด หนึ่งข้อคือ RHS ของข้อ จำกัด ถัดไป

>.$p'(e:A*?),
>              The input is greater than
 .             the output, whose
  $p           prime factorisation does
    '(     )   not obey the following constraint:
      e        it has an element which
       :A*     can be multiplied by something to
          ?    produce the input.
            ,  (This comma turns off an unwanted implicit constraint.)

แข็งแรงเล่นกอล์ฟลงสามตัวละครโดยตระหนักถึงความมีเหตุผลที่จะตรวจสอบเพื่อดูว่าปัจจัยร่วมกัน (ซึ่งเป็นที่รู้จักกันอยู่แล้วที่จะเป็นปัจจัยสำคัญของการส่งออก) ไม่เป็นนายกปัจจัยของการป้อนข้อมูล เรารู้อยู่แล้วว่ามันยอดเยี่ยมดังนั้นเราสามารถตรวจสอบว่ามันเป็นปัจจัย ฉันประหลาดใจอย่างมากที่นี่ที่:A*?ไม่ส่งล่ามไปยังวงวนไม่ จำกัดและไม่อนุญาตให้ใช้ค่าที่ไม่ใช่จำนวนเต็มสำหรับAแต่ล่ามทำในสิ่งที่ฉันต้องการฉันจะรับไป


4

Dyalog APL 10 ไบต์

0~⍨⍳×1=⊢∨⍳

คำอธิบาย (อินพุตn):

0~⍨⍳×1=⊢∨⍳
         ⍳ - 1 ... n (Thus, ⎕IO is 1)
       ⊢∨  - Each GCD'd by n
     1=    - Test equality with 1 on each element
   ⍳×      - multiplied by its index
0~⍨        - without 0.

3
ฉันชอบวิธีที่รหัส APL ดูเหมือนใบหน้าที่คุณทำเมื่อคุณอ่าน
DJMcMayhem

ใช่แล้วมันทำลายแทบทุกภาษาที่ไม่ใช่โค้ดภาษากอล์ฟ :)
Zacharý

ทำไม "อาจ" ทำงานเท่านั้น
Rɪᴋᴇʀ

ฉันแค่คิดว่ามันใช้ได้
Zacharý

@ ZacharyT ทำไมคุณทดสอบไม่ได้ล่ะ เมื่อฉันวางลงใน try-apl.org ข้อผิดพลาดจะมีโทเค็นไม่ถูกต้อง
Rɪᴋᴇʀ

4

Japt -f , 9 8 5 2 ไบต์

jN

ลองมัน

  • บันทึกได้ 2 ไบต์ขอบคุณETH ที่ชี้ให้เห็นถึงความคิดสร้างสรรค์ซึ่งนำไปสู่การบันทึกไบต์อื่น

คุณสามารถทำได้o f_jU
ETHproductions

ขอบคุณ @ETHproductions ไม่รู้ว่าฉันคิดอะไรอยู่ที่นี่! ต้องเป็นหนึ่งในหลาย ๆ ช่วงเวลาที่ลืมไปแล้วว่าjสามารถใช้เพื่อทดสอบว่าตัวเลข 2 หมายเลขเป็นแบบร่วมหรือไม่
Shaggy

3

Mathematica, 33 ไบต์

xSelect[Range@x,x~CoprimeQ~#&]

มี U + F4A1


unprintable ทำอะไร?
Rɪᴋᴇʀ

3
@EasterlyIrk แนะนำฟังก์ชั่นที่ไม่มีชื่อกับอาร์กิวเมนต์ที่มีชื่อ มันแสดงผลเป็นลูกศรใน Mma
Martin Ender

@ มาร์ตินอีกต่อไปโอ้เท่ห์
Rɪᴋᴇʀ

U + F4A1 เป็นอักขระการใช้งานส่วนตัว อย่างที่มาร์ตินบอกว่ามันกลายเป็นลูกศรใน Mathematica
Zacharý



3

memes , 11 ไบต์ที่ไม่ใช่การแข่งขัน , ล้าสมัย

ไม่ใช่การแข่งขันเนื่องจากการวนซ้ำของ STDIN เป็นเรื่องใหม่ ใช้การเข้ารหัส UTF-8

d`}}]i=1?ip

คำอธิบาย:

d     Set program to not output result
`}    Loop next input-times
}]i   GCD of input and loop index
=1?   Is it equal to 1? If yes,
ip    Print out loop index

}เข้าถึงรายการอินพุตถัดไป แต่อินพุตสุดท้ายจะวนลูปเมื่อได้รับดังนั้นการป้อนข้อมูล6จะส่งผลเช่นเดียวกับ6 6 6 6 6 ...ใน STDIN ทำให้สามารถอ่านเอาต์พุตสองรายการจากหนึ่งรายการ


วันนี้คุณเพิ่งสร้าง lang หรือเปล่า? ถ้ามันถูกสร้างขึ้นมาก่อนการท้าทายมันจะต้องไม่ใช่การแข่งขัน
Rɪᴋᴇʀ

@EasterlyIrk มันถูกสร้างขึ้น 3 วันที่ผ่านมาฉันแค่ทำงานอย่างต่อเนื่อง นอกจากนี้ฉันคิดว่าคุณหมายถึงหลังจาก ?
devRicher

ใช่พิมพ์ผิดขอบคุณ และก็ไม่เป็นไรตราบใดที่คุณสมบัติที่ใช้ในคำตอบและเก่ากว่าความท้าทาย
Rɪᴋᴇʀ

@ ตะวันออกฉันเห็นว่าในกรณีนั้นฉันจะต้องแก้ไขคำตอบของฉัน
devRicher

ใช่ขอโทษ : /
Rɪᴋᴇʀ


2

ทับทิม, 36 34

->n{n.times{|i|p i if i.gcd(n)<2}}

เป็นที่ยอมรับว่านี่ไม่ใช่แรงบันดาลใจคำตอบที่

บันทึกได้ 2 ไบต์ด้วย Conor O'Brien


คุณสามารถโกนออกได้สองไบต์โดยการลบวงเล็บรอบ ๆ(n)
Conor O'Brien

2

Python 3 , 60 ไบต์

นำเข้า gcd แทนการเขียนแลมบ์ดาใหม่สำหรับมัน ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ ลองออนไลน์!

import math
lambda c:[i for i in range(c)if math.gcd(c,i)<2]

ฉันไม่คิดว่าคุณจะเล่นกอล์ฟได้มากกว่านี้ นำเข้า gcd โดยตรงหรือคณิตศาสตร์เป็น m ทั้งสองเพิ่มไบต์
Rɪᴋᴇʀ

2

Julia 30 ไบต์

n->filter(x->(gcd(n,x)<2),1:n)

ฟังก์ชั่นไม่ระบุชื่อ filterลบองค์ประกอบออกจากรายการที่ไม่เป็นความจริงตามหน้าที่

ในกรณีนี้ฟังก์ชั่นคือx->(gcd(n,x)<2)(จริงถ้า gcd ของอินพุตและองค์ประกอบรายการน้อยกว่า 2) 1:nรายการเป็นช่วง


2

PARI / GPขนาด 27 ไบต์

n->[k|k<-[1..n],gcd(k,n)<2]

สิ่งนี้ใช้ชุดสัญลักษณ์ที่แนะนำในเวอร์ชัน 2.6.0 (2013) ในเวอร์ชันก่อนหน้านี้จำเป็นต้องมีไบต์เพิ่มอีกสี่:

n->select(k->gcd(k,n)<2,[1..n])

จะต้อง


มันทำงานอย่างไร
Rɪᴋᴇʀ

1
@EasterlyIrk เหมือนกับส่วนใหญ่ของการส่งเหล่านี้ - สร้างช่วงจาก 1 ถึง n ( [1..n]) ตรวจสอบว่า gcd เป็น 1 ( gcd(n,k)<2) ส่งคืนตัวเลขด้วยคุณสมบัตินี้หรือไม่ ->เป็นสัญกรณ์ฟังก์ชั่น / ปิดสั้น 2 ไบต์กว่าไวยากรณ์การทำงานตามปกติและ[...|...<-...,...]เป็นสัญกรณ์ชุดที่อธิบายไว้ในคำตอบ (ดูส่วน 2.3.14 ในคู่มือการใช้งานหรือค้นหา<-)
ชาร์ลส์



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