Sàng Eratosthenes, Từng bước


15

Cho một số N , vẽ một trái thẳng hàng N x N bảng số, để lại 1 khoảng trống (như là một không gian) (Tôi sẽ hiển thị sơ đồ với N = 5)

   2  3  4  5
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Công việc của bạn là xây dựng Sàng của Eratosthenes, từng bước một. Đầu tiên, bắt đầu bằng 2. Đó là số nguyên tố, vì vậy hãy để nó ở đó và thay thế tất cả các số khác chia hết cho 2 bằng số khoảng trắng thích hợp.

   2  3     5
   7     9    
11    13    15
   17    19   
21    23    25

Tiếp theo, đi đến số chưa in tiếp theo ( 3trong trường hợp này) và làm tương tự.

   2  3     5
   7          
11    13      
   17    19   
      23    25

Và như vậy, cho đến khi bạn đạt đến N .

Trước tiên, bạn cần in lưới hoàn chỉnh và mỗi khi bạn đến một số mới, hãy in bảng với bội số đã bị xóa. Hãy chắc chắn rằng bạn in một dòng trống ở giữa!

Ví dụ

Văn bản trong ngoặc đơn ()chỉ để tham khảo, bạn không cần phải in nó

N = 2:

  2 (complete grid)
3 4

  2 (remove multiples of 2)
3  

N = 3:

  2 3 (complete grid)
4 5 6
7 8 9

  2 3 (remove multiples of 2)
  5  
7   9

  2 3 (remove multiples of 3)
  5  
7    

Hãy nhớ rằng, đây là , vì vậy mã có số byte nhỏ nhất sẽ thắng.


Thông thường đối với một N × N rây bạn ngừng sàng sau khi N .
Neil

1
Ví dụ, nếu N=10, 100không phải là số nguyên tố, vì vậy sẽ bị xóa tại một số điểm. Tất cả các số phải được đệm thành 3 ký tự vì 100có 3 chữ số?
mbomb007

4
Tại sao bạn lại để lại số thứ tự?
Dennis

2
Các dòng mới có được chấp nhận?
Dennis

2
Các lưới tích hợp có được phép không? Đầu ra sẽ trông giống hệt với ví dụ trong bài, nhưng sẽ không phải là một chuỗi.
JungHwan Min

Câu trả lời:


7

Thạch , 34 byte

Ṿ€“1“ ”ys³G
>®i©1ḍoṛ®¦
²R;1©ÇÐĿÑ€Y

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

²R;1©ÇÐĿÑ€Y  Main link. Argument: n (integer)

²            Yield n².
 R           Range; yield [1, ..., n²].
   1©        Yield 1 and copy it to the register.
  ;          Append 1 to the range.
             This is the initial state. Let's call it S.
     ÇÐĿ     Call the second helper link until the results are no longer unique.
             This returns all unique results as an array.
        Ṅ€   Call the first helper link on each result.
          Y  Join, separating by linefeeds.

>®i©1ḍoṛ®¦   Second helper link. Argument: S (state)

>®           Compare all integers in S with the value in the register.
  i 1        Find the first index of 1 (i.e., the first number that is greater
             than the register.
   ©         Copy the index to the register. Let's call the index p.
     ḍ       Test all numbers in S for divisibility by p. This yield 1 for
             multiples of p, 0 otherwise.
      o      Logical OR; replace 0's with the corresponding values of S.
       ṛ®¦   Replace the 0 at index p with the corresponding element of S (p).
             For the purposes of the explanation, S is now the updated state.

Ṿ€“1“ ”ys³G  First helper link. Argument: A (array)

Ṿ€           Uneval each; convert all integers in A into strings.
  “1“ ”y     Replace each string "1" with the string " ".
        s³   Split into chunks of length n (command-line argument).
          G  Grid; separate row items by spaces (left-padding since the row items
             are strings), the rows themselves by linefeeds.

5

Perl, 250 243 231 202 157 byte

$n=<>;@a=0..($e=$n*$n);$a[1]=$";for$p(1..$n){next if!$a[$p];for(1..$e){$a[$_]=""if!($p~~[(1,$_)]||$_%$p);printf"%-*s",1+length$e,$a[$_];say""if!($_%$n)}say}

Kiểm tra golf trực tuyến hiện tại! (hãy chắc chắn để chạy như perl -M5.010 main.pl)

Hai dòng mới theo nghĩa đen, mỗi dòng tiết kiệm 1 byte thay cho \ n.

Đầu ra mẫu (đầu vào của 7):

   2  3  4  5  6  7  
8  9  10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30 31 32 33 34 35 
36 37 38 39 40 41 42 
43 44 45 46 47 48 49 

   2  3     5     7  
   9     11    13    
15    17    19    21 
   23    25    27    
29    31    33    35 
   37    39    41    
43    45    47    49 

   2  3     5     7  
         11    13    
      17    19       
   23    25          
29    31          35 
   37          41    
43          47    49 

   2  3     5     7  
         11    13    
      17    19       
   23                
29    31             
   37          41    
43          47    49 

   2  3     5     7  
         11    13    
      17    19       
   23                
29    31             
   37          41    
43          47       

Tôi khẳng định tôi đã không chơi golf rất giỏi, vì vậy khi về đến nhà tôi sẽ xem xét lại để xem tôi có thể cạo râu được bao nhiêu.

Chỉnh sửa 1: -7 byte (thay đổi "print sprintf" thành "printf" rõ ràng)

Chỉnh sửa 2: Đã lưu 12 byte bằng cách sử dụng $ d một cách rõ ràng ở một nơi được gọi thay vì tạo một biến riêng biệt, bằng cách kết hợp một số khai báo và bằng cách loại bỏ một trong các điều kiện của tôi cho nextcâu lệnh bên trong foreachvòng lặp đầu tiên bằng cách thêm một khoảng trắng ở nơi khác . Thêm 29 byte đã được đánh ra bằng cách làm lại hai vòng lặp thành một vòng lặp, loại bỏ hai khai báo biến và biến các unlesscâu lệnh thành câu lệnh if-not. Khai báo my$e=$n*$n;sau đó thay thế ba trường hợp của $ n * $ n bằng $ e (cho phép tôi thả một paren cho một trong số chúng) hóa ra mang lại ± 0 byte, nhưng dù sao tôi vẫn giữ nó.

Chỉnh sửa 3: Nhờ @Dada, 40 byte khác đã được phát ra (khai báo biến, 'foreach' trở thành 'cho', ẩn $ _ ở một số vị trí và cắt giảm kích thước câu lệnh printf). Thêm 1 byte đã bị loại bỏ bằng cách chuyển if!($c%$p||$c==$p||$p==1)thành if!($p~~[(1,$_)]||$_%$p). Thật không may, [] xung quanh mảng là cần thiết, bởi vì toán tử smartmatch ~ ~ vẫn đang thử nghiệm và dường như không hoạt động đúng trên các mảng thực tế, nhưng thay vào đó, nó hoạt động trên các tham chiếu đến chúng. Thêm 4 byte đã bị xóa bằng cách xóa hai dấu chấm phẩy và một bộ dấu ngoặc kép trống sau dấu cuối cùng say.


1
Đó là một khởi đầu tốt, nhưng bạn có thể chơi nó nhiều hơn nữa. Đừng khai báo các biến (vì vậy đừng sử dụng my). Sử dụng -pcờ để có Nbên trong $_thay vì sử dụng $n=<>. Viết forthay vì foreach(hướng dẫn này là tương đương). Bỏ dấu ngoặc đơn xung quanh điều kiện của ifvị trí ở vị trí sửa đổi câu lệnh (ví dụ if!$c%$nthay vì if(!$c%$n). Không cần dấu ngoặc đơn để khởi tạo @a: @a=0..$e. Bạn có thể thả vào forbiến và $_wiil được sử dụng thay thế. Viết printf"%*s",1+length$e,$a[$c](tài liệu `` sprintf` để biết chi tiết về điều đó *)
Dada

1
Sử dụng $"thay vì " ". say""thay vì print"\n"(bạn có một dòng mới trong mã của mình nhưng tôi không thể viết nó trong bình luận) (bạn sẽ thêm để thêm -M5.010vào dòng lệnh, nhưng điều đó không được tính vào số byte). Bạn có thể có thể sử dụng 0..$e=$n*$nđể lưu một byte khi khởi tạo $e. Hãy xem các mẹo chơi golf perl , nó chứa rất nhiều lời khuyên hữu ích. Nhưng thật tuyệt khi thấy một tay golf perl mới, xin chào mừng! :) (và tha thứ cho lỗi chính tả của tôi, tôi có thể đã viết nhận xét trước đó quá nhanh)
Dada

@Dada Cảm ơn lời khuyên của bạn! Tôi không rành lắm về việc chạy mã trên dòng lệnh (tôi có xu hướng chạy nó dưới dạng tệp) nhưng tôi sẽ xem xét cách thực hiện theo cách đó. Đối với if!$c%$n, các! toán tử được ưu tiên hơn toán tử%, vì vậy về mặt kỹ thuật, điều này sẽ trở if((!$c)%$n)thành sai đối với bất kỳ thứ gì ngoài $ c = 0 (mà tôi không muốn). Đối với những lời khuyên khác của bạn, tôi sẽ xem những gì tôi có thể làm! Cảm ơn rât nhiều!
Gabriel Benamy

Bạn không cần phải chạy nó trên dòng lệnh, những sửa đổi đó sẽ hoạt động nếu bạn đặt chúng trong một tệp. Xin lỗi vì !, tôi đã không vào máy tính để kiểm tra. Tôi nghĩ bạn có thể giảm xuống 160 ký tự.
Dada

5

PHP, 155 byte

for(;$d++<$n=$argv[1];$x&$a[$d]<1?:print"\n".chunk_split(join($a),$n*$l))for($i=$d*$x=$d>1;$n**2>=$i+=$d;)$a[$i]=str_pad($x|$i<2?"":$i,$l=strlen($n**2)+1);

@Crypto -3 Byte Cảm ơn bạn @Titus -6 Byte Cảm ơn bạn

Thử nó

Lần đầu tiên tôi sử dụng in trong điều kiện vòng lặp sau

Phá vỡ

for(;$d++<$n=$argv[1];
$x&$a[$d]<1?:print"\n".chunk_split(join($a),$n*$l))
#after loop print the grid if $d = 1 or is prime
for($i=$d*$x=$d>1;$n**2>=$i+=$d;)
$a[$i]=str_pad($x|$i<2?"":$i,$l=strlen($n**2)+1);
#fills the array at first run and replace positions with space in the next runs 

Phiên bản trước 174 byte

for(;$d++<=$n=$argv[1];!($d<2||$a[$d]>0)?:print chunk_split(join($a),$n*$l)."\n")for($i=$d<2?1:2*$d;$i<=$m=$n**2;$i+=$d)$a[$i]=str_pad($d<2?($i<2?"":$i):" ",$l=strlen($m)+1);  

1
-3 byte thay đổi tình trạng này: !($d<2||$a[$d]>0)=>$d>1&&$a[$d]<1
Crypto

1
-1 byte sử dụng thủ thuật này để có được độ dài số nguyên $l=strlen($m)+1đến$l=log10($m)+2
Crypto

1
-3 byte: $i=$d*$x=$d>1thay vì $i=$d<2?0:$d$xcho hai lần xuất hiện khác của$d>1
Titus

1
-2 byte: $n*$n>=$i+=$dthay vì ($i+=$d)<=$m=$n**2$n*$ncho sự xuất hiện khác của$m
Titus

1
-1 byte: dẫn đầu thay vì theo dõi dòng mới
Titus

3

Groovy, 201 195 191 byte

{n->a=(1..n*n).toArray();y={a.collect{(it?"$it":"").padRight((""+n*n).size())}.collate(n).each{println it.join(" ")}};a[0]=0;y(a);(2..n).each{b->(b+1..n*n).each{if(it%b==0){a[it-1]=0}};y(a)}}

Đây là một cụm tuyệt đối ... Việc căn lề trái đã giết chết số byte của tôi. Nhưng này, nó hoạt động. Đây là đầu ra cho 4:

   2  3  4 
5  6  7  8 
9  10 11 12
13 14 15 16

   2  3    
5     7    
9     11   
13    15   

   2  3    
5     7    
      11   
13         

   2  3    
5     7    
      11   
13         

Ung dung:

{
    n->
    a = (1..n*n).toArray();                           // Create initial array.
    y = {                                             // Createa  printing utility closure.
        a.collect {                                   // Create an array collection of...
            (it ? "$it":"").padRight((""+n*n).size()) // If 0, store "", else store number & right pad it.
        }.collate(n).each{                            // Collate by n (break into nxn grid).
            println it.join(" ")                      // print each separated by spaces.
        }
    };
    a[0]=0;                                           // Remove first element.
    y(a);                                             // Print initial status.
    (2..n).each{                                      // From 2 to n...
        b->
        (b+1..n*n).each{                              // From current number + 1 to end of grid...
            if(it%b==0){                              // If current grid position is divisible...
                a[it-1]=0                             // Replace with 0.
            }
        }
        y(a)                                          // Print it.
    }        
}

Là một tài tài, hay nói, qua, qua, qua một khác, qua giữ, qua, qua một khác, qua, qua, qua, khi khác mới, khác mới, khi khác mới đăng, mới, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng cam cam


2
Điều này không nhìn trái với tôi.
Dennis

Đã sửa ... Tôi chỉ không có cơ hội chỉnh sửa nó cho đến bây giờ ...
Bạch tuộc ma thuật Urn

@Dennis Tôi thực sự đã thấy những bình luận của bạn và nghĩ rằng anh ấy đã thay đổi nó dựa trên bình luận của bạn.
Bạch tuộc ma thuật Urn

3

Perl, 115 114 113 112 byte

Bao gồm +1 cho -a

Chạy với số đầu vào trên STDIN:

perl -M5.010 sieving.pl <<< 7

sieving.pl:

#!/usr/bin/perl -a
$_*=$_;$a.="$_"x$|++|$"x"@+".($_%"@F"?$":$/)for/\d+/..$_;*_=a;s^^$$_++||say;$.++;s//$&%$.|$&==$.?$&:$&&$_/eg^eg

Cần một perl đủ gần đây để -angụ ý -n. Nếu perl của bạn quá cũ, hãy thêm-n tùy chọn.

In một dòng mới được cho phép.


2

Python 2, 199 202 201 byte

+3 byte (Tôi không dừng lại sớm)
-1 byte nhờ @Oliver (bỏ lỡ một khoảng trắng)

def f(n,p={()}):
 m=n*n;g=['']+[[i,''][any(i>n and i%n<1for n in p)]for i in range(2,m+1)];x=min(set(g)-p);i=0
 while i<m+n:print' '.join('%%%ds'%-len(`m`)%v for v in g[i:i+n]);i+=n
 if x<=n:f(n,p|{x})

thay thế


1
Bạn có thể xóa khoảng trắng giữa 1for
Oliver Ni

2

JavaScript (ES6), 190 189 byte

In trực tiếp lên bàn điều khiển.

f=(w,k=1,a=[...Array(w*w)].map((_,n)=>n&&n+1))=>k++<=w&&(k==2|a[k-2]&&console.log(a.map((n,x)=>`${n||''}    `.slice(0,`_${w*w}`.length)+(++x%w?'':`
`)).join``),f(w,k,a.map(n=>n==k|n%k&&n)))

Bản giới thiệu


2

Hàng loạt, 464 byte

@echo off
set/an=%1,s=n*n,t=s,c=1
set p=
:l
set/ac+=1,t/=10
set p= %p%
if %t% gtr 0 goto l
for /l %%i in (1,1,%1)do call:i %%i
exit/b
:i
set l=
set/af=0
call:f %1 %1
if %f%==0 for /l %%j in (1,1,%s%)do call:j %1 %%j
exit/b
:j
set/am=%2,f=!(m-1),g=%2%%n
call:f %1 %2
if %f% gtr 0 set m=
set m=%m% %p%
call set l=%%l%%%%m:~0,%c%%%
if %g%==0 echo(%l%&set l=
if %2==%s% echo(
exit/b
:f
for /l %%l in (2,1,%1)do if %%l neq %2 set/af+=!(%2%%%%l)

Điều này có phần tốn công. Giải thích: Bắt đầu bằng cách bình phương nđể có thể tính chiều rộng cột mong muốn cvà số lượng đệm phù hợp p, sử dụng vòng lặp :l. Các vòng ngoài từ 1để nsau đó chạy một lần cho mỗi lưới, gọi chương trình con :i. Đầu tiên giá trị được kiểm tra để xem nó là 1 hay số nguyên tố; nếu không thì lưới đó bị bỏ qua. Các vòng lặp bên trong từ 1đến . Mỗi giá trị được kiểm tra để xem liệu đó có phải là một trong những số nguyên tố được tìm thấy cho đến nay hay không, nếu không có số nguyên tố nào được tìm thấy cho đến nay chia nó. Nếu vậy thì giá trị được nối với bộ đệm đầu ra, sau đó được đệm vào chiều rộng cột mong muốn. Bộ đệm được in và xóa mỗin*n sau đó xử lý các hàng và cột của lưới điện, gọi chương trình con:jncác dòng và một dòng trống bổ sung được thêm vào cuối lưới. Các :fnhãn biểu thị subroutine yếu tố kiểm tra; f (x, y) thêm 1 vào fcho mỗi số nguyên giữa 2 và xchia y, không bao gồm ychính nó.


2

R, 195 191 185 204 byte

f=function(N){a=b=1:N^2;i=1;a[1]="";S=sprintf;while(i<=N){for(j in b)cat(a[j]<-S(S("%%-%is",nchar(N^2)),if(j==i|j%%i|i<2)a[j]else ""),if(j%%N)"" else"\n");cat("\n");i=(grep("\\d",a[-(1:i)],v=T)[1]:1)[1]}}

Cảm ơn @Billywob đã lưu thêm 6 byte!

Thụt lề, với dòng mới:

f=function(N){
   a=b=1:N^2 #Initial array
   i=1 #Turn counter
   a[1]="" #1 never shown
   S=sprintf
   while(i<=N){
      for(j in b)
         cat(a[j]<-S(S("%%-%is",nchar(N^2)),if(j==i|j%%i|i<2)a[j]else ""),
             if(j%%N)"" else"\n") #Newline at end of row
      cat("\n") #Newline between turns
      i=(grep("\\d",a[-(1:i)],v=T)[1]:1)[1] #Select next prime as next i
   }
}

Sử dụng:

> f(2)
  2 
3 4 

  2 
3   

> f(3)
  2 3 
4 5 6 
7 8 9 

  2 3 
  5   
7   9 

  2 3 
  5   
7     

> f(9)
   2  3  4  5  6  7  8  9  
10 11 12 13 14 15 16 17 18 
19 20 21 22 23 24 25 26 27 
28 29 30 31 32 33 34 35 36 
37 38 39 40 41 42 43 44 45 
46 47 48 49 50 51 52 53 54 
55 56 57 58 59 60 61 62 63 
64 65 66 67 68 69 70 71 72 
73 74 75 76 77 78 79 80 81 

   2  3     5     7     9  
   11    13    15    17    
19    21    23    25    27 
   29    31    33    35    
37    39    41    43    45 
   47    49    51    53    
55    57    59    61    63 
   65    67    69    71    
73    75    77    79    81 

   2  3     5     7        
   11    13          17    
19          23    25       
   29    31          35    
37          41    43       
   47    49          53    
55          59    61       
   65    67          71    
73          77    79       

   2  3     5     7        
   11    13          17    
19          23             
   29    31                
37          41    43       
   47    49          53    
            59    61       
         67          71    
73          77    79       

   2  3     5     7        
   11    13          17    
19          23             
   29    31                
37          41    43       
   47                53    
            59    61       
         67          71    
73                79       

> f(12)
    2   3   4   5   6   7   8   9   10  11  12  
13  14  15  16  17  18  19  20  21  22  23  24  
25  26  27  28  29  30  31  32  33  34  35  36  
37  38  39  40  41  42  43  44  45  46  47  48  
49  50  51  52  53  54  55  56  57  58  59  60  
61  62  63  64  65  66  67  68  69  70  71  72  
73  74  75  76  77  78  79  80  81  82  83  84  
85  86  87  88  89  90  91  92  93  94  95  96  
97  98  99  100 101 102 103 104 105 106 107 108 
109 110 111 112 113 114 115 116 117 118 119 120 
121 122 123 124 125 126 127 128 129 130 131 132 
133 134 135 136 137 138 139 140 141 142 143 144 

    2   3       5       7       9       11      
13      15      17      19      21      23      
25      27      29      31      33      35      
37      39      41      43      45      47      
49      51      53      55      57      59      
61      63      65      67      69      71      
73      75      77      79      81      83      
85      87      89      91      93      95      
97      99      101     103     105     107     
109     111     113     115     117     119     
121     123     125     127     129     131     
133     135     137     139     141     143     

    2   3       5       7               11      
13              17      19              23      
25              29      31              35      
37              41      43              47      
49              53      55              59      
61              65      67              71      
73              77      79              83      
85              89      91              95      
97              101     103             107     
109             113     115             119     
121             125     127             131     
133             137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
49              53                      59      
61                      67              71      
73              77      79              83      
                89      91                      
97              101     103             107     
109             113                     119     
121                     127             131     
133             137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
                53                      59      
61                      67              71      
73                      79              83      
                89                              
97              101     103             107     
109             113                             
121                     127             131     
                137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
                53                      59      
61                      67              71      
73                      79              83      
                89                              
97              101     103             107     
109             113                             
                        127             131     
                137     139                     

Thật tuyệt, tôi không bao giờ có thể tìm ra cách in ma trận đúng để tuân thủ các yêu cầu về tiền mã hóa mà không bao giờ để lại việc biện minh cho chúng. Bạn có thể lưu một vài byte mặc dù. Toán tử lũy thừa ^là toán tử duy nhất không được vector hóa khi tạo các chuỗi sử dụng :có nghĩa là bạn có thể sử dụng ví dụ 1:2^2để lấy 1 2 3 4. Thứ hai, nếu bạn xác định, a=b=1:n^2sau này bạn có thể sử dụng for(j in b)thay vì xác định một vectơ khác để lặp lại. Nên tiết kiệm cho bạn một vài byte.
Billywob

Thật! Cảm ơn! Không bao giờ có thể nhớ thứ tự chính xác của quyền ưu tiên nhà điều hành ...
plannapus

Tại sao có ba khoảng cách giữa các số trong f (2) và f (3) và hai khoảng trắng trong f (9)? Nó phải luôn luôn là một không gian.
Oliver Ni

Ồ đúng rồi, tôi thiết lập 3 ký tự làm chuẩn vì tôi đã thử nghiệm với N = 10, hãy để tôi sửa nó.
plannapus

1

J, 125 byte

p=:3 :'}."1,./('' '',.>)"1|:(-%:#y)]\((a:"_)`(<@":)@.*)"+y'
3 :'p@>~.|.(]*](*@|~+.=)({[:I.*){])&.>/\.(<"+i.-y),<]`>:@.*i.*:y'

Điều này là rõ ràng, không ngầm J, nhưng nên có một cách để chơi golf ngầm.

Sử dụng

   p =: 3 :'}."1,./('' '',.>)"1|:(-%:#y)]\((a:"_)`(<@":)@.*)"+y'
   f =: 3 :'p@>~.|.(]*](*@|~+.=)({[:I.*){])&.>/\.(<"+i.-y),<]`>:@.*i.*:y'
   f 2
  2
3 4

  2
3  
   f 3
  2 3
4 5 6
7 8 9

  2 3
  5  
7   9

  2 3
  5  
7    
   f 4
   2  3  4 
5  6  7  8 
9  10 11 12
13 14 15 16

   2  3    
5     7    
9     11   
13    15   

   2  3    
5     7    
      11   
13         
   f 5
   2  3  4  5 
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

   2  3     5 
   7     9    
11    13    15
   17    19   
21    23    25

   2  3     5 
   7          
11    13      
   17    19   
      23    25

   2  3     5 
   7          
11    13      
   17    19   
      23      

1

Toán học, 133 byte

Grid[#,Alignment->Left]~Print~"
"&/@FoldList[#/.(##|1&@@(2~r~i#2)->Null)&,(r=Range)[i=#^2]~Partition~#/.Rule[1,],Prime@r@PrimePi@#];&

1

PHP, 155 150 147 145 142 140 byte

for(;$k++<$n=$argv[1];)if($k<2||$a[$k]){for($i=0;$i++<$n*$n;)echo$a[$i]=$k>1?$i>$k&$i%$k<1?"":$a[$i]:($i<2?"":$i),"\t\n"[$i%$n<1];echo"\n";}

phá vỡ

for(;$k++<$n=$argv[1];)
    if($k<2||$a[$k])    // if first iteration or number unprinted ...
{
    for($i=0;$i++<$n*$n;)
        echo
            $a[$i]=$k>1
                ?$i>$k&$i%$k<1
                    ?""         // sieve
                    :$a[$i]     // or copy value
                :($i<2?"":$i)   // first iteration: init grid
            ,
            // append tab, linebreak every $n columns
            "\t\n"[$i%$n<1]
        ;
    // blank line after each iteration
    echo"\n";
}

1
$a[$i]="";thay vì unset($a[$i]);nên tiết kiệm 4 byte
Jörg Hülsermann

$i%$k<1thay vì !($i%$k)lưu một Byte
Jörg Hülsermann
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.