min117の日記 (original) (raw)

できた

ウラムの螺旋(素数螺旋)

全て素数の点なんだけど、1から数えて素数番目にある点には青色をつけた

この正方形のサイズ(size)は引数で指定できるようにした

$ bash myKINRImath19Makegif.sh ウラムの螺旋のサイズ

$ bash myKINRImath19Makegif.sh 200

$ vim myKINRImath19Makegif.sh

youtu.be

$ 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](#f-8d941761 "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")
#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

その買うを、もっとハッピーに。|ハピタス