できた
ウラムの螺旋(素数螺旋)
全て素数の点なんだけど、1から数えて素数番目にある点には青色をつけた
この正方形のサイズ(size)は引数で指定できるようにした
$ bash myKINRImath19Makegif.sh ウラムの螺旋のサイズ
$ bash myKINRImath19Makegif.sh 200
$ vim myKINRImath19Makegif.sh
$ vim myKINRImath19ulam3Arg.py
#@ import numpy as np
#@ import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as web
import matplotlib.pyplot as plt
# %matplotlib inline
import matplotlib.font_manager as fm
# plt.rcParams['font.family']='Droid Sans Japanese'
import japanize_matplotlib
from matplotlib import rcParams
rcParams['figure.figsize']=15,10
rcParams['font.size']=15
import sys
import os
import math
#import cv2
#from PIL import Image, ImageFont, ImageDraw
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import numpy as np
import subprocess
#from sympy import Symbol, Derivative, sympify, pprint, pretty
#from sympy import Symbol, Derivative, sympify, pprint, pretty, solve
from sympy import Symbol, Derivative, sympify, pprint, pretty, solve, diff, symbols
from sympy.core.sympify import SympifyError
# ChatGPT from sympy import sympify, Symbol
import datetime
from datetime import datetime as dt
# import sys
# import os
# import numpy as np
# import matplotlib.pyplot as plt
import subprocess
# cdしないとcronで/rootに溜まっちゃう!
# スクリプトのディレクトリを取得
script_directory = os.path.dirname(os.path.abspath(__file__))
# スクリプトのディレクトリにカレントディレクトリを変更
os.chdir(script_directory)
#os.chdir('/media/WD30EZRX/PT3/')
# 現在の日時を取得
#execution_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
myTIMEE = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
myARG0 = os.path.basename(__file__)
if len(sys.argv) <= 1:
print(f"書式エラー")
print(f"書式: python {sys.argv[0]} \'ウラムの螺旋のサイズ\'")
print(f"書式: python {sys.argv[0]} \'201\'")
print(f"書式: python {sys.argv[0]} \'501\'")
sys.exit()
print(f"引数: {sys.argv[1]}")
#print(sys.argv[1])
myARG1 = sys.argv[1]
print('----------------------------')
print('ウラムの螺旋を描くプログラム')
print('----------------------------')
print('見つかった素数が、1から数えて素数番目(1,2,3,5...番目)のときは青色にする')
print('----------------------------')
print('素数が描く美しい螺旋~数学の難問')
print('https://www.youtube.com/watch?v=0WkY1p9uPgU&t=319s')
# 素数判定関数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(np.sqrt(n)) + 1):
if n % i == 0:
return False
return True
# ウラムの螺旋を描く関数
def ulam_spiral(size):
spiral = np.zeros*1
#ulam2 #@ 素数ならTrue, それ以外はFalse
#ulam2 primes.append(is_prime(num))
coords.append*2
if is_prime(num):
prime_count += 1 # 素数のカウントを増やす
# カウントされた素数の順位が素数かチェック
if is_prime(prime_count):
#colors.append('red') # 素数番目の素数なら赤色
#colors.append('yellow') # 素数番目の素数なら黄色
colors.append('blue') # 素数番目の素数ならblue
else:
#colors.append('blue') # 通常の素数は青
colors.append('lightcyan') # 通常の素数はライトシアン
else:
# colors.append('lightgray') # 非素数はグレー
colors.append('darkslategray') # 非素数はグレー
# 次の位置に移動
if direction == 0:
x += 1 # 右
elif direction == 1:
y -= 1 # 上
elif direction == 2:
x -= 1 # 左
elif direction == 3:
y += 1 # 下
num += 1
direction = (direction + 1) % 4
step += 1
#@ return spiral
#ulam2 return coords, primes
return coords, colors
# サイズ指定
# size = 201 # 螺旋のグリッドサイズ
size = int(myARG1)
#@ spiral_data = ulam_spiral(size)
#ulam2 coords, primes = ulam_spiral(size)
coords, colors = ulam_spiral(size)
#@ 座標をxとyに分割
x_coords, y_coords = zip(*coords)
# 描画
plt.figure(figsize=(10, 10))
kawacom = ''
#kawacom = f'{datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")} ({myARG0})'
#kawacom = f'ウラムの螺旋 size={size}\n {datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")} ({myARG0})'
# kawacom = f'ウラムの螺旋 size={size}\n {datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")} ({myARG0})\n 赤色は 素数番目 の素数'
kawacom = f'ウラムの螺旋(素数螺旋)size={size}\n {datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")} ({myARG0})\n 青色は 素数番目 の素数'
#plt.figtext(0.02, 0.01, kawacom, ha="center", fontsize=10)
#plt.figtext(0.5, 0.01, kawacom, ha="center", fontsize=10)
plt.figtext(0.5, 0.07, kawacom, ha="center", fontsize=10)
#@ plt.imshow(spiral_data, cmap='binary', interpolation='none')
#@ 素数でない数をグレーのドットとしてプロット
#plt.scatter(x_coords, y_coords, c=['lightgray' if not p else 'blue' for p in primes], s=10, marker='o')
#ulam2 plt.scatter(x_coords, y_coords, c=['lightgray' if not p else 'blue' for p in primes], s=10, marker='o')
#plt.scatter(x_coords, y_coords, c=colors, s=10, marker='o')
plt.scatter(x_coords, y_coords, c=colors, s=10)
plt.axis('equal')
plt.axis('off') # 軸を非表示にする
# plt.savefig("ulam_spiral_primes_only.png", dpi=300, bbox_inches='tight') # PNG画像として保存
myPNG='myKINRImath19ulam3.png'
# plt.savefig("ulam_spiral_primes_only.png", dpi=300, bbox_inches='tight') # PNG画像として保存
#plt.savefig("myKINRImath19ulam.png", dpi=300, bbox_inches='tight') # PNG画像として保存
plt.savefig(myPNG, dpi=300, bbox_inches='tight') # PNG画像として保存
#plt.show()
print(myPNG + ' を保存しました')
#print('(yの座標軸を画面中央に表示した版)')
print('-------------------------------')
print('http://192.168.3.11:5000/PT3/doLSglob.php?CHDIR=PT3&GREPWORD=myKINRI&MKSORT=goMKSORT')
1,000万円を超えたbitcoinを少しだけどもらえるURL
https://bitflyer.com/invitation?id=l50e5ljw&lang=ja-JP
ハピタスからポイントもらえるURL
*1:size, size), dtype=int)
x, y = size // 2, size // 2 # 中心
num = 1
step = 1
direction = 0 # 0:右, 1:上, 2:左, 3:下
#@ 座標と素数判定の結果を保存するリスト
coords =
#primes =
colors = []
print('見つかった素数のカウント')
prime_count = 0
while x < size and y < size:
for _ in range(2): # 同じ距離で2回ループ
for _ in range(step):
if 0 <= x < size and 0 <= y < size:
# if is_prime(num):
# spiral[y, x] = 1 # 素数の位置を1に
#ulam2 coords.append((x, y
*2:x, y