ตัวเลขที่ไม่ดี


20

ถ้าเป็นจำนวนเต็มบวกมีปัจจัย (อย่างเคร่งครัด) นายกน้อย (โดยไม่นับ multiplicities) มากกว่าทายาทและบรรพบุรุษของมันเราจะเรียกมันว่าจำนวนปัจจัยที่น่าสงสารN>2

ในคำอื่น ๆและω ( N ) < ω ( N + 1 )ที่ω ( N )คือจำนวนของปัจจัยสำคัญที่เป็นเอกลักษณ์ของNω(N)<ω(N1)ω(N)<ω(N+1)ω(N)N

งาน

คุณสามารถเลือกระหว่างรูปแบบ I / O ต่อไปนี้:

  • รับจำนวนเต็มและเอาท์พุทN THจำนวนปัจจัยที่น่าสงสาร ในกรณีที่คุณเลือกอันนี้N สามารถเป็นดัชนีได้ 0 หรือ 1NNthN
  • ใช้เป็นจำนวนเต็มบวกและผลผลิตครั้งแรกยังไม่มีตัวเลขปัจจัยที่น่าสงสารNยังไม่มีข้อความ
  • พิมพ์ลำดับไปเรื่อย ๆ

คุณสามารถรับอินพุตและให้เอาต์พุตผ่านวิธีมาตรฐานใด ๆในภาษาการเขียนโปรแกรมใด ๆในขณะที่รับทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น นี่คือรหัสกอล์ฟดังนั้นการส่งสั้นที่สุดที่ปฏิบัติตามกฎจะชนะ

ฉันจะไม่รวมกรณีทดสอบแยกต่างหากเนื่องจากวิธีการแข่งขันแตกต่างกัน แต่คุณสามารถอ้างถึง 100 คำแรกของลำดับนี้ซึ่งเป็นOEIS A101934 :

11, 13, 19, 23, 25, 27, 29, 37, 41, 43, 47, 49, 53, 59, 61, 64, 67, 71, 73, 79, 81, 83, 89, 97, 101, 103, 107, 109, 113, 121, 125, 131, 137, 139, 149, 151, 155, 157, 163, 167, 169, 173, 179, 181, 191, 193, 197, 199, 211, 221, 223, 227, 229, 233, 239, 241, 243, 251, 259, 263, 265, 269, 271, 277, 281, 283, 289, 293, 307, 309, 311, 313, 317, 331, 337, 341, 343, 347, 349, 353, 359, 361, 365, 367, 371, 373, 379, 383, 389, 397, 401, 407, 409, 419, 421, 431, 433, 439, 441, 443

ตัวอย่างเช่นเกิดขึ้นในลำดับนี้เนื่องจากω ( 25 ) = 1 (5), ω ( 26 ) = 2 (2 และ 13) และω ( 24 ) = 2 (2 และ 3) ดังนั้นω ( 25 ) < ω ( 24 )และω ( 25 ) < ω ( 26 )25ω(25)=1ω(26)=2ω(24)=2ω(25)<ω(24)ω(25)<ω(26)


ฉันสามารถส่งออกชิ้นส่วนนำn = หน้าแต่ละค่าได้หรือไม่
Steadybox

@ Steadybox Sketchy แต่ฉันจะอนุญาต: - /
Mr. Xcoder

ฉันเพิ่มมันเป็นเวอร์ชันทางเลือก
Steadybox

คำตอบ:


7

Brachylogขนาด 21 ไบต์

⟨+₁≡-₁⟩{ḋdl}ᵐ⌋>~↰₂?ẉ⊥

ลองออนไลน์!

พิมพ์ไม่ จำกัด

คำอธิบาย

⟨+₁≡-₁⟩                  Fork: The output of the fork is [Input + 1, Input -1]
       {   }ᵐ            Map:
        ḋdl                (predicate 2) the output is the length of the prime decomposition
                           of the input with no duplicates
             ⌋           Take the minimum result of that map
              >          This minimum is bigger than…
               ~↰₂?      …the output of predicate 2 with Input as input
                  ?ẉ     Write Input followed by a new line if that's the case
                    ⊥    False: backtrack and try another value for Input

5

เยลลี่ , 13 12 ไบต์

Cr~ÆvÐṂN⁼Wø#

พิมพ์ตัวเลขn -factor ที่น่าสงสารตัวแรก

ลองออนไลน์!

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

Cr~ÆvÐṂN⁼Wø#  Main link. No arguments.

          ø   Wrap the links to the left into a chain and begin a new chain.
           #  Read an integer n from STDIN and call the chain to the left with
              arguments k = 0, 1, 2, ... until n of them return a truthy value.
              Return those n values of k as an array.
C                 Complement; yield -k+1.
  ~               Bitwise NOT; yield -k-1.
 r                Range; yield [-k+1, -k, -k-1].
     ÐṂ           Yield those elements of [-k+1, -k, -k-1] for which the link to
                  the left returns the minimal value.
   Æv                 Count the number of unique prime factors.
                      Note that, for a negative argument, Æv counts -1 as well, and
                      0 is counted as a/the factor of 0. Negating the the arguments
                      eliminates the edge case 1 (no factors), which would be a
                      false positive otherwise.
                  For a factor-poor number, this yields [-k].
       N          Take the negatives of the resulting integers.
         W        Wrap; yield [k].
        ⁼         Test the results to both sides for equality.

5

Python 2 , 123 119 ไบต์

q=lambda n:sum(n%i<all(i%j for j in range(2,i))for i in range(2,n+1))
i=2
while 1:
 i+=1
 if q(i-1)>q(i)<q(i+1):print i

ลองออนไลน์!


@FryAmTheEggman ขอบคุณ! แม้ว่าฉันไม่ได้ใช้ข้อเสนอแนะของคุณ แต่ก็เป็นแรงบันดาลใจให้ฉันในแนวทางอื่นที่ช่วยประหยัด 4 ไบต์: D
Rod

ดี! ฉันแน่ใจว่ามีวิธีที่จะหลีกเลี่ยง lambdas สองตัวที่น่าเกลียด :)
FryAmTheEggman

4

MATL , 26 24 22 ไบต์

`T@3:q+YFg!sdZSd0>?@QD

พิมพ์ลำดับไปเรื่อย ๆ

ลองออนไลน์!

คำอธิบาย

`         % Do...while loop
  T       %   Push true. Will be used as loop condition
  @       %   Push (1-based) iteration index, k 
  3:q     %   Push [1 2 3] minus 1, that is, [0 1 2]
  +       %   Add, element-wise. Gives [k k+1 k+2]
  YF      %   Exponents of prime-factor decomposition. Gives a 3-row matrix
  g       %   Convert to logical: non-zero numbers become 1
  !s      %   Transpose, sum of each column. Gives a row vector of 3 elements, 
          %   which are the number of unique prime factors of k, k+1 and k+2 
  d       %   Consecutive differences. Gives a row vector of 2 elements
  ZS      %   Sign: replaces each number by -1, 0 or 1
  d       %   Consecutive difference. Gives a single number
  0>      %   Is it positive?
  ?       %   If so
    @Q    %     Push k+1
    D     %     Display
          %   End (implicit)
          % End (implicit). The stack contains true, which (is consumed and)
          % causes an infinite loop

3

Husk , 22 ไบต์

f(ΠtSM<←ṙ1mȯLup§…←→)tN

พิมพ์ลำดับไปเรื่อย ๆลองออนไลน์หรือดูNแรก!

อีกวิธีหนึ่งคือ§oΛ>←t สามารถนำมาใช้ΠtSM<←แทน

คำอธิบาย

f(                  )tN  -- filter the tail of the naturals ([2,3…]) by:
  ΠtSM<←ṙ1m(Lup)§…←→     -- | takes a number as argument, example 11
                §…       -- | range of..
                  ←      -- | | the argument decremented (10)
                   →     -- | | to the argument incremented (12)
                         -- | : [10,11,12]
          m(   )         -- | map the following (example on 12) ..
              p          -- | | prime factors: [2,2,3]
             u           -- | | deduplicate: [2,3]
            L            -- | | length: 2
                         -- | : [2,1,2]
        ṙ1               -- | rotate by 1: [1,2,2]
    SM<                  -- | map the function (< X) over the list where X is ..
       ←                 -- | | the first element (1)
                         -- | : [0,1,1]
   t                     -- | tail: [1,1]
  Π                      -- | product: 1
                         -- : [11,13,19,23,25,27,29…

3

Pyth , 14 ไบต์

.f!-.ml{Pb}tZh

ลองที่นี่!

มันเป็นข้อเสนอแนะเบื้องต้นเกี่ยวกับคำตอบของ Dopappแต่พวกเขาบอกให้ฉันโพสต์แยกต่างหาก

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

.f! -. ml {Pb} tZh | โปรแกรมเต็มรูปแบบ รับอินพุตจาก STDIN เอาต์พุต N แรกไปยัง STDOUT

.f | (var: Z) เอาท์พุทค่า N แรกซึ่งตอบสนองภาคแสดง
          } tZh | สร้างรายการ [Z - 1, Z, Z + 1]
    .m | (var: b) ใช้องค์ประกอบที่มีค่าฟังก์ชันน้อยที่สุด
        Pb | ปัจจัยสำคัญของ b.
      l {| ซ้ำซ้อนรับความยาว
               | สำหรับตัวเลขที่ไม่ดีพอตัวฟังก์ชันนี้จะห่อหุ้มด้วยซิงเกิล
   - | ลบ Z จากสิ่งนั้น
  ! | การปฏิเสธเชิงตรรกะ

3

Haskell, 105 86 ไบต์

ขอบคุณ @Wheat Wizard, @Bruce Forte และ @Laikoni สำหรับการบันทึก 19 ไบต์

[n|n<-[2..],d n<d(n-1),d n<d(n+1)] d x=[1|n<-[1..x],x`rem`n<1,all((>0).rem n)[2..n-1]]


เมื่อใช้rem ==0และ/=0สามารถ relaced ด้วย<1และ>0ตามลำดับ
ข้าวสาลีตัวช่วยสร้าง

ไม่จำเป็นต้องมี a let, ให้นิยามdว่าฟังก์ชั่นเสริมนั้นใช้ได้ (ดูคำแนะนำเกี่ยวกับกฎการตีกอล์ฟ ) นอกจากนี้ยังsumสามารถละเว้นการเปรียบเทียบทำงานในรายการ 86 ไบต์: ลองออนไลน์!
Laikoni

2

อ็อกเทฟ ,  87   83  79 ไบต์

ขอบคุณ @Cows ต้มตุ๋นสำหรับการบันทึกไบต์และขอบคุณ @Luis Mendo สำหรับการบันทึกสามหกไบต์!

f=@(n)nnz(unique(factor(n)));n=9;while++n if[f(n-1) f(n+1)]>f(n)disp(n);end;end

พิมพ์ลำดับไปเรื่อย ๆ

ลองออนไลน์!

73 ไบต์นำn =หน้าก่อนค่าแต่ละค่า:

f=@(n)nnz(unique(factor(n)));n=9;while++n if[f(n-1) f(n+1)]>f(n)n end;end

ลองออนไลน์!


ฉันคิดว่าฟังก์ชั่นfสามารถกลายเป็นf=@(n)length(unique(factor(n)))หนึ่งไบต์น้อยกว่า
Kritixi Lithos

2

05AB1E , 14 13 ไบต์

ส่งออกจำนวนที่ปัจจัยที่ไม่ดี nth (1-indexed)

µ3LN+Íf€gÀć›P

ลองออนไลน์!

คำอธิบาย

µ                 # loop over N (1,2,3, ...) until counter equals input
 3L               # push the range [1,2,3]
   N+             # add current N
     Í            # subtract 2
      f           # get unique prime factors of each
       €g         # get length of each factor list
         À        # rotate left
          ć       # extract the head
           ›      # check if the remaining elements are strictly greater
            P     # product
                  # if 1, increment counter
                  # implicitly output final N

1
ฉันเพิ่งจะแนะนำให้เปลี่ยนไปใช้µดังนั้นฉันเดาว่าฉันจะชี้ให้เห็นทางเลือกของฉัน - N<N>Ÿสามารถทดแทน3LN+Íหากช่วยได้
Mr. Xcoder

@ Mr.Xcoder: ในทำนองเดียวกัน®XŸN+ก็ใช้งานได้ หรือ0®X)N+ในกรณีที่Àไม่ต้องการ น่าเสียดายที่พวกเขาทั้งหมดจบลงด้วยจำนวนไบต์เดียวกัน
Emigna

1

Pyth, 30 25 ไบต์

#=hTI&>l{PhTKl{PT>l{PtTKT

นี่เป็นสนามกอล์ฟ Pyth ตัวแรกของฉันดังนั้นความเห็นใด ๆ ที่ชื่นชมมาก

ขอบคุณมากที่ Xcoder!

คำอธิบาย

#                         | Loop until error
 =hT                      | Add one to T (initially 10)
    I&                    | If both...
      >l{PhTKl{PT         | The number of unique prime factors of T+1 is greater than that of T (store in K) 
                 >l{PtTK  | And the number of unique prime factors of T-1 is greater than K (from before)
                        T | Then implicitly print T

TIO


14 ไบต์: .f!-.ml{Pb}tZh(พิมพ์ n แรก) ( .fดึงแรกnค่าที่ตอบสนองเงื่อนไขที่มากกว่า[1,2,3,...]และใช้ตัวแปรZ, }tZhสร้างช่วงจำนวนเต็ม[Z - 1 ... Z + 1], .mกลับรายการขององค์ประกอบที่มีค่าฟังก์ชั่นน้อยที่สุด (กับb) l{Pbได้รับการนับตัวหารที่แตกต่างกัน, -ยกเลิกZจากรายการ!ใช้การปฏิเสธเชิงตรรกะ)
นาย Xcoder

1
@ Mr.Xcoder ว้าวฉันไม่คิดว่าฉันจะได้รับมันเร็ว ๆ นี้! คุณจะไม่พูดว่ามันสมควรได้รับคำตอบใช่ไหม
Daniel

@Dopapp ตกลงจากนั้นฉันโพสต์แยกต่างหาก +1 ยินดีต้อนรับสู่ Pyth Golfing!
Mr. Xcoder

25 ไบต์โดยใช้วิธีการของคุณ
Mr. Xcoder

Nope hคือ+1, tคือ-1ในขณะที่เป็นตัวแปรที่ได้รับมอบหมายโดยไม่ต้องK =ยกตัวอย่างเช่นK4กำหนดไปK จากนั้นคุณสามารถเข้าถึงได้โดยใช้4 K
Mr. Xcoder

1

JavaScript (ES6), 94 ไบต์

ส่งคืนหมายเลขปัจจัยที่ไม่ดีของ Nth ซึ่งสร้างดัชนี 0

f=(i,n=9)=>(P=(n,i=k=1)=>++k>n?0:n%k?P(n,1):i+P(n/k--,0))(n)>P(++n)&P(n)<P(n+1)&&!i--?n:f(i,n)

ลองออนไลน์!

อย่างไร?

อันดับแรกเราจะกำหนดฟังก์ชั่นP ()ซึ่งจะคืนค่าจำนวนตัวประกอบเฉพาะของจำนวนเต็มที่กำหนด

P = (                   // P = recursive function taking:
  n,                    //   n = input number to test
  i =                   //   i = flag to increment the number of prime factors
  k = 1                 //   k = current divisor
) =>                    //
  ++k > n ?             // increment k; if k is greater than n:
    0                   //   stop recursion
  :                     // else:
    n % k ?             //   if k is not a divisor of n:
      P(n, 1)           //     do a recursive call with n unchanged and i = 1
    :                   //   else:
      i +               //     add i and
      P(n / k--, 0)     //     do a recursive call with n / k and i = 0; decrement k

ตอนนี้โค้ดตัดคำอ่านเป็น:

f = (                   // given:
  i,                    //   i = input index
  n = 9                 //   n = counter
) =>                    //
  P(n) > P(++n) &       // increment n; if P(n - 1) is greater than P(n)
  P(n) < P(n + 1) &&    // and P(n) is less than P(n + 1)
  !i-- ?                // and we have reached the correct index:
    n                   //   return n
  :                     // else:
    f(i, n)             //   go on with the next value

1

Japt , 29 27 26 ไบต์

ไม่พอใจกับสิ่งนี้ทั้งหมด แต่อย่างน้อยมันก็ดีกว่าความพยายามครั้งแรกของฉันที่มากกว่า 40 ไบต์!

ส่งออกNตัวเลขลำดับที่ในลำดับดัชนี 1

È=Jõ_+X k â ÊÃé)e>Xo)«´U}a

ลองมัน


คำอธิบาย

Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม

È                       }a

คืนค่าจำนวนเต็มแรกXที่คืนค่าจริงเมื่อส่งผ่านฟังก์ชันต่อไปนี้

=Jõ             )

กำหนดอาร์เรย์ไป[-1,0,1]X

 _+X      Ã

Xผ่านองค์ประกอบของอาร์เรย์ว่าแต่ละผ่านฟังก์ชั่นที่แรกเพิ่มมูลค่าปัจจุบันของ

k â Ê

รับความยาว ( Ê) ของค่าเฉพาะ ( â) ปัจจัยหลัก ( k) ของผลลัพธ์

é

หมุนอาร์เรย์ผลลัพธ์หนึ่งไปทางขวา

e>Xo)

ป๊อป ( o) องค์ประกอบสุดท้ายจากXและตรวจสอบว่าองค์ประกอบที่เหลือทั้งหมดมากกว่าหรือไม่

«´U

ถ้าเป็นเช่นนั้นให้ลดค่าUและตรวจสอบว่าเท่ากับ 0 หรือไม่


1

Python 3 , 97 ไบต์

n,g=9,lambda m,k=2,p=1:m//k and(m%k<p%k)+g(m,k+1,p*k*k)
while 1:n+=1;g(n-1)>g(n)<g(n+1)!=print(n)

ในทางทฤษฎีสิ่งนี้จะพิมพ์ลำดับไปเรื่อย ๆ ในทางปฏิบัติgในที่สุดก็เกินขีด จำกัด การเรียกซ้ำ

ลองออนไลน์!



0

สะอาด , 130 123 117 ไบต์

import StdEnv
?n=[1\\q<-[p\\p<-[2..n]|and[gcd p i<2\\i<-[2..p-1]]]|n rem q<1]
f=[n\\n<-[3..]| ?n<min(?(n-1))(?(n+1))]

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

ลองออนไลน์!


0

APL NARS, 124 ไบต์, 62 ตัวอักษร

{(⍵>1E4)∨⍵≤0:¯1⋄x←9+⍳10×⍵⋄⍵↑(∊{v←⍴∘∪∘π¨⍵+2-⍳3⋄2=+/v>2⌷v}¨x)/x}

ควรส่งคืนคำตอบจนถึง 1E4 จากนั้นส่งคืน -1 ข้อผิดพลาด สมมติว่า 9.10xargument มีจำนวนที่เพียงพอ ทดสอบ:

  z←{(⍵>1E4)∨⍵≤0:¯1⋄x←9+⍳10×⍵⋄⍵↑(∊{v←⍴∘∪∘π¨⍵+2-⍳3⋄2=+/v>2⌷v}¨x)/x}  
  z 0
¯1
  z 1
11 
  z 20
11 13 19 23 25 27 29 37 41 43 47 49 53 59 61 64 67 71 73 79 

4
ประมาณ 150 ไบต์?
Shaggy

@Shaggy ใช่มันเป็นหนึ่งในค่าประมาณ; แต่ + - มันเหมาะสำหรับคนที่เล่นกอล์ฟ ...
RosLuP

โดยการนับคะแนนของฉันที่นี่คือ 147 ไบต์ไม่ใช่ 152 (จำนวนอักขระไม่เกี่ยวข้อง) อ่านเพิ่มเติม: codegolf.meta.stackexchange.com/q/9428/58974
Shaggy

@Shaggy หมายเลข 152 จะมีขนาดในไบต์ของหนึ่งแฟ้มที่มีเพียงว่ารหัส (คัดลอกที่ผ่านมาบันทึกรหัสที่ใน notepad (Window) เอกสารและสังเกต "ทรัพย์สิน" ของไฟล์นั้น)
RosLuP

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