You need to enable JavaScript to run this app. CMake素数测试代码while循环使用LESS_EQUAL不生效问题求助
优惠活动
大模型
产品
解决方案
定价
更多

CMake素数测试代码while循环使用LESS_EQUAL不生效问题求助

CMake循环素数判断问题解答

核心原因

你的代码运行异常的根源是循环退出后的素数判断逻辑和while循环的终止条件不匹配:

  • 你测试用例中n=7,计算得到cntr = 7/2 = 3
  • 当使用LESS_EQUAL作为循环判断条件时,循环会在i <= 3时持续执行:
    1. 第一轮i=2:7%2=1≠0,i自增为3
    2. 第二轮i=3:7%3=1≠0,i自增为4
    3. 第三轮i=4不满足i <= 3,循环正式退出
  • 你原代码后续的素数判断逻辑为if(i EQUAL cntr),此时i=4、cntr=3,条件不成立,因此不会输出素数判定结果,看起来就像代码运行异常。

修复方案

你可以任选以下一种方式修改:

  1. 保持LESS_EQUAL循环条件,调整素数判断逻辑
    将末尾的判断改为:
if(i GREATER cntr)
        message("${n} is Prime")
endif()

原理是循环正常走完没有被break打断的情况下,i会比cntr大1,说明所有小于等于cntr的数都无法整除n,n即为素数。

  1. 保持原有素数判断逻辑,循环条件改为LESS
    就是你已经测试可以正常运行的写法,此时循环会在i=3时直接退出,i的值等于cntr,满足原有判断条件。

额外优化建议

  • 素数判断不需要遍历到n/2,仅需遍历到√n即可大幅减少循环次数,计算cntr的代码可以改为MATH(EXPR cntr "sqrt(${n})")
  • CMake的MATH表达式建议用双引号包裹,避免特殊符号引发的解析异常,比如写法调整为MATH(EXPR i "${i}+1")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:45:03