You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现类似sympy.primerange的区间合数生成并绘制极坐标图

生成指定区间合数并绘制极坐标图的解决方案

核心思路

要实现类似sympy.primerange的合数区间生成功能,无需依赖现成数据库,直接基于质数判断反向筛选即可:

  • 合数定义为大于1的非质数,只需遍历区间内整数,排除质数和1
  • 用生成器实现懒加载,和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=False):
    nums = np.array(list(nums))
    x, y = get_coordinate(nums)
    plt.figure(figsize=(figsize, figsize))
    plt.axis("on")
    plt.scatter(x, y, s=s)
    # 可选:开启后显示每个点对应的合数数值
    if show_annot:
        for idx, num in enumerate(nums):
            plt.annotate(num, (x[idx], y[idx]), fontsize=6, color='white')
    plt.show()

def composite_range(a, b):
    # 合数必须大于1,自动修正区间起始点
    start = max(a, 2)
    for num in range(start, b):
        # 非质数即为合数(已排除<2的情况)
        if not sympy.isprime(num):
            yield num

# 替换为你需要的区间,示例为2到1000
a, b = 2, 1000
composites = composite_range(a, b)
create_plot(composites, show_annot=False)

关键说明

  1. composite_range函数:
    • 自动处理区间下限,确保从2开始(1既非质数也非合数)
    • 生成器模式返回合数,和primerange使用方式完全匹配
    • 依赖sympy.isprime做质数判断,准确率与效率有保障
  2. create_plot优化:
    • 补全原代码中定义但未使用的show_annot参数,可按需显示数值标注
    • 保留原有深色背景、高清渲染配置,和质数绘图风格统一

内容的提问来源于stack exchange,提问作者Pure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:31:05