显然 \(1\) 不是质数,除二外偶数不是质数。
然后分类讨论
对于 \(m\) 为偶数,构造
\[\begin{bmatrix} 1 & 2 & 3 & \cdots & m \\ m+1 & m+2 & m+3 & \cdots & 2m \\ &&\cdot\\ &&\cdot\\ &&\cdot\\ (n-1)m+1 & (n-1)m+2 & (n-1)m+3 & \cdots & nm \\ \end{bmatrix} \]则列增量为 \(1\),行增量为 \(m\)。
对于 \(n\) 为偶数,构造
\[\begin{bmatrix} 1 & n+1 & 2n+1 & \cdots & (m-1)n+1 \\ 2 & n+2 & 2n+2 & \cdots & (m-1)n+2 \\ &&\cdot\\ &&\cdot\\ &&\cdot\\ n & 2n & 3n & \cdots & nm \\ \end{bmatrix} \]则行增量为 \(1\),列增量为 \(n\)。
对于 \(n\)、\(m\) 均为奇数的情况,循环移位
\[\begin{bmatrix} 1 & 2 & 3 & \cdots & m-1 & m \\ m+2 & m+3 & m+4 & \cdots & 2m & m+1 \\ 2m+3 & 2m+4 & 2m+5 & \cdots & 2m+1 & 2m+2 \\ &&\cdot\\ &&\cdot\\ &&\cdot\\ \end{bmatrix} \]行增量为 \(1\) 或 \(m-1\),列增量为 \(m+1\) 或 \(1\)。
无了。
#include<bits/stdc++.h>
using namespace std;
int n,m;
int T;
signed main()
{
cin>>T;
while(T--)
{
cin>>n>>m;
if(m % 2 == 0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<((i-1)*m+j)<<" ";
}
cout<<'\n';
}
}
else if(n % 2 == 0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<(i + (j-1) * n)<< " ";
}
cout<<'\n';
}
}
else
{
for(int i=1;i<=n;i++)
{
int op = (i-1) % m + 1;
for(int j=op;j<=m;j++)
{
cout<<((i-1) * m + j)<<" ";
}
for(int j=1;j<op;j++)
{
cout<<((i-1) * m + j)<<" ";
}
cout<<'\n';
}
}
cout<<'\n';
}
}
标签:bmatrix,cdot,题解,cdots,CF1838C,&&,增量,2m
From: https://www.cnblogs.com/2021cjx-akioi/p/17810665.html