将数字排列通过一些想法来排列,来发现一些新的规律。之前看到一个回型排序。
我用python写了一个,但是只有队列的行数和列数都是偶数的时候才能用,道理说,奇数也能用,但是状态不好哦,也没有去检测公式在哪里不完善。
import numpy as np
def num_d(num):
k = int(num**(0.5))
for i in range(2, k+1):
if(num % i == 0):
return True
return False
n = 8 #y
m = 8 #x
num_len = str(len(str(n*m)))
# 确定1的位置 - 逆时针:
n1 = n // 2 # y轴方向加1
m1 = m // 2+m % 2 - 1 # x轴的方向
for i in range(n): #y
for j in range(m): #x
if j - m1 > i - n1 and i - n1 > -(j - m1) :
print(('\033[1;33;40m%'+num_len+'d\033[0m') %
((2*(abs(n1-j))+1)**2 + 1 + j-i), end=' ')
elif j - m1 < i - n1 and i - n1 > -(j - m1):
print(('\033[1;34;40m%'+num_len+'d\033[0m') %
((2*(abs(n1-i))+1)**2-i+j+1), end=' ')
# 其他的都是以1的位子的x和y轴的平分线,这里是以1上面一个数的平分线,所以要做特殊处理
elif j - m1 > i - n1 + 1 and i - n1 <= -(j - m1):
print(('\033[1;35;40m%'+num_len+'d\033[0m') %
((2*(abs(n1-i)))**2+i-j), end=' ')
# 其他的都是以1的位子的x和y轴的平分线,这里是以1上面一个数的平分线,所以要做特殊处理
elif j - m1 < i - n1 and i - n1 <= -(j - m1) or(j - m1 < i - n1 + 1 and n1-i > 0):
print(('\033[1;36;40m%'+num_len+'d\033[0m') %
((2*(abs(n1-j-1)))**2+i-j), end=' ')
elif n1-i > 0:
print(('\033[1;31;40m%'+num_len+'d\033[0m') %
(2*(abs(n1-i)))**2, end=' ')
elif n1-i <= 0:
print(('\033[1;32;40m%'+num_len+'d\033[0m') %
(2*(abs(n1-i))+1)**2, end=' ')
else:
print('\033[1;30;40m5\033[0m', end=' ')
print()
# print(n1,m1)
将整个区域分成了四个,这样方便我们找规律,我将每个区域用颜色做了标记。
下面是输出的8×8的矩阵。
然后我们来看看,另外一种,我暂且命名为广度优先遍历。
核心公式就是,
当
j
>
i
时
:
n
u
m
=
j
2
+
(
i
+
1
)
当j>i时: num = j^2+(i+1)
当j>i时:num=j2+(i+1)
当
j
<
=
i
时
:
n
u
m
=
(
i
+
1
)
2
+
j
−
i
当j<=i时: num = (i+1)^2+j-i
当j<=i时:num=(i+1)2+j−i
我用python打印的html的方式查看结果:
import numpy as np
def num_d(num):
k = int(num**(0.5))
for i in range(2, k+1):
if(num % i == 0):
return True
return False
n = 100
m = 100
mutrix_fd = open('mutrix.html', 'w')
max_str_len = (len(str((n*m)**0.5))+1)*8
mutrix_fd.write('''
<html>
<head>
<title>我的第一个 HTML 页面</title>
<style type="text/css">
.num1{
display:inline;
color:#000;
width: %dpx;
height:25px;
// background-color:#999;
margin:0 auto;
float:left;
}
.num2{
display:inline;
// background-color:#f00;
width:%dpx;
height:25px;
float:left;
}
.num3{
display:inline;
// background-color:#ff0;
width:%dpx;
height:25px;
float:left;
}
</style>
</head>
<body style="width:%dpx">
''' % (max_str_len, max_str_len, max_str_len, max_str_len*m))
for i in range(n): # y
mutrix_fd.write('<div style="display:block;">')
for j in range(m): # x
if j > i:
num = j ** 2 + i + 1
else:
num = (i + 1) ** 2 - i + j
if num_d(num):
if i == j:
mutrix_fd.write(
'<div class="num3">%d</div>\n' % num)
else:
mutrix_fd.write(
'<div class="num1">%d</div>\n' % num)
else:
if i == j:
mutrix_fd.write(
'<div class="num3">%d</div>\n' % num)
else:
mutrix_fd.write(
'<div class="num2"">%d</div>\n' % num)
mutrix_fd.write('</div>')
# mutrix_fd.write('</br>\n')
mutrix_fd.write('''
</body>
</html>
输出结果是一个html文件,在浏览器中展示效果如下。
下面是我对平方数和素数使用css做了颜色标记,看看有没有素数的分布规律,哈哈,万一苹果砸到我头上了呢。遗憾的是,并没有发现苹果。
看看效果。