找出一个数是否为质数

finding a number is prime or not

代码显示错误结果...它显示 15,21 和许多其他奇数为质数但它们不是...如何解决问题?..我应该在主要部分编写什么代码[内部 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 函数,因此您的 marked 数组永远不会被填充。由于 marked 不是动态分配的,因此它在您的程序中被清零。因此,在您的 isPrime 函数中,所有奇数将通过您的 if 语句级联,然后命中 marked[n] == false 的部分,这将 return 为真,因为 marked[n] 是0 表示它的所有条目,相当于布尔值 false.

您可能想找出 运行 sieve 函数的最佳位置。

你这里的增量有误:

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

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

之前的答案