首页 > 解决方案 > 找到给定数字的最大素数

问题描述

我正在编写这个方法,它应该返回给定数字的最大素数。它工作正常,直到输入 45 并且输出为 15,即使输出应该是 5。我正在努力寻找错误。请帮忙。

public static int getLargestPrime(int number) {

        if (number < 0) {
            return -1;
        }

        for (int i = number-1; i > 1; i--) {
            if (number % i == 0) {
                for (int j = 2; j < i; j++) {
                    if (i % j == 0) {
                        continue;
                    }
                    return i;
                }
            }
        }
        return -1;

    }

标签: javaloopsprimes

解决方案


您需要添加一个标志来检查 value 的整除性ii只有当是素数时,它才会保持真实。稍后如果标志仍然为真,您可以返回,i否则您需要继续迭代

您的代码中发生的情况是,当 i=15 时,内部循环从 2 开始迭代,15%2!=0 因此它跳过了 if 条件并返回 15

for (int i = number-1; i > 1; i--) {
        if (number % i == 0) {
            bool flag = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    flag = false;
                    break;
                }
            }
            if(flag)
                return i;
        }
    }

推荐阅读