In [2]:
import numpy as np
import matplotlib.pyplot as plt

In [13]:
def isPrimes2(n):
    if n > 1:
        if n == 2:
            return True
        if n % 2 == 0:
            return False
        for x in range(3, int(np.sqrt(n) + 1), 2):
            if n % x == 0:
                return False
        return True
    return False

In [22]:
max_ = 50000
dlt = 0.1
edge = int(np.sqrt(max_)) // 2 + 1
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
ax.set_xlim(-dlt * edge, dlt * edge)
ax.set_ylim(-dlt * edge, dlt * edge)


def p(max_, dlt=0.1):
    d = 1
    dx, dy = 0, -dlt
    x, y = 0, 0
    r = 1
    
#     ax.text(x, y, d)
    ax.scatter(x, y, c='k')

    while d <= max_:

        for _ in range(2):
            for _ in range(r):
                x += dx
                y += dy
                d += 1
                if d > max_:
                    return 
#                 print(x, y, d)
                if isPrimes2(d):
#                     ax.text(x, y, d)
                    ax.scatter(x, y, c='k')

            dx, dy = dy, dx
            dy = -dy
        r += 1

p(max_, dlt)
plt.show()



In [ ]: