首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以找到所有的质数,但不包括"2"?

可以找到所有的质数,但不包括"2"?
EN

Stack Overflow用户
提问于 2013-10-09 09:59:14
回答 6查看 217关注 0票数 0

它现在可以找到输入范围内的所有质数,但找不到最小质数2。

代码语言:javascript
复制
for(int number=2;number<range;number++){
    for(int testDivide=2;testDivide<Math.sqrt(number);testDivide++){
        if(number%testDivide!=0) {
            System.out.println(number);
        }
        break;

    }

对于范围10,它打印:5 7 9,但没有2。

EN

回答 6

Stack Overflow用户

发布于 2013-10-09 10:40:28

你的代码没有产生正确的结果(缺少2和3;包括9)的原因是你的主性测试逻辑是向后的。如果内部循环完成时没有找到任何偶除数,则该数是质数;相反,如果找到任何非除数,则打印该数。

试着这样做:

代码语言:javascript
复制
for( int number = 2; number < range; number++) {
    boolean divisible = false;
    int limit = (int) Math.sqrt(number);
    for (int testDivide = 2; !divisible && testDivide <= limit; testDivide++) {
        divisible = number % testDivide == 0;
    }
    if (!divisible) {
        System.out.println(number);
    }
}

请注意,生成一个范围内的所有素数的一种更有效的方法是Sieve of Eratosthenes

票数 1
EN

Stack Overflow用户

发布于 2013-10-09 10:14:30

检查这里的代码: package core;

代码语言:javascript
复制
public class Test2 {
    public static void main(String[] args) {
        int cnt = 0;
        for (int i = 2;; i++) {
            if (Priem(i)) {
                cnt++;
                System.out.println(i);
                if (cnt == 200)
                    break;
            }
        }

    }

    public static boolean Priem(int n) {
        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-10-09 10:19:30

我认为您的for循环有点混乱。

代码语言:javascript
复制
for(int testDivide=2;testDivide<Math.sqrt(number);testDivide++){

}

不确定为什么在testDivide等于sqrt(数字)时停止,应该在testDivide大于时停止。

在你的内部for循环中也是不正确的:

代码语言:javascript
复制
    if(number%testDivide!=0) {
        System.out.println(number);
    }
    break;

基本上,这将做的是检查数字是否可被2整除,然后中断。你只需要在你找到一个整整齐齐的数字(number%testDivide==0)时中断即可。可以保留一个布尔值,在中断时将其设置为true,如果该布尔值为false,则仅在内部for循环结束后打印。

大致是这样的:

代码语言:javascript
复制
    for (int number=2; number<range; number++){
        boolean found = false;
        int limit = (int)Math.sqrt(number);
        for (int testDivide=2; testDivide<=limit; testDivide++){
            if(number%testDivide==0) {
                found = true;
                break;
            }
        }   
        if (!found) System.out.println(number);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19261758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档