我正在修改素数极坐标绘图的想法,我目前正在使用下面的代码来计算和绘制所有内容。
不确定要提供什么细节,所以我会提供所有细节。我正在使用 Anaconda 的 JupyterLab,并跟踪几乎所有内容,直到来自此网站的茶。
我想修改绘制一个范围内的所有合数而不是绘制一个范围内的所有素数的想法,就像
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
,但我一直收到错误,并且不知道如何使其成为一个范围。我还尝试复制粘贴复合数数据库,这违背了我想做的事情的精神。
sympy.composite
函数不会产生像sympy.primerange
那样的一系列值。相反,您提供 n
,它会返回第 n
个合数。要获得前 50 个合数,您需要调用 range(1,51)
函数。这可以使用列表理解来完成。
import sympy
N = 50
composite_range = [sympy.composite(n) for n in range(1, N+1)]
print(composite_range) # [4, 6, 8, ..., 68, 69, 70]