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

Trying to create a program that reads an array and prints the prime numbers

本文关键字:打印 数组 程序 读取 一个 创建      更新时间:2023-10-16

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

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

编辑:非常感谢所有试图提供帮助的人。问题是我必须在循环中进行计数,以便每次从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];
}
}
#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 (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;
}

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

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进行检查,因此您的下一个质子数不会打印,因为计数仅等于第一个质量数之后,而不是其余的。

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

}

希望您能理解我的解释。它总是有助于手工或调试模式浏览您的代码,并考虑代码将对不同的数字进行操作。

所有数字本身都是可分配的。如果您尝试与自己分配数字

,那将使所有数字都素