尽可能固定矩阵中的元素,只求个别元素,前n-1列为 {k,1,,,,,1},其中k为使n-1+k为素数的合数,最后一列为{m,k,k,,,k}其中m为使(n-1)*k+m为素数的合数,求出m和k即可,易验证符合题意
下面为n=5的矩阵
k k k k m
1 1 1 1 k
1 1 1 1 k
1 1 1 1 k
1 1 1 1 k
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int const N = 110;
int t,n;
int a[N][N];
bool is_prime(int x) // 判定质数
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i ++ )
if (x % i == 0)
return false;
return true;
}
int main()
{
scanf("%d", &t);
while (t -- ){
scanf("%d", &n);
int k = 1;
while( !(is_prime(k+n-1) && !is_prime(k))) k++;
int m = 1;
while( !(is_prime((n-1)*k+m) && !is_prime(m) ) ) m++;
for (int i = 0; i < n; i ++ ) a[0][i] = k;
a[0][n-1] = m;
for (int i = 1; i < n; i ++ ){
for (int j = 0; j < n-1; j ++ ){
a[i][j] = 1;
}
a[i][n-1] = k;
}
for (int i = 0; i < n; i ++ ){
for (int j = 0; j < n; j ++ ){
cout<<a[i][j]<<' ';
}
cout<<endl;
}
}
}
我的竟然和你的差不多qaq