提问者:小点点

如何在C++中检查向量中的素数?


下面我写了一段代码,要求用户输入向量的元素数和元素数。我想用一个函数来检查向量中的素数。例如,我有一个以2,6,3,7为元素的向量,函数要检查有多少素数,但输出显示向量只有2个素数。所以,我的问题是:为什么我的代码不工作?

#include <iostream>

using namespace std;

int input_vector(int a,int t[20]);
int output_vector(int a,int t[20]);
int prime(int a,int nr[20]);

int main()
{
    int i,n,m,v[20],w[20];
    
    cout<<"Enter the number of vector's elements:";
    cin>>n;
    input_vector(n,v); //input vector
   
    cout<<"The vector is: ";
    output_vector(n,v); //output vector
    cout<<endl;
    
    prime(n,v); //prime numbers from vector
    cout<<endl<<endl;
    
    
}

int input_vector(int a,int t[20])
{
    int i;
    for(i=1;i<=a;i++)
    {
        cout<<"v["<<i<<"]=";
        cin>>t[i];
    }
}

int output_vector(int a,int t[20])
{
    int i;
    for(i=1;i<=a;i++) cout<<t[i]<<" ";
}

int prime(int a,int nr[20])
{
    int i,p,j;
    p=0;
    
    for(j=1;j<=a;j++)
        for(i=2;i<=(nr[j]/2);++i)
        {
            if((nr[j]%i==0)) p=p+1;
        }
    
    if(p!=0) cout<<"The vector has "<<p<<" prime numbers.";
    else cout<<"THERE ARE NO PRIME NUMBERS!";
    
}

共1个答案

匿名用户

查找素数的算法的逻辑流程中有一个错误。我在下面修复了它,并且使您的方法无效,因为它们不返回任何内容。已声明且未使用的变量也被消除。

#include <iostream>

using namespace std;

void input_vector(int a,int t[20]);
void output_vector(int a,int t[20]);
void prime(int a,int nr[20]);

int main()
{
    int n,v[20];

    cout<<"Enter the number of vector's elements:";
    cin>>n;
    input_vector(n,v); //input vector

    cout<<"The vector is: ";
    output_vector(n,v); //output vector
    cout<<endl;

    prime(n,v); //prime numbers from vector
    cout<<endl<<endl;
}

void input_vector(int a,int t[20])
{
    int i;
    for(i=1;i<=a;i++)
    {
        cout<<"v["<<i<<"]=";
        cin>>t[i];
    }
}

void output_vector(int a,int t[20])
{
    int i;
    for(i=1;i<=a;i++) cout<<t[i]<<" ";
}

// here algorithm to find prime numbers was faulty
void prime(int a,int nr[20])
{
    int i,p,j, counter;        // added a counter
    p=0;

    for(j=1;j<=a;j++) {    
        counter = 0;
        for(i=2;i<=(nr[j]/2);++i)  // if a divisor of nr[j] is found, add 1 to counter 
            if(nr[j]%i==0)
                counter += 1;
        if (counter == 0)          // if no divisors found, then +1 primes' count
            p += 1;
    }

    if(p!=0) cout<<"The vector has "<<p<<" prime numbers.";
    else cout<<"THERE ARE NO PRIME NUMBERS!";
}

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(何在|c++|中|检查|向量|中|素数)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?