【问题标题】:Prime numbers display and count c++素数显示和计数c ++
【发布时间】:2016-01-23 20:27:28
【问题描述】:

代码可以很好地显示素数,但我需要显示它们并同时显示素数的数量。

代码用于选定区间内的素数。

这是我的代码:

bool prastevila_interval(int z, int k) //primes in interval
{
    for (int i = z; i < k; ++i){
        for (int j = 2; j <= i; j++){
            if (!(i % j) && (i != j))
                break;
            else if (i == j){
                cout<< i <<endl;
            }

        }
    }
return true;
}

//--------------------------------------------------------------------
int main() { 

                //Primes in interval
    cout<<"__________PRASTEVILA V INTERVALU__________"<<endl;

    cout << "Zacetek intervala : ";
    cin >> z;                          //starting point of interval

    cout << "Konec intervala : ";
    cin >> k;                          //ending point of interval

    cout<<"Prastevila v intervalu so: "<<endl;

    prastevila_interval(z, k) == true;

    cout <<"Stevilo prastevil na interval od "<< z 
         <<" do "<< k <<" je : "<< counter << endl;   
    // this counter is not working ---^
}

如何计算素数?

附: : 我已经尝试了所有方法,但我无法弄清楚。

【问题讨论】:

  • 要计算它们,您只需使用 0 初始化一个变量,然后在最后一个 cout 之前使用 variable++。至于打印它们,只需将数字存储在一个数组中并使用 for 循环打印该数组
  • 感谢大家!我设法用简单的 2 行代码做到了,但我忘记添加了……我现在想上吊……xD 谢谢(y)

标签: c++ count counter primes counting


【解决方案1】:

您只需要更新找到的每个素数的计数器。 由于您的方法始终返回 true,因此我建议将其更改为:

int prastevila_interval(int z, int k) //primes in interval
{
    int counter = 0;
    for (int i = z; i < k; ++i){
        for (int j = 2; j <= i; j++)
        {
            if (!(i % j) && (i != j))
                    break;
            else if (i == j)
            {
                    cout<< i <<endl;
                    counter++;
            }
         }      
     }
return counter;
}

等等:

cout <<"Stevilo prastevil na interval od "<< z 
     <<" do "<< k <<" je : "<< prastevila_interval(z,k) << endl; 

还要注意,这段代码:

prastevila_interval(z,k) == true;

什么都不做,而且通常毫无意义。您只需在此处检查返回值是否为真,不要对其进行任何操作。

【讨论】:

  • 谢谢你,我已经做到了,它的工作就像一个魅力。谢谢!
【解决方案2】:

将指向counter 的指针或引用传递给您的函数,并让它更新它。

bool prastevila_interval(int z, int k, int& counter) //primes in interval
{
    counter = 0;
    for (int i=z; i<k; ++i){
        for (int j=2; j<=i; j++)
        {
            if (!(i%j)&&(i!=j))
                break;
            else if (i == j){
                cout<< i <<endl;
                ++counter;
            }

        }
    }
    return true;
}

这样调用:

int counter = 0;
prastevila_interval(lo, hi, counter);

另一种方法是让prastevila_interval 返回int 而不是bool,这是打印的素数。

【讨论】:

  • 我使用 Roman Pustylnikov 的回答来解决我的问题。无论如何感谢您的帮助!
【解决方案3】:

你可以将你的函数修改为:

int prastevila_interval(int z, int k) //primes in interval   
{
    int counter = 0;      

    for (int i = z; i < k; ++i){
        for (int j = 2; j <= i; j++){
            if (!(i % j) && (i != j))
                break;
            else if (i == j){
                counter++;
                cout<< i <<endl;
         }
    }
return counter;
}

然后在你的 main 中调用它:

int prime_number = prastevila_interval(lower_bound, upper_bound);

cout << "Number of primes:" << prime_numbers << endl;

【讨论】:

  • 我使用 Roman Pustylnikov 的回答来解决我的问题。无论如何感谢您的帮助!
【解决方案4】:

只需在您的函数中添加一个计数器,并在每次找到素数时将计数器加一。

bool prastevila_interval(int z, int k, int &counter) //primes in interval
{
    for (int i=z; i<k; ++i){
            for (int j=2; j<=i; j++)
        {
            if (!(i%j)&&(i!=j))
                break;
            else if (i == j)
            {
                counter++;
                cout<< i <<endl;
            }   
    }
    return true;
}

在你的主函数中初始化一个计数器并像往常一样将它传递给函数。

【讨论】:

  • 我使用 Roman Pustylnikov 的回答来解决我的问题。无论如何感谢您的帮助!
【解决方案5】:

你可以试试:

bool prime(int num)
{
    if (num == 2) return true;
    else
        for (int j=2; j<=sqrt(num); j++)
        {
            if ( num%j == 0)
                return false;
        }
    return true;
}

int prastevila_interval(int z, int k) //primes in interval
{
    int counter =0;
    for (int i=z; i<k; ++i)
    {
        if (prime(i))
        {
            cout<< i <<" ";
            counter++;
        }

    }
    cout<<endl;
    return counter;
}

int main()
{

    //Primes in interval
    cout<<"__________PRASTEVILA V INTERVALU__________"<<endl;
    cout<<"Zacetek intervala : ";
    cin>>z;                          //starting point of interval
    cout<<"Konec intervala : ";
    cin>>k;                          //ending point of interval
    cout<<"Prastevila v intervalu so: "<<endl;
    int counter = prastevila_interval(z,k);
    cout<<"Stevilo prastevil na interval od "<<z<<" do "<<k<<" je : "<<counter<<endl;

【讨论】:

  • 我使用 Roman Pustylnikov 的回答来解决我的问题。无论如何感谢您的帮助!
  • @SK:欢迎。我想你能理解我的回答。如果你喜欢它,你可以给我一票。
  • 当然可以!再次感谢 :) 是的,我确实理解你的回答,我敢打赌我以后不会犯这样的错误^^
  • @SK:谢谢:)。我这样做是为了让您更好地理解。我也可以更正你的代码。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2010-11-30
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多