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

Java内外循环逻辑混淆:isEvenSubset函数实现求助

梳理并修正isEvenSubset函数逻辑

我来帮你理清这个函数的逻辑,先结合你的例子明确需求:当n的所有偶真因数(不包含n自身)都属于m的偶真因数集合时返回1,否则返回0。你之前的内外循环逻辑搞混了,应该先找出n的所有偶真因数,再逐一验证这些因数是否也是m的因数(因为如果一个数是n的偶因数且能整除m,那它必然也是m的偶因数)。

修正思路拆解

  1. 遍历所有小于n的偶数,找出n的偶真因数(满足n % i == 0且i % 2 == 0的i)
  2. 对每个找到的n的偶真因数,检查它是否能整除m(m % i == 0)
  3. 如果发现任何一个n的偶真因数不能整除m,直接返回0;若全部都能整除,遍历结束后返回1

修正后的完整代码

public class EvenSubsetChecker {
    public static void main(String[] args) {
        // 你的测试示例:18的偶真因数2、6都在12的偶真因数里,返回1
        System.out.println(isEvenSubset(12, 18)); 
        // 测试反例:20的偶真因数有2、4、10,其中10不是12的因数,返回0
        System.out.println(isEvenSubset(12, 20)); 
    }

    static int isEvenSubset(int m, int n) {
        // 遍历所有小于n的偶数,寻找n的偶真因数
        for (int i = 2; i < n; i += 2) {
            // 确认i是n的偶因数
            if (n % i == 0) {
                // 检查该因数是否能整除m,若不能直接返回0
                if (m % i != 0) {
                    return 0;
                }
            }
        }
        // 所有n的偶真因数都满足条件,返回1
        return 1;
    }
}

代码细节说明

  • 循环从2开始,步长设为2,这样只遍历偶数,省去了额外的奇偶判断,更高效
  • 循环条件i < n是因为你的例子中没有将n自身算作因数,如果需要包含n自身,只需把条件改成i <= n即可
  • 一旦发现某个n的偶因数不能整除m,直接返回0,不需要继续遍历,提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:02:05