จำนวนถึง 1 โดยการลบนายกที่ใหญ่ที่สุดน้อยกว่ามันซ้ำ ๆ ได้หรือไม่?


27

ท้าทาย:

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

ตัวอย่าง:

ทั้งหมดนี้ควรให้คุณค่าที่แท้จริง:

3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50

สิ่งเหล่านี้ควรให้ค่าเท็จ:

5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49

กฎ:

  • คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น
  • คุณสามารถสันนิษฐานได้ว่าอินพุตมีค่ามากกว่า 2
  • ช่องโหว่มาตรฐานใช้
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดชนะ!

เกี่ยวข้องกับoeis.org/A175071
ข้อบกพร่อง

1
5-3 = 2, 2 - (- 2) = 4, 4-3 = 1 (/ wiseguy)

@Hurkyl -2 = -1 × 2 ดังนั้นมันจึงไม่เหมาะ ;-)
ETHproductions

1
@ETHProductions: อ่า แต่ -1 เป็นหน่วย การแยกตัวประกอบนั้นไม่ขัดแย้งกับอันดับแรกของ -2 ใด ๆ มากกว่า 2 = (- 1) × (-2) ทำจาก 2 (หรือ 2 = 1 × 2)

3
@ ETHproductions: ตัวเลขที่มีเหตุผลน่าสนใจเพราะมีสองวิธีที่แตกต่างกันมากที่เป็นประโยชน์ในทางปฏิบัติ ตัวเลขที่มีเหตุผลไม่มีช่วงเวลา (ไม่แม้แต่ 2!) เพราะทุกอย่างเป็นหน่วย อย่างไรก็ตามคุณยังสามารถดูปันส่วนเป็นโครงสร้างที่สร้างจากจำนวนเต็มและศึกษาโดยใช้จำนวนเฉพาะของจำนวนเต็ม (เช่นใครก็ตามที่ขอให้แยกตัวประกอบเฉพาะ9/10ตามที่2^(-1) 3^2 5^(-1)คิดในแง่หลัง)

คำตอบ:


8

เยลลี่ , 9 8 ไบต์

’ÆRṪạµ¡Ḃ

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทุก

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

’ÆRṪạµ¡Ḃ  Main link. Argument: n

     µ    Combine all atoms to the left into a chain.
’           Decrement; yield n - 1.
 ÆR         Prime range; yield all primes in [2, ..., n -1].
   Ṫ        Tail; yield p, the last prime in the range.
            If the range is empty, this yields p = 0.
    ạ       Compute the absolute difference of p and n.
      ¡   Call the chain to the left n times.
          This suffices since each iteration decreases n, until one of the fixed
          points (1 or 2) is reached.
       Ḃ  Bit; return the parity of the fixed point.

11

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

.+
$*
+`1(?!(11+)\1+$)11+
1
^1$

พิมพ์0(falsy) หรือ1(ความจริง)

ลองออนไลน์! (บรรทัดแรกเปิดใช้งานชุดทดสอบที่แยกบรรทัดด้วยฟีด)

คำอธิบาย

.+
$*

แปลงใส่เอกด้วยการเปลี่ยนการป้อนข้อมูลNลงในสำเนาของN1

+`1(?!(11+)\1+$)11+
1

ลบนายกที่ใหญ่ที่สุดซ้ำ ๆ น้อยกว่าอินพุท สิ่งนี้อยู่บนพื้นฐานของการทดสอบแบบดั้งเดิมด้วย regex

^1$

ตรวจสอบว่าผลลัพธ์เป็นแบบเดี่ยว1หรือไม่


เป็นวิธีการที่คุณสามารถใช้ Retina โดยไม่ต้อง unary? Oo
Addison Crump

@Syxer สองบรรทัดแรกแปลงอินพุตเป็นเอก
Martin Ender

นั่นไม่ได้หมายความว่าคุณสามารถลบพวกเขาออกและขอให้คุณนำเข้าข้อมูลที่ไม่เป็นมาตรฐาน
Addison Crump

2
@Syxer ฉันทำได้ แต่ฉันหยุดทำแบบนั้น ดูเหมือนว่ารูปแบบหลบ I / O และตอนนี้การแปลงเป็น 6 ไบต์ (เมื่อเทียบกับ ~ 200 มันเคยเป็น) ฉันไม่คิดว่า Retina นับเป็น
Martin Ender

อ่าฉันเข้าใจแล้ว ฉันเพิ่งเห็นการป้อนข้อมูลแบบเอกนารีในเรตินาดังนั้นความสับสนของฉัน
Addison Crump

8

Pyth, 18 15 14 ไบต์

ขอบคุณ @Maltysen สำหรับ -1 ไบต์

#=-QefP_TUQ)q1

โปรแกรมที่รับอินพุตบน STDIN และพิมพ์TrueหรือFalseตามความเหมาะสม

ลองออนไลน์

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

#=-QefP_TUQ)q1  Program. Input: Q
#          )    Loop until error statement (which occurs when Q<3):
         UQ      Yield [0, 1, 2, 3, ..., Q-1]
     fP_T        Filter that by primality
    e            Yield the last element of that
 =-Q             Q = Q - that
            q1  Q is 1 (implicit variable fill)
                Implicitly print

เวอร์ชันเก่าที่มีการลดขนาด 18 ไบต์

qu-G*<HGH_fP_TSQQ1

ลองออนไลน์

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

qu-G*<HGH_fP_TSQQ1  Program. Input: Q
              SQ    Yield [1, 2, 3, ..., Q]
          fP_T      Filter that by primality
         _          Reverse it
 u                  Reduce it:
                Q    with base case Q and
                     function G, H -> 
     <HG              H<G
    *   H             *H (yields H if H<G, else 0)
  -G                  Subtract that from G
q                1  The result of that is 1
                    Implicitly print

StคือU15 ตัวอักษร
Maltysen

7

JavaScript (ES6), 64 63 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @Neil

g=(x,n=x-1)=>n<2?x:x%n?g(x,n-1):g(x-1)
f=x=>x<3?x%2:f(x-g(x-1))

ฉันเขียนมันใน 2 นาที ... และมันทำงานได้อย่างสมบูรณ์ในครั้งแรก ผู้ใช้คนแรกที่พบข้อผิดพลาดที่ไม่สามารถเอาชนะได้

ลองดู

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

ครั้งแรกที่เรากำหนดกรัม (x)เป็นฟังก์ชันที่พบจำนวนเฉพาะครั้งแรกp <= x สิ่งนี้ทำได้โดยใช้กระบวนการต่อไปนี้:

  1. เริ่มต้นด้วยn = x-1
  2. ถ้าn <2 , xเป็นไพร์ม; ผลตอบแทนx
  3. ถ้าxหารด้วยnให้ลดลงxแล้วไปที่ขั้นตอนที่ 1
  4. มิฉะนั้นลดค่าnและไปที่ขั้นตอนที่ 2

ทางออกสำหรับความท้าทายนี้คือf (x)ตรงไปตรงมาในตอนนี้:

  1. ถ้าx <3ผลตอบแทนx = 1
  2. มิฉะนั้นให้ลบg (x-1)แล้วลองอีกครั้ง

4326 ซึ่งควรกลับจริงไม่ดูเหมือนจะกลับ แต่ 4328 (จริง) และ 4329 (false) ทำนี่เป็นข้อ จำกัด ของ JS หรือข้อผิดพลาด?
Jonathan Allan

@JanathanAllan 4326 ขว้างtoo much recursionไปที่คอนโซลของเบราว์เซอร์ใน Firefox 48 ดังนั้นฉันเดาว่าการเรียกซ้ำจะผ่านการเรียกซ้ำของ FF
ETHproductions

ใช่แล้วไพรม์ดาวน์ถัดไปคือ 4297 (และถัดไปคือ 4327) ซึ่งจะเป็นสาเหตุที่ 4328 ทำงาน
Jonathan Allan

4
x%2x==1ควรจะช่วยให้คุณประหยัดมากกว่าไบต์
Neil

@ ไม่มีฉันจะไม่คิดว่า :-)
ETHproductions


5

Julia, 32 ไบต์

แม้ว่ามันจะไม่ใช่คำตอบที่สั้นที่สุดในบรรดาภาษา แต่นี่อาจเป็นคำที่สั้นที่สุดในภาษาที่มนุษย์อ่านได้ ...

!n=n>2?!(n-primes(n-1)[end]):n<2

หรือจะใส่ไว้ในเงื่อนไขที่ชัดเจนขึ้นเล็กน้อย

function !(n)
  if n>2
    m=primes(n-1)[end]   # Gets largest prime less than n
    return !(n-m)        # Recurses
  else
    return n<2           # Gives true if n is 1 and false if n is 2
  end
end

!37เรียกว่ามีตัวอย่างเช่น


3

Mathematica ขนาด 32 ไบต์

2>(#//.x_/;x>2:>x+NextPrime@-x)&

นี่คือฟังก์ชั่นที่ไม่มีชื่อซึ่งใช้จำนวนเต็มและส่งกลับบูลีน

คำอธิบาย

มีไวยากรณ์และลำดับการอ่านตลก ๆ มากมายที่นี่ดังนั้น ...

   #                               This is simply the argument of the function.
    //.                            This is the 'ReplaceRepeated' operator, which applies
                                   a substitution until the its left-hand argument stops
                                   changing.
       x_/;x>2                     The substitution pattern. Matches any expression x as
                                   long as that expression is greater than 2.
              :>                   Replace that with...
                  NextPrime@-x     Mathematica has a NextPrime built-in but no
                                   PreviousPrime built-in. Conveniently, NextPrime
                                   works with negative inputs and then gives you the 
                                   next "negative prime" which is basically a
                                   PreviousPrime function (just with an added minus sign).
                x+                 This gets added to x, which subtracts the previous
                                   prime from it.
2>(                           )    Finally, we check whether the result is less than 2.

เต้นอย่างใกล้ชิด#+0~Min~NextPrime@-#&~FixedPoint~#==1&(36 ไบต์) ใช้งานได้ดี//.!
Greg Martin

1
@GregMartin 35 เมื่อคุณใช้<2ในตอนท้าย
Martin Ender

3

Python3, 102 92 90 89 88 ไบต์

f=lambda n:n<2if n<3else f(n-[x for x in range(2,n)if all(x%y for y in range(2,x))][-1])

ยินดีต้อนรับคำแนะนำการเล่นกอล์ฟ! ฉันเห็นว่าgmpyมีฟังก์ชั่นnext_primeแต่ฉันยังไม่สามารถทดสอบได้ :(

-2 ไบต์ขอบคุณ@JonathanAllan !

-1 ไบต์ขอบคุณ@Aaron !

Testcases

f=lambda n:n<2if n<3else f(n-[x for x in range(2,n)if all(x%y for y in range(2,x))][-1])

s="3 4 6 8 10 11 12 14 16 17 18 20 22"
h="5 7 9 13 15 19 21 25 28 31 33 36 39"

for j in s.split(" "):print(f(int(j)))
for j in h.split(" "):print(f(int(j)))

เอาต์พุตคือ 13 ค่าจริงและ 13 ค่าเท็จ sมีคดีความจริงและhความเท็จ


1
if all(x%y for...ทำงาน
Jonathan Allan

1
n<3 else-> n<3elseเพื่อให้มีความยาวเท่ากับของฉัน;)
แอรอน

2

Python ที่มี sympy ขนาด 60 ไบต์

import sympy
f=lambda n:n>2and f(n-sympy.prevprime(n))or n<2

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

f=lambda n,p=0:n>2and(any(p%x==0for x in range(2,p))and f(n,p-1)or f(n-p,n+~p))or n


@ mbomb007 ฉันคิดว่ารายละเอียดเป็น "จริงหรือเท็จ" หากจำเป็นต้องใช้ในขณะที่ "ความจริงหรือเท็จ" หมายถึงความแตกต่างและสอดคล้องกัน?
Jonathan Allan

1
Nope พวกเขาถูกกำหนดตามที่เราตัดสินใจบนไซต์เมตา คำถามใด ๆ ที่อนุญาตให้เอาต์พุต "แยกได้และสอดคล้องกัน" ต้องระบุว่าแทนที่จะเป็นความจริง / เท็จ
mbomb007

ตกลงฉันอ่านนี้จะอัปเดตในบางจุด ...
โจนาธานอัลลัน

1

Vitsy, 28 26 ไบต์

สิ่งนี้สามารถสั้นลงได้อย่างแน่นอน

<]xN0)l1)-1[)/3D-];(pD-1[D

<                    Traverse the code in this direction, rotating on the line.
                     For the sake of reading the code easier, I'm reversing the
                     code on this line. This will be the order executed.

 D[1-Dp(;]-D3/)[1-)1l)0Nx]
 D                         Duplicate the top member of the stack.
  [      ]                 Do the stuff in brackets until break is called.
   1-                      Subtract 1 from the top item of the stack.
     D                     Duplicate the top member of the stack.
      p(                   If the top member is a prime...
        ;                  break;
          -                Pop a, b, push a - b.
           D3/)[         ] If this value is less than 3, do the bracketed code.
                1-         Subtract the top item of the stack by 1.
                  )        If the top item is zero...
                   1       Push 1.
                    l)     If the length of the stack is zero...
                      0    Push 0.
                       N   Output the top member of the stack.
                        x  System.exit(0);

ลองออนไลน์!


1

MATL , 13 ไบต์

`tqZq0)-t2>}o

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดในครั้งเดียว

คำอธิบาย

`        % Do...while
  t      %   Duplicate. Takes input implicitly in the first iteration
  qZq    %   All primes less than that
  0)     %   Get last one
  -      %   Subtract (this result will be used in the next iteration, if any)
  t      %   Duplicate
  2>     %   Does it exceed 2? If so: next iteration. Else: execute the "finally" 
         %   block and exit do...while loop
}        % Finally
  o      %   Parity. Transforms 2 into 0 and 1 into 1
         % End do...while implicitly
         % Display implicitly

1

CJam , 21 16 ไบต์

ขอบคุณเดนนิสสำหรับการบันทึก 4 ไบต์

ri{_1|{mp},W=-}h

ลองออนไลน์!

คำอธิบาย

ri       e# Read input and convert to integer N.
{        e# Run this block as long as N is positive (or until the program aborts
         e# with an error)...
  _1|    e#   Duplicate and OR 1. This rounds up to an odd number. For N > 2, this
         e#   will never affect the greatest prime less than N.
  {mp},  e#   Get all primes from 0 to (N|1)-1.
         e#   For N > 2, this will contain all primes less than N.
         e#   For N = 2, this will contain only 2.
         e#   For N = 1, this will be empty.
  W=     e#   Select the last element (largest prime up to (N|1)-1).
         e#   For N = 1, this will result in an error and terminate the program, which
         e#   still prints the stack contents though (which are 1, the desired output).
  -      e#   Subtract from N. Note that this gives us 0 for N = 2, which terminates the 
         e#   loop.
}h

ri_{_1|{mp},W=-}*ควรทำงาน.
Dennis

@Dennis ขอบคุณ1|มากฉลาดจริงๆ :) (และฉันมักจะลืมว่า{...},มันเป็นช่วงที่ชัดเจน ... )
Martin Ender


1

.NET Regex, 38 ไบต์

เพียงเพื่อแสดงว่าสามารถตรวจสอบได้ใน regex เดียว

^(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+.$

การป้อนข้อมูลจะถือว่าเป็นเอกภาพ

คำอธิบาย

มันใช้ความต้องการกับคำเพียงแค่ลบนายกที่ใหญ่ที่สุดและตรวจสอบว่าส่วนที่เหลือเป็น 1 ซ้ำ ๆ

  • (?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+: กลุ่มที่ไม่ย้อนรอยทำให้แน่ใจว่านายกที่ใหญ่ที่สุดที่เราพบนั้นไม่ได้อยู่เหนือและ+เพียงแค่ทำซ้ำขั้นตอนการจับคู่นายกที่ยิ่งใหญ่ที่สุด

    • (?<=(.*))..+(?<!^\1\2+(.+.)|$): จับคู่ไพรม์ที่ใหญ่ที่สุดน้อยกว่าจำนวนที่เหลือ

      • (?<=(.*)): บันทึกจำนวนที่เราได้หักออกเพื่อสร้างจุด "ยึด" สำหรับการยืนยัน

      • ..+: มองหาหมายเลขที่ใหญ่ที่สุด ...

      • (?<!^\1\2+(.+.)|$): ... ซึ่งเป็นจำนวนเฉพาะและน้อยกว่าจำนวนที่เหลืออยู่
        • (?<!^\1\2+(.+.)): รูทีนการทดสอบปกติที่มีการ^\1ยึดติดไว้ด้านหน้าเพื่อให้แน่ใจว่าเรากำลังตรวจสอบจำนวนที่ตรงกัน..+
        • (?!<$): ยืนยันน้อยกว่าจำนวนที่เหลืออยู่

(?<=(.*))ส่วนหนึ่งค่อนข้างเงอะงะ ไม่แน่ใจว่ามีวิธีที่ดีกว่านี้หรือไม่ นอกจากนี้ฉันอยากรู้ว่ามีวิธีแก้ปัญหาใน PCRE หรือไม่
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

0

Perl 6 ,  54 53 52  51 ไบต์

{($_,{$_-($_-1...2).first: *.is-prime}...3>*)[*-1]==1}
{($_,{$_-($_-1...2).first: *.is-prime}...3>*).any==1}
{any($_,{$_-($_-1...2).first: *.is-prime}...3>*)==1}
{any($_,{$_-(^$_).grep(*.is-prime)[*-1]}...3>*)==1}

คำอธิบาย:

# bare block lambda with implicit parameter 「$_」
# used to generate all of the rest of the elements of the sequence
{
  # create an any Junction of the following list
  any(
    $_, # initialize sequence with the inner block's argument

    # bare block lambda with implicit parameter 「$_」
    {
      # take this inner block's argument and subtract
      $_ -

      ( ^$_ )            # Range up-to and excluding 「$_」
      .grep(*.is-prime)\ # find the primes
      [ * - 1 ]          # return the last value
    }

    ...   # keep doing that until

    3 > * # the result is less than 3

  # test that Junction against 「1」
  # ( returns an 「any」 Junction like 「any(False, False, True)」 )
  ) == 1
}

ตัวอย่าง:

# show what is returned and if it is truthy
sub show ($_) {
  # 「.&{…}」 uses the block as a method and implicitly against 「$_」
  my $value = .&{any($_,{$_-(^$_).grep(*.is-prime)[*-1]}...3>*)==1}
  say join "\t", $_, ?$value, $value.gist;
}

show 3;  # 3    True    any(False, True)
show 4;  # 4    True    any(False, True)
show 5;  # 5    False   any(False, False)
show 10; # 10   True    any(False, False, True)
show 28; # 28   False   any(False, False, False)
show 49; # 49   False   any(False, False)
show 50; # 50   True    any(False, False, True)

0

ไม่สม่ำเสมอ 63 ไบต์

p~?1_$-1p:;
n=i(0)?1_$-1p:;
_~
N=n
1(?!(11+)\1+$)11+~1
^11$~0
N

ฉันสร้างภาษานี้เมื่อสองวันที่แล้วและสถานที่พื้นฐานคือไม่มีวงในตัวคุณสมบัติเดียวคือเลขคณิตพื้นฐานและการตัดสินใจและการประเมินผลโปรแกรมจะขึ้นอยู่กับนิพจน์ทั่วไป

คำอธิบาย

p~?1_$-1p:;
n=i(0)?1_$-1p:;
_~
N=n

ส่วนนี้แปลงอินพุตเป็นเอก มันจะลบ 1 ซ้ำ ๆ จากอินพุตจนกว่ามันจะเท่ากับ 0 โดยเป็นการเตรียม1_แต่ละครั้ง จากนั้นจะลบ_s ทั้งหมด หากฉันไม่ได้ลืมbreakรหัสของฉันก็สามารถเขียนได้ดังนี้:

p~?1_$-1p:;
_~
n=i(0)?1_$-1p:;

ส่วนถัดไปซ้ำ ๆ เอาสำคัญที่ใหญ่ที่สุดจากการป้อนข้อมูลจนกว่าจะมีค่าเท่ากับ1หรือ11มีถูกแทนที่ด้วย110

1(?!(11+)\1+$)11+~1
^11$~0
N

ผมใช้ regex จากคำตอบที่มาร์ตินพลิก



0

PowerShell v2 +, 81 ไบต์

param($n)while($n-gt2){$n-=(($n-1)..2|?{'1'*$_-match'^(?!(..+)\1+$)..'})[0]}!--$n

$nจะเข้า เข้าสู่whileลูปตราบใดที่$nยังคงอยู่3หรือมากกว่า แต่ละซ้ำ, $nลบตัวเลขจาก ตัวเลขคือผลลัพธ์ของการทดสอบ regex primality ที่ใช้กับช่วง($n-1)..2ผ่านตัวดำเนินการWhere-Object( ?) จากนั้น[0]ผลลัพธ์แรกของผลลัพธ์ (ตั้งแต่ช่วงกำลังลดลงผลลัพธ์นี้จะเป็นการเลือกที่ใหญ่ที่สุด) หลังจากสรุปลูป$nอาจจะเป็น1หรือ2ตามคำนิยามดังนั้นเราจึงลดค่าลงล่วงหน้า$n(เปลี่ยนให้เป็นอย่างใดอย่างหนึ่ง0หรือ1) และนำบูลีน - ไม่ใช่!มัน ที่เหลืออยู่บนไปป์ไลน์

ตัวอย่าง

PS C:\Tools\Scripts\golfing> 3..20|%{"$_ --> "+(.\can-the-number-reach-one.ps1 $_)}
3 --> True
4 --> True
5 --> False
6 --> True
7 --> False
8 --> True
9 --> False
10 --> True
11 --> True
12 --> True
13 --> False
14 --> True
15 --> False
16 --> True
17 --> True
18 --> True
19 --> False
20 --> True

0

Matlab, 51 ไบต์

v=@(x)x-max(primes(x-1));while(x>=3)x=v(x);end;x==1

นี่คล้ายกับโซลูชัน JS6 โดยETHProductionsมาก แต่ต้องการตัวแปรที่จะอยู่ในเวิร์กสเปซ


0

Python 2.7: 88 87 ไบต์

r=lambda n:n>2and r(n-[a for a in range(2,n)if all(a%b for b in range(2,a))][-1])or n<2

ขอบคุณ @TuukkaX เพื่อเพิ่ม -1 ไบต์!


1
อัปเดตรายละเอียดของคุณ;) นอกจากนี้คุณยังสามารถบันทึกหนึ่งไบต์โดยบอกแทนn<2 n==1
Yytsi


0

Clojure, 125 ไบต์

#(loop[x %](if(> x 2)(recur(- x(loop[y(dec x)](if(some zero?(vec(for[z(range 2 y)](mod y z))))(recur(dec y))y))))(quot 1 x)))

อืมนั่นเป็นรหัสยาวหนึ่งชิ้น ภาษาที่ใช้พูดมากที่สุดอีกครั้ง!

Ungolfed:

(defn subprime [n]
  (loop [x n]
    (if (> x 2)
      (recur
        (- x
          (loop [y (dec x)]
            (if (some zero? (vec (for [z (range 2 y)] (mod y z))))
              (recur (dec y)) y))))
      (quot 1 x))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.