Hãy chia một mạng tinh thể


8

Giả sử chúng ta có một mạng n × n ; sau đó chúng ta có thể chia mạng thành hai phần bằng cách vẽ một đường thẳng qua mạng. Tất cả mọi thứ ở một bên của dòng là trong một bộ và mọi thứ khác trong một bộ khác.

Có bao nhiêu cách chúng ta có thể phân chia mạng theo cách?

Ví dụ: hãy lấy một mạng 2 × 2 :

. .
. .

Chúng ta có thể tạo 2 phân vùng chia mạng thành một nửa như vậy:

× ×    × o
o o    × o

Chúng tôi cũng có thể phân vùng ra từng góc:

× o    o ×    o o    o o
o o    o o    × o    o ×

Cuối cùng, chúng ta có thể đặt tất cả các điểm trong một phân vùng bằng cách thiếu hoàn toàn mạng tinh thể:

× ×
× ×

Điều này làm cho tổng cộng 7 phân vùng. Lưu ý rằng phân vùng sau không hợp lệ vì không thể thực hiện được bằng một đường thẳng duy nhất.

× o
o ×

Đây là một mạng 3 × 3

. . .
. . .
. . .

Có 4 phân vùng hoàn toàn ngang hoặc dọc

× × ×    × × ×    × o o    × × o
× × ×    o o o    × o o    × × o
o o o    o o o    × o o    × × o

Có 4 phân vùng góc

× o o    o o ×    o o o    o o o    
o o o    o o o    o o o    o o o
o o o    o o o    o o ×    × o o

Có 4 phân vùng góc lớn hơn

× × o    o × ×    o o o    o o o
× o o    o o ×    o o ×    × o o
o o o    o o o    o × ×    × × o

Có 8 phân vùng góc một phần

× × o    o × ×    o o ×    o o o    o o o    o o o    o o o    × o o
o o o    o o o    o o ×    o o ×    o o o    o o o    × o o    × o o
o o o    o o o    o o o    o o ×    o × ×    × × o    × o o    o o o

Có 8 hiệp sĩ di chuyển phân vùng

× × o    o × ×    × × ×    o o o    o o ×    × o o    o o o    × × ×
× o o    o o ×    o o ×    o o ×    o o ×    × o o    × o o    × o o
× o o    o o ×    o o o    × × ×    o × ×    × × o    × × ×    o o o

Và có một phân vùng

× × ×
× × ×
× × ×

Điều đó làm cho tổng số 29 phân vùng.

Bài tập

Cho một số n làm đầu vào, xuất số lượng phân vùng có thể được tạo theo kiểu n × n này mạng tinh thể .

Đây là một câu hỏi vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.

Các trường hợp thử nghiệm

Dưới đây là 34 phép lịch sự đầu tiên của OEIS:

1, 7, 29, 87, 201, 419, 749, 1283, 2041, 3107, 4493, 6395, 8745, 11823, 15557, 20075, 25457, 32087, 39725, 48935, 59457, 71555, 85253, 101251, 119041, 139351, 161933, 187255, 215137, 246691, 280917, 319347, 361329, 407303

OEIS A114043


Bạn có thể vui lòng thêm một ví dụ với một mạng lớn hơn 2 × 2 không?
Erik the Outgolfer 20/07/17

@EriktheOutgolfer Đã thêm.
Ad Hoc Garf Hunter

Câu trả lời:


2

JavaScript (ES6), 113 111 byte

Đã lưu 2 byte nhờ guest44851

Chỉ số 0.

n=>[...Array(n)].map((_,i,a)=>a.map((_,j)=>x+=(g=(a,b)=>b?g(b,a%b):a<2&&(n-i-1)*(n-j))(i+1,++j)),x=n*++n)|x+x+1

Dựa trên công thức được đề cập trên OEIS:

Đặt V (m, n) = Sum_ {i = 1..m, j = 1..n, gcd (i, j) = 1} (m + 1-i) (n + 1-j)
a (n +1) = 2 (n 2 + n + V (n, n)) + 1

Bản giới thiệu


Bạn có thể thay thế a==1&&bằng a<2&&.

@ guest44851 Vâng, cái này hoạt động. :-) Cảm ơn!
Arnauld

Bạn cũng có thể thay thế &&x+x+1bằng |x+x+1.


1

Thạch , 14 byte

ạþ`Fgþ`FỊS_²H‘

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

Giải trình

ạþ`Fgþ`FỊS_²H‘  Input: integer n
ạþ`             Form the table of absolute differences on [1, 2, ..., n]
   F            Flatten
    gþ`         Form a GCD table on that
       F        Flatten
        Ị       Test if the absolute value of each is <= 1
         S      Sum (Count the number of true's)
          _     Subtract
           ²    Square of n
            H   Halve
             ‘  Increment

1

Toán học, 59 byte

2Sum[(#-i)(#-j)Boole[i~GCD~j<2],{i,#-1},{j,#-1}]+2#^2-2#+1&

lịch sự của OEIS (giống như câu hỏi)

-1 byte từ @ovs

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


1
Điều này gần như được sao chép nguyên văn từ trang OEIS
nmjcman101

3
Câu hỏi là lịch sự của OEIS và câu trả lời này cũng vậy. Một câu hỏi ban đầu sẽ có câu trả lời gốc
J42161217

3
Tôi không đồng ý với bạn, đó là lý do tại sao tôi không downvote, tôi chỉ thích sự minh bạch.
nmjcman101

4
Tôi cũng vậy! Nhưng tôi nghĩ rằng các câu hỏi OEIS là một mẹo dễ dàng để có được điểm danh tiếng dễ dàng. Đó là lý do tại sao tôi trả lời theo cách tương tự, để nêu tình huống này
J42161217

Bạn có thể thay thế ==1bằng <2 TIO .
trứng

0

Python 2, 90 byte

lambda n:4*n*n-6*n+3+4*sum((n-i)*(n-k/i)for i in range(n)for k in range(i*i)if k/i*k%i==1)
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.