为什么它不会产生我的第一个素数?

时间:2014-11-22 11:35:34

标签: c++

你可以给我一些帮助吗?我是初学者,我不知道我的程序有什么问题。它生成了所有数字,而不仅仅是素数。为什么呢?

#include <iostream>

using namespace std;

int main()
{
    unsigned int i,n,d;
    bool prim;
    cout<<"n=";
    cin>>n;
    for(i=2;i<=n;i=i+1)
    {
        prim=true;
        for(d=2;d<=i/2;d=d+1)
        if(i%d==0)
        {
            prim=false;
            break;
        }
        (prim);
        cout<<i<<",";
    }
    return 0;
}

5 个答案:

答案 0 :(得分:1)

因为(prim)与以下内容不同:

if (prim) {
    cout << i << ",";
}

旁注:

  • d=d+1i=i+1可以是d++i++
  • 您可以在循环中声明变量,例如:for (int i = 0;

答案 1 :(得分:0)

您的打印条件不正确。

    (prim);cout<<i<<",";

应该是

    if(prim) cout<<i<<",";

请注意,您的逻辑打印素数&lt; = n,而不是第一个n素数。

答案 2 :(得分:0)

你错过了if

if (prim) cout << i << ',';

答案 3 :(得分:0)

而不是(prim);使用if(prim)。其余代码是正确的。

#include <iostream>

using namespace std;

int main()
{
 unsigned int i,n,d;
 bool prim;
 cout<<"n=";
 cin>>n;
 for(i=2;i<=n;i=i+1)
    {
     prim=true;
     for(d=2;d<=i/2;d=d+1)
     if(i%d==0)
     {
         prim=false;
         break;
     }
     if(prim)
         cout<<i<<", ";
    }
  return 0;
}

答案 4 :(得分:0)

if语句可以减少一点:

prim && cout<<i<<",";

这是因为逻辑表达式的快捷方式评估。所以cout只有在素数为真时才会被评估。如果为false,则不会评估cout,因为表达式无论如何都是假的。

次要评论:除数(d)可以增加到楼层(sqr(i)),而不是直到i / 2(更有效)。变量i可以从3开始并且增加2,因为所有偶数都不是素数(除了2,它可以打印而不计算......)。