显然是的!三个简单的步骤。
步骤1
令f(n)表示素数计数函数(素数小于或等于n)。
如下定义整数序列 s(n)。对于每个正整数n,
- 将t初始化为n。
- 只要t既不是素数也不是1,则将t替换为f(t)并进行迭代。
- 迭代次数为s(n)。
该迭代过程是保证最终因为˚F(Ñ)< ñ所有Ñ。
考虑例如n= 25。我们初始化t =25。由于这不是素数也不是1,我们计算f(25)为9。这成为t的新值。这既不是素数也不是1,所以我们继续:f(9)是4。我们再次继续:f(4)是2。因为这是素数,所以我们在这里停止。我们完成了3次迭代(从25到9,然后到4,再到2)。因此s(25)为3。
序列的前40个词如下。该序列不在OEIS中。
0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2
第2步
给定一个奇数正整数N,通过缠绕有限序列s(1),s(2),...,s(N 2)形成一个正方形的向外螺旋,以构建N×N数组(矩阵)。例如,给定N = 5,则螺旋为
s(21) s(22) s(23) s(24) s(25)
s(20) s(7) s(8) s(9) s(10)
s(19) s(6) s(1) s(2) s(11)
s(18) s(5) s(4) s(3) s(12)
s(17) s(16) s(15) s(14) s(13)
或者,用值代替
3 3 0 3 3
3 0 2 2 2
0 1 0 0 0
1 0 1 0 1
0 2 2 2 0
第三步
表示N×N阵列作为图像带有灰色的彩色地图,或者与自己的口味的一些其它颜色映射。映射应该是渐进的,以便数字的顺序与某种视觉上明显的颜色顺序相对应。下面的测试用例显示了一些示例颜色图。
挑战
给定一个奇数正整数N,生成上述图像。
规则
螺旋线必须是向外的,但可以是顺时针或逆时针方向,并且可以开始向右(如上例所示),向左,向下或向上移动。
水平轴和垂直轴的比例不必相同。轴标签,颜色条和类似元素也是可选的。只要可以清楚地看到螺旋线,图像就有效。
图像可以通过任何标准方式输出。特别地,图像可以显示在屏幕上,或者可以产生图形文件,或者可以输出RGB值的阵列。如果输出文件或数组,请张贴一个显示时的示例。
以字节为单位的最短代码获胜。
测试用例
以下图像(单击以获得完整的分辨率)对应于N的几个值。如上例所示,使用了顺时针,向右优先的螺旋线。这些图像还说明了几个有效的颜色图。
imshow
则颜色是不可接受的
imshow
这样做。
s(n)
可以将的值数组输入到某些绘图函数/程序包中而无需修改(例如,我认为imshow
在matplotlib中可以处理此问题),这是可接受的输出形式吗?