为什么它不给我生成前n个素数?

Why it doesn't generate me first n prime numbers?

本文关键字:为什么      更新时间:2023-10-16

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

#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;
}

因为(prim)

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

附带说明一下:

  • d=d+1i=i+1可以只是d++i++
  • 您可以在循环中声明变量,例如:for (int i = 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;
}

您的打印条件不正确。

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

应该是

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

请注意,您的逻辑打印素数 <= n,而不是前n素数。

> 你错过了if

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

if语句可以减少一点:

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

这是因为逻辑表达式的快捷计算。因此,只有当素数为真时,才会评估cout。如果为 false,则不会计算cout因为表达式无论如何都是 false。

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