[英]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.