数字矩阵

将数字排列通过一些想法来排列,来发现一些新的规律。之前看到一个回型排序

我用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>inum=j2+(i+1)
当 j < = i 时 : n u m = ( i + 1 ) 2 + j − i 当j<=i时: num = (i+1)^2+j-i j<=inum=(i+1)2+ji

我用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做了颜色标记,看看有没有素数的分布规律,哈哈,万一苹果砸到我头上了呢。遗憾的是,并没有发现苹果。

看看效果。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值