2014-11-22 65 views
-5

你可以给我一些帮助吗?我是初学者,我不知道我的程序有什么问题。它使我产生的所有数字不仅仅是素数。为什么?为什么它不会生成第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; 
} 
+0

您可以在空格和大括号中使用正确的缩进代码。它总是帮助你。 – 2014-11-22 12:24:20

回答

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

您的打印条件不正确。

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

应该

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

请注意,你的逻辑打印素数< = N,不是第n素数。

1

因为(prim)是不一样的:

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

在一个侧面说明:

  • d=d+1i=i+1可以只是d++i++
  • 可以声明像环内的变量:for (int i = 0;
0

你错过断if

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

if声明就可以减少一点点:

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

这是因为逻辑表达式的快捷方式的评价。因此cout只会在素数为真时评估。如果它是假的,cout将不被评估,因为表达式是错误的。

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

相关问题