java - 素数程序问题

标签 java numbers

我目前正在开发一个程序,用户输入一个数字,该程序将为您提供最多该数字的素数数量。虽然没有错误,但程序总是输出相同的数字:3。这是代码:

public static int Prime(int num){
    boolean isPrime = true;
    int count = 0;
    for (int a = 2; a <=num; a++){ 
        for (int i = 2; i <= a/2; i++){
            if (a == 2 || a == 3 || a == 5){
                isPrime = true;
            }
            else if (a % i == 0){
                isPrime = false;
            }
        }
        if (isPrime == true)
            count++;
    }
    return count;
}

最佳答案

在您的内部 for 循环中,您正在设置 isPrime,但随后您继续循环。如果候选除数 i 不能完全除尽,后续循环可能会将 isPrime 设置为 false。只有 235(第一个 if 条件中的 3 个数字)将其设置为 true 总是,所以你总是得到 3

相反,在内部 for 循环开始时将 isPrime 设置为 true,并 break 退出每次设置 isPrime 后的内部 for 循环。如果数字是 2、3 或 5,请设置为 truebreak,这样就没有什么可以将其设置为 false,这样您就可以计算它。如果您找到一个因子,它不是质数,因此设置为 falsebreak,这样就没有任何东西可以将其设置为 true 并且不计入其中。

顺便说一句,您的最终 if 条件测试的是 boolean;它可以简化为 if (isPrime)

关于java - 素数程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975143/

相关文章:

Java - 如何等待 uploadFileToBlockBlob 完成?

java - JOGL 与 Swing

java - 为什么 Eclipse Maven 说相同版本的依赖项有冲突?

java - 使用身份 id 在 derby 中导入数据

.net - 如何正确捕获SqlException:发生传输级错误

c - 如何在c中将10位数字分解为两个5位数字?

java - 迭代 R.string.name

c# - 用C#生成完全随机的偶数

c# - sql server float格式全局化

Javascript:包含随机数的网址