C ++打印奇数而不是素数

时间:2017-06-05 14:00:13

标签: c++ primes

我已经做了几天的作业问题,似乎无法得到正确的输出(我已经尝试了很多东西!)问题是:

编写一个程序,它使用两个嵌套的for循环和模数运算符(%)来检测和打印从1到10,000的素数。

我从1到10做了一个小测试,以确保它的工作。我得到2,3,5,7,9作为我的输出,所以我知道出了什么问题。当我将数字从10增加到20时,它会打印2加上所有奇数。我在下面包含我的代码。谢谢!

int main() {

        for (int i=2; i <=10; i++){
            for (int j=2; j<=i; j++){
                if (i%j==0 && j!=i) {

                    break;    
                }

                else { 

                    cout<< i <<endl;
                    break;
                }           
            }   
        }
}

7 个答案:

答案 0 :(得分:2)

除了Sumit Jindal的回答,内循环也可以这样做:

for(int j=2; j*j<=i ; j++)

如果我们考虑满足x * y = i的每个(x,y)有序对,x的最大值可以是i的平方根。

答案 1 :(得分:1)

问题在于if-else分支。你的内部循环将只运行一次,因为它会因你的if else分支而脱离内部循环。

首次进入内循环时, j的值为2 。您的条件将测试变量i 是否可被2整除。如果是,它会中断。其他明智的(你的其他分支)将打印 i 的值并突破。 因此打印奇数。

中断内循环并检查外循环中 j是否等于。您必须使 j 可用于外部循环。

答案 2 :(得分:0)

你的print语句在内循环中,它不应该 - 如果你在内循环中一直运行而没有找到除数,它只是一个素数。

作为第二点,你只需要检查除了i的平方根之外的除数,而不是一直到i。

答案 3 :(得分:0)

你是在第一次迭代后打破内循环,这是检查数字(即 i )是否与 j 不同,并且可以被2整除(因为第一次迭代的 j = 2

  

我得到2,3,5,7,9作为我的输出

这是因为每个奇数都会在 if 时失败并打印在 else 条件

答案 4 :(得分:0)

代码中的小修正,添加标记。你也不需要运行内循环i次,事实上只有i / 2次就足够了。这是简单的数学,但会节省大量的CPU周期(在你的情况下约为5000次迭代)

#include <iostream>

int main()
{
    int n = 10;
    for(int i=2; i<=n; i++){
        bool isPrime = true;
        for(int j=2; j<=i/2; j++){
            if(i!=j && i%j==0){
                isPrime = false;
                break;
            }
        }
        if(isPrime)
            std::cout << i << " ";
    }
    return 0;   
}

答案 5 :(得分:0)

另一个版本,如果你不介意以相反的顺序输出。

int n = 10;

for (int i = n; i > 1; --i)
{
    int factorCount = 0;
    for (int j = 2; j <= n; ++j)
    {
        if (i % j == 0)
            factorCount++;

        if (factorCount > 1)
            break;
    }
    if (factorCount == 1)
        cout << i << endl;
}

答案 6 :(得分:-2)

int main() { 

    for (int i = 2; i <= 100; i++) {
        for (int j = 2; j < i; j++) {
            if (i%j == 0)
                break;

            if (j==i-1) // means has never run previous if blog
                cout << i << endl;
        }
    }

    return 0; 
}