最近在摸索哈希算法的原理性东西,比如md5算法的设计原理,网上大多数文章都是实现过程,并没有谈到为什么要这么设计,估计设计原理得看相应论文才能得到答案了,不过在摸索过程中发现一个有趣的东西,那就是素数,这个数的定义是只能被自身和1整除,除是什么呢?除在我这边的定义是能被等分,就是说素数就是不能被等分的数,于是乎就有了想把素数绘制成图案的想法,看看以1000以内的素数为半径画圆,或者以坐标为素数、半径为素数花圆,看看这个图是怎么样的,程序如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
<canvas id="myCanvas" width="1500" height="1500" style="border: 1px solid black;">
</canvas>
<script>
    function isPrime(number) {
        //判断输入是否为number类型,是否为整数
        if (typeof number !== 'number' || !Number.isInteger(number)) {
            return false;
        };
        //小于2都不是素数
        if (number < 2) {
            return false
        }
        ;
        //2是素数,被2整除的都不是素数
        if (number === 2) {
            return true
        } else if (number % 2 === 0) {
            return false;
        }
        ;
        // 判断是否能被奇数整除,最大循环为该数值的开方
        var squareRoot = Math.sqrt(number);
        for (var i = 3; i <= squareRoot; i += 2) {
            if (number % i === 0) {
                return false;
            }
            ;
        }
        return true;
    }
    function draw(nub) {
        var canvas = document.getElementById("myCanvas");
        var ctx = canvas.getContext("2d");
        ctx.beginPath();
        var radius = 0;
        var circle = {x: 750, y: 750, r: radius};
        ctx.strokeStyle = "blue";
        for (var i = 2; i <= nub; i++) {
            if (isPrime(i)) {
                var scale = i;
                circle.r = scale;
                // rrx 表示  ctx.arc(circle.r, circle.r, circle.x, 0, Math.PI * 2, false);
                // rrr 表示  ctx.arc(circle.r, circle.r, circle.r, 0, Math.PI * 2, false);
                ctx.arc(circle.r, circle.r, circle.x, 0, Math.PI * 2, false);
                ctx.stroke();
            }
        }
    }
    draw(1000);
</script>

</body>
</html>

上述程序不是伪代码,复制进文本命名为.html就可以直接用浏览器打开查看运行结果。

我得到的图案是这样的,是不是无规律下有觉得很有规律。

xxr
rrx
rrr
rxx

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注