我正在尝试探索极坐标下质数分布的绘制方法,并且正使用下面的代码进行计算和绘制工作。我在Anaconda环境下使用JupyterLab,几乎完全按照jaketae.github.io/study/prime-spirals/这个网站上的指导操作。
我想尝试的变通方案是,在一定范围内绘制所有合数(非质数)而不是像sympy.primerange
函数那样绘制所有质数。目前针对合数的工具相比质数并不多,因此我希望建立一种解决这一问题的方法。
导入所需的库如下:
import math
import sympy
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format='retina'
plt.style.use('dark_background')
接下来定义了一个将输入数字转换为极坐标直角坐标的函数:
def get_coordinate(num):
return num * np.cos(num), num * np.sin(num)
再之后定义了一个用于创建图像的辅助函数:
def create_plot(nums, figsize=13.5, s=8, show_annot=True):
nums = np.array(list(nums))
x, y = get_coordinate(nums)
plt.figure(figsize=(figsize, figsize))
plt.axis("on")
plt.scatter(x, y, s=s)
plt.show()
然后可以这样生成并绘制质数范围内的点:
primes = sympy.primerange(a, b)
create_plot(primes)
但当我试图用类似的方式处理合数时遇到了困难。例如,尝试使用sympy.composite
时总是遇到错误,并且无法理解如何使其生成一个合数范围。此外,我还尝试过直接复制粘贴一份合数列表来替代生成过程,但这违背了我想要探究原理的初衷。