繁体   English   中英

找出一个数是否是素数

[英]finding a number is prime or not

代码显示错误的结果...它显示 15,21 和许多其他奇数为素数,但它们不是...如何解决问题?..我应该在 main 部分中编写什么代码[inside int main( )]?

#include<bits/stdc++.h>
using namespace std;
#define M 1000000
bool marked[M];



bool sieve(int n)
{
    for (int i = 3; i * i <= n; i += 2)
    {
        if (marked[i] == false)
        {
            for (int j = i * i; j <= n; j += i + i)
            {
                marked[j] = true;
            }
        }
    }
}
bool isPrime(int n)
{
    if (n < 2)
        return false;
    if (n == 2)
        return true;
    if (n % 2 == 0)
        return false;
    return marked[n] == false;
}
int main()
{
    int i,j,k,n,m;
    cin>>n;
    for(i=0; i<n; i++)
    {
        cin>>m;
        if(isPrime(m))
            cout<<"prime"<<endl;
        else
            cout<<"N"<<endl;
    }
}

是不是因为没有正确使用或调用函数而导致错误的答案?......在这种情况下应该怎么做......

我的猜测是,由于您从未调用过sieve function,因此您marked的数组永远不会被填充。 由于marked不是动态分配的,因此它在您的程序中被清零。 因此,在您的isPrime function 中,所有奇数将通过您的if语句级联,然后点击marked[n] == false的部分,这将返回 true,因为marked[n]的所有条目均为 0,相当于boolean false

您可能想知道最好在哪里运行sieve function。

你在这里有错误的增量:

for (int j = i * i; j <= n; j += i + i)

您需要将j增加i ,但实际上增加了2*i 无论如何,我同意您从不调用sieve的先前答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM