题意:构造一个 n*n 的矩阵 使矩阵每一个数都不是素数,每行每列的和均为素数。
简单构造题,只需把矩阵中的每个数赋为1,改变对角线位置的元素(i==j)要求:本身不是素数,行/列和为素数。
(水题,直接从n开始向上枚举)
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<string.h>
#include<string>
#include<math.h>
#define INF 0x7fffffff
#define IOS; {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);}
#define debug(x) {cout<<"<<<<"<<(x)<<endl;}
#define print(x) {cout<<(x)<<endl;}
const int N = 1e5+5;
typedef long long ll;
using namespace std;
ll a[N];
bool isPrime_2(int num)
{
int tmp=sqrt(num);
for(int i=2;i<=tmp;i++)
if(num%i==0)
return 0;
return 1;
}
int main() {
IOS;
int t;cin>>t;
while(t--)
{
int n;
cin>>n;
int tt=n;
while(isPrime_2(tt)||!isPrime_2(tt+n-1))
tt++;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)
cout<<tt<<" ";
else
cout<<1<<" ";
}
cout<<endl;
}
}
return 0;
}