我正在修补polar plotting of prime numbers的想法,我目前正在使用下面的代码来计算和绘制所有内容。
不确定要提供什么细节,所以我会提供所有的。我使用Anaconda的ObjectiveLab,并遵循几乎从this website茶的一切。
我想修改一下绘制一个范围内的所有合数而不是一个范围内的所有素数的想法,就像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
,但我一直收到错误,不知道如何使它成为一个范围。我还试图复制粘贴一个数据库的复合数字,这是对我试图做的精神。
3条答案
按热度按时间v64noz0r1#
任何大于或等于2的数要么是质数要么是合数,所以只要取这个范围内的一组数,然后去掉一组质数。
字符串
7d7tgy0s2#
最好的解决方案是同时遍历
range
和sympy.primerange
,丢弃素数。这样你就不需要一次把它们都存储在内存中,也不需要对它们进行排序。字符串
使用方法:
型
6ie5vjzr3#
sympy.composite
函数不会像sympy.primerange
那样产生一个值范围。相反,您提供n
,它会返回第n
个合数。要获得前50个合数,您需要调用range(1,51)
的函数。这可以使用列表解析来完成。字符串