尝试创建一个读取数组并打印素数的程序

时间:2016-12-05 11:23:33

标签: c++

这是我到目前为止写的,我哪里出错了?

#include <iostream>
using namespace std;

int main()
{
int x[5], count=0;
for (int i=0;i<5;i++)
cin>>x[i];

for (int i=0;i<5;i++)
{
for (int n=2;n<x[i];n++)
    {
    if (x[i]%n==0)
    count++;
    }    
if (count==1)
cout<<x[i]<<" ";
}
}

编辑: 非常感谢所有试图提供帮助的人。问题是我必须在循环中对int进行计数,以便每次都从0开始。这是我的新工作代码:

#include <iostream>
using namespace std;

int main()
{
int x[5];
for (int i=0;i<5;i++)
cin>>x[i];

for (int i=0;i<5;i++)
{ int count=0;
    for (int n=2;n<=x[i];n++)
    {
    if (x[i]%n==0)
    count++;
    }    
if (count==1)
cout<<x[i];
}
}

3 个答案:

答案 0 :(得分:0)

#include <iostream>
using namespace std;

int main()
{
int x[5], count=0;
for (int i=0;i<5;i++)
cin>>x[i];

for (int i=0;i<5;i++)
{
    bool check = true;
    for (int n=2;n<x[i];n++)
    {
        if (x[i]%n==0)
        {
            check = false;
            break;
        }
    }    
    if (check)
    cout<<x[i]<<" ";
}
}

为了获得更好的复杂性,请将嵌套for循环更改为:

for (int n=2;n<=sqrt(x[i]);n++)

其他方式:

int main () 
{
    for (int i=2; i<100; i++) 
    {
        bool check=true;
        for (int n=2; n*n<=x[i]; n++)
        {
            if (x[i] % n == 0) 
            {
                check=false;
                break;    
            }
        }   
        if(check) cout << x[i] << " ";
    }
    return 0;
}

答案 1 :(得分:0)

这是我的解决方案。 我基本上假设所有数字都是素数,但如果我发现它们不是素数,我就不打印出来。

int main()  {
    bool primeNumber;
    int length = 0;
    int x[5], count=0;

    for (int i=0;i<5;i++){
        length++;
        cin>>x[i];
    }
    for (int i = 0;  i < length;  i++ )
    {
        primeNumber = true;
        for (int j = 3;  j <= x[i]/2;  j += 2 )//Not necessary to check agains numbers higher than half the number you want to check
        {

        if (x[i] % j == 0) 
        {
            primeNumber = false;
        }
    }
    if(primeNumber){cout << "Primenumber: " << x[i] << endl;}
    }
}

修改 这是对您的代码的评论 让我们说你的数组看起来像这样

{5,9,13,15, 17}



int main()
{
    int x[5], count=0;
    for (int i=0;i<5;i++)
    cin>>x[i];

    for (int i=0;i<5;i++)   
    {
        for (int n=2;n<x[i];n++)
        {
  

这里你从2-4(2,3,4)循环。只需要将要检查的数字的一半循环。例如(x [i] / 2),但你可以像在这里一样做。

            if (x[i]%n==0){       
            count++;}
  

当你的数字为5并再次检查n个数字时,这将产生5%2 = 1,5%3 = 2.5%4 = 1。 但是5是素数并且您的代码没有设法检测到它。

        }    
    if (count==1)    
  

让我们说你确实发现5是上面的素数而你设法将计数增加到1.当你在数组中找到另一个素数时会发生什么? 7.这将使计数等于2.但是你只检查1,因此你的下一个素数不会被打印,因为在第一个素数之后,count只会等于1,而不是其余的。 / p>

    cout<<x[i]<<" ";
    }

}

希望你理解我的解释。通过手动或调试模式检查代码并考虑代码对不同数字的作用总是有帮助的。

答案 2 :(得分:0)

所有的人都可以自我分裂。如果你试图用自己划分数字,这将使所有数字成为主要