まぃふぇいばりっと

機械学習やってます.Julia大好きです.勉強したことの殴り書きです.

Python 極座標上に素数をプロット

楽しい動画だった.

www.youtube.com

練習がてら,任意の素数pに対して極座標(r, θ) = (p, p)の点をプロットするプログラムを作ってみた.

import numpy as np
import matplotlib.pyplot as plt
import math
import time

max_max_number = 100000
interval = 100

def get_prime_numbers():
    start = time.time()
    prime_numbers = [2] 
    for L in range(3, max_max_number):
        chk=True
        for L2 in prime_numbers:
            if L%L2 == 0:chk=False
        if chk==True:prime_numbers.append(L)
    prime_numbers = np.array(prime_numbers)

    return prime_numbers

def converte_pn_coordinates(pns):
    converted_pns_x = [pn*math.cos(pn) for pn in pns]
    converted_pns_y = [pn*math.sin(pn) for pn in pns]
    
    return converted_pns_x, converted_pns_y

def main():
    print("getting prime_numbers...")
    prime_numbers = get_prime_numbers() 
    print("converting polar coordinate...")
    converted_prime_numbers_x, converted_prime_numbers_y = converte_pn_coordinates(prime_numbers)

    for max_number in range(0, max_max_number, interval):
        num_plot_points = len(prime_numbers[prime_numbers < max_number])
        x = converted_prime_numbers_x[:num_plot_points]
        y = converted_prime_numbers_y[:num_plot_points]
        
        max_prime_number = prime_numbers[num_plot_points] 

        plt.figure(figsize=(5,5))
        
        plt.scatter(x, y, s=0.5, c="red")
        plt.title("p < {}".format(max_number))
        plt.axis("off")
        plt.xlim(-max_prime_number, +max_prime_number)
        plt.ylim(-max_prime_number, +max_prime_number)
        plt.savefig("save/{}.png".format(str(max_number).zfill(8)))
        plt.close()

        print("save/{}.png has been saved".format(str(max_number).zfill(8)))

if __name__ == "__main__":[f:id:physics303:20201205224739p:plain]
    main()

学部1年生の時に,リーマン予想とか知らずに,素数の分布を調べようと,1から1000くらいまでの素数をあれこれプロットして規則性がないか調べてたなぁ(何も分からなかった)f:id:physics303:20201205224724p:plain