パンダの休日

雑多な書き残し

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Ulam1001.png

pypngで1001×1001のウラムの螺旋を書かせてみました。
中央から螺旋状に素数なら黒、それ以外は白で塗ってあります。
螺旋状に位置を移動させるために平方根を使っている点が不細工。
三角関数かその他にも何か簡潔なアルゴリズムがありそうですが思いつきません。
関数にリストを渡しているのも何か不安感ありますがPythonの仕様上動くので放置。
すっきりとしない。

from math import sqrt
import png
import time

def pwriter(pixels, x, y, r=0, g=0, b=0):
pixels[y][3*x] = r
pixels[y][3*x+1] = g
pixels[y][3*x+2] = b

def main():
plist = [2]
x = y = 1001
f = open("Ulam.png","wb")
ulampic = png.Writer(x, y)
pixels = [[255 for j in range(3*x)] for i in range(y)]
pnum = x*y
x = x//2
y = y//2
for k in range(pnum):
if k+1 == plist[-1]: #素数判定
pwriter(pixels, x, y)
for i in plist :
if (k+2)%i == 0 :
break
elif i**2 >= k+2 :
plist.append(k+2)
break

n = (sqrt(1+4*k)-1)//2 #螺旋位置移動
if (n*n+2*n) < k:
if n%2 == 0:
y -= 1
else:
y += 1
else:
if n%2 == 0:
x += 1
else:
x -= 1
#print(x, y)
ulampic.write(f, pixels)
f.close()

if __name__ == '__main__':
main()
スポンサーサイト

shader

Author:shader
多趣味飽き性に振り回されて色々やってます。

直接連絡したい方は御気軽にメールしてください。 3日以内には返信させて頂きます。

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。