题意

题目链接

构造一个\(n * n\)的矩阵,要求任意相邻的两个数\(a,b\),使得\(max(a,b) \% min(a,b) \not = 0\)

Sol

我的思路:

假设\(mod = 1\),那么可以在第一行放2 3 4 5 \(\dots\),第一列同理也这样放

对于任意位置\(i\),一定满足要求的一个数是a[i - 1][j] * a[i][j - 1] / __gcd(a[i - 1][j], a[i][j - 1]) + 1

然而最后的数大到上天啊。。。

标算挺巧妙的,首先把整个图黑白染色,那么同色点之间是互不影响的。

考虑构造\(mod = 1\)的矩阵。

若白点的权值确定了,那么黑点的权值应当是所有相邻白点的\(lcm\)+1,

那所有白点的权值怎么确定呢?

考虑直接用素数填充对于正对角线和负对角线上的每个点分配一个不同的素数

那么任意白点的权值为所在正对角线上的素数 乘 负对角线的素数

这样算出来最大的$a_{ij} = 414556486388264 $,满足要求

不过为啥数组要开1000才能过???


#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 1e5 + 10;
int N;
int a[1001][1001], vis[MAXN], prime[MAXN], tot;
void GetPhi() {
vis[1] = 1;
for(int i = 2; i; i++) {
if(!vis[i]) prime[++tot] = i;
if(tot == 1000) break;
for(int j = 1; j <= tot && (i * prime[j] <= 10000); j++) {
vis[i * prime[j]] = 1;
if(!(i % prime[j])) break;
}
}
}
int lcm(int x, int y) {
if(x == 0 || y == 0) return x + y;
return x / __gcd(x, y) * y;
}
main() {
GetPhi();
cin >> N;
if(N == 2) {
printf("4 7\n23 10");
return 0;
}
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
if(!((i + j) & 1)) a[i][j] = prime[(i + j) / 2] * prime[N + (i - j) / 2 + (N + 1) / 2];
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
if(!a[i][j])
a[i][j] = lcm(lcm(a[i - 1][j], a[i][j - 1]), lcm(a[i][j + 1], a[i + 1][j])) + 1;
for(int i = 1; i <= N; i++, puts(""))
for(int j = 1; j <= N; j++)
cout << a[i][j] << " ";
return 0;
}

最新文章

  1. MSSQL练习题
  2. 本地显示svg正常显示,在工程项目中无法正常显示
  3. 【A Global Line Matching Algorithm for 2D Laser Scan Matching in Regular Environment】
  4. tinyxml一个优秀的C++ XML解析器
  5. PHP基础之 string 字符串函数
  6. 解析const
  7. c# 多线程与异步调用
  8. SQL Server安装完成后3个需要立即修改的配置选项(转载)
  9. 获取Token不完整问题
  10. USACO CHAPTER 1 1.1 Ride 水题
  11. &quot;No appenders found for logger&quot; and &quot;Please configure log4j properly&quot;
  12. 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!
  13. Oracle的安装问题
  14. 【Java学习笔记之十四】Java中this用法小节
  15. mybatis_SQL缓存(5)
  16. linux下iptables配置模板
  17. 封装好的MD5加密
  18. 大数据入门第十二天——sqoop入门
  19. 【Android】Scroller分析
  20. C++MFC编程笔记day05 文档类-单文档和多文档应用程序

热门文章

  1. 数据结构7: 循环链表(约瑟夫环)的建立及C语言实现
  2. C. The Fair Nut and String 递推分段形dp
  3. Unity组件
  4. JavaScript权威指南--立即执行函数
  5. 六度分离 (folyd算法)
  6. Oracle SQL优化规则详解
  7. 初识 iOS 自动化测试框架 WebDriverAgent
  8. JWT(JSON Web Token)原理简介
  9. chrome浏览器解决 跨域调试问题
  10. java多线程(四)