在 Python 中可视化高斯素数和高斯素数因子

Visualizing gaussian primes and gaussian prime factors in Python

我想创建两个图,一个在复平面中描绘了高斯素数,另一个显示了该复数的(高斯)素数因子的数量。我可以计算素数(第一种情况)和因子(第二种情况),但找不到正确的可视化格式。

在第一种情况下,我只想为给定维度的复平面中的每个素数画一个刻度,如 this Wolfram Mathworld page. I have already defined a function with the following signature: is_gaussian_prime(c : complex) -> bool. What I'm missing is a suitable data structure for storing the information of the primacy of all the complex numbers from real_min to real_max and imag_min to imag_max and a way to visualize that data structure. I have looked into seaborn.relplot() as documented here 中所示,但不太清楚,我希望数据具有什么样的形状在。

我想使用 relplot() 的原因是因为这允许在第二种情况下为不同数量的素因子绘制不同大小的刻度。这意味着我想以这样一种方式绘制第二个图,即代码的大小代表该特定高斯数的质因子数。更准确地说,在第二个图中,我想绘制具有不同颜色的高斯素数和黑色高斯复合材料,并为具有更多因子的复合材料绘制更大的股票代码。对于这种情况,我已经定义了以下签名的函数:number_of_gaussian_factors(c : complex) -> int.

您可以生成一个高斯素数列表,然后在实部和虚部上调用 sns.scatterplot

from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
from sympy.ntheory.primetest import is_gaussian_prime

N = 200
prime_set = set()
for i in range(N):
    for j in range(N):
        if is_gaussian_prime(i + j * 1j):
            prime_set.add(i + j * 1j)
            prime_set.add(i - j * 1j)
            prime_set.add(-i + j * 1j)
            prime_set.add(-i - j * 1j)
primes = np.array(list(prime_set))
plt.figure(figsize=(15, 15))
ax = sns.scatterplot(x=np.real(primes), y=np.imag(primes), color='tomato', s=20)
ax.set_aspect('equal')
plt.show()

计算质因数的个数似乎a bit more complicated,而且不那么对称(例如2=(1+i)(1-i)2i=i(1+i)(1-i))。你有一个高斯整数数组(例如 gaussian_ints)和伴随的因子数数组(例如 num_factors),你可以调用例如sns.scatterplot(x=np.real(primes), y=np.imag(primes), size=num_factors, hue=num_factors).