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

Python作业求助:求45以内素数乘非素数且积小于45的结果,禁用数组、函数

问题排查

你的第二版代码没有输出是因为存在以下几个核心错误:

  • 布尔标记被强制覆盖:素数判断逻辑执行完成后,你手动写了n = True直接覆盖了之前的所有判断结果,导致所有数都被判定为素数,后续筛选非素数的if not n == True条件永远无法触发,自然没有输出。
  • 标记变量未正确初始化:每次判断新的数值是否为素数前,没有给标记变量设置初始值,会残留之前的判断结果,导致当前判断逻辑错误。
  • 素数判断的循环边界错误:range(2, int(sqrt(num)))是左闭右开区间,会漏掉等于平方根的因数,需要改为range(2, int(sqrt(num)) + 1)才能覆盖所有可能的因数。
  • 非素数判断逻辑错误:1不属于素数,你没有单独处理1的情况,会导致1被错误判定为素数。
修正后可运行代码
from math import sqrt

# 遍历2~45筛选素数(素数定义为大于1的自然数)
for prime in range(2, 46):
    is_prime = True
    # 素数判断逻辑
    for i in range(2, int(sqrt(prime)) + 1):
        if prime % i == 0:
            is_prime = False
            break
    # 不是素数就跳过后续乘积计算
    if not is_prime:
        continue
    # 遍历1~45筛选非素数
    for not_prime in range(1, 46):
        is_not_prime = False
        # 1默认属于非素数
        if not_prime == 1:
            is_not_prime = True
        else:
            # 大于1的数判断是否为合数
            for j in range(2, int(sqrt(not_prime)) + 1):
                if not_prime % j == 0:
                    is_not_prime = True
                    break
        # 乘积小于45就打印
        if is_not_prime and prime * not_prime < 45:
            print(prime, '*', not_prime, '=', prime * not_prime)
代码说明
  • 全程仅使用基础循环、判断语法,未使用数组、自定义函数,符合作业要求
  • 单独处理了1的非素数属性,逻辑符合素数定义
  • 每个数值判断前都重新初始化布尔标记,不会出现判断结果残留的问题
  • 素数判断循环边界调整为平方根+1,不会漏掉因数判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:24:03