最近在摸索哈希算法的原理性东西,比如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就可以直接用浏览器打开查看运行结果。
我得到的图案是这样的,是不是无规律下有觉得很有规律。