(大致是官方题解翻译加上一点自己的理解)
如果我们可以找到一个数字 p p p 满足可以构造出一个 p 2 ∗ p 2 p^2 *p^2 p2∗p2 的大正方形符合题目条件
那么我们对于一个询问 可以截取这个正方形的左上角
接下来我们考虑构造一个小方形 大小是 p ∗ p p*p p∗p
对于小方形 B k B_k Bk
我们在位置 ( i , j ) (i,j) (i,j) 填 ( i + j + k ) m o d p (i+j+k)mod~p (i+j+k)mod p (注意 这里所有的 i , j i,j i,j都是 [ 0 , p − 1 ] [0,p-1] [0,p−1] 的)
那么我们把大正方形用小正方形填充
具体说 把大正方形划分成 p ∗ p p*p p∗p 的格子(单位格长 p p p)
那么我们在 P i , j P_{i,j} Pi,j 放 B i ∗ j m o d p B_{i*j~mod~p} Bi∗j mod p
接着我们证明对于怎么样的 p p p 可以满足题目要求,以及对于这样的 p p p 为什么这种构造合法
首先 在一个/两个小正方形里 没法满足要求(一个正方形一行/一列内没有两个相同元素)
我们设左上 右下的坐标分别是 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2)
假设分别属于 a , b , c , d a,b,c,d a,b,c,d 四个小正方形里
那么
x
1
+
y
1
+
a
≡
x
2
+
y
1
+
c
(
m
o
d
p
)
x1+y1+a \equiv x2+y1+c~(mod~p)
x1+y1+a≡x2+y1+c (mod p)
x
2
−
x
1
≡
a
−
c
x2-x1 \equiv a-c
x2−x1≡a−c
同理可得
x 2 − x 1 ≡ b − d x2-x1 \equiv b-d x2−x1≡b−d
因此
a − c ≡ b − d ( m o d p ) a-c \equiv b-d(mod~p) a−c≡b−d(mod p)
假设他们在大正方形里, a = ( X 1 , Y 1 ) , d = ( X 2 , Y 2 ) a=(X_1,Y_1),d=(X_2,Y_2) a=(X1,Y1),d=(X2,Y2)
那么 X 1 Y 1 − X 2 Y 1 = X 1 Y 2 − X 2 Y 2 X_1Y_1-X_2Y_1=X_1Y_2-X_2Y_2 X1Y1−X2Y1=X1Y2−X2Y2
所以 ( X 2 − X 1 ) ( Y 2 − Y 1 ) ≡ 0 ( m o d p ) (X_2-X_1)(Y_2-Y_1) \equiv 0 \pmod p (X2−X1)(Y2−Y1)≡0(modp)
那么 如果 p p p 是一个质数 则 p p p 和左式一定没有公因数
因此上式不可能成立
所以 p p p 是质数时 则有以上构造
那么因为要满足截取 n = 500 n=500 n=500
所以当 p p p 取23<25(题目要求的上限)
可以构造出所有解