素数也叫质数,是指只能被1和本身整除的数,下面介绍几种判断一个数是否为素数的方法。
题目:求1~100000中素数的个数。
方法1:对1~100000中的每一个奇数分别进行判断是否为素数,并且函数中循环的步长为1。
bool IsPrime(int n)
{
int i;
if (n == 1) return false;
for (i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
方法2:对1~100000中的每一个奇数分别进行判断是否为素数,并且函数中循环的步长为2。
bool IsPrime(int n)
{
int i;
if (n == 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (i = 3; i * i <= n; i += 2)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
方法3:使用筛选法,效率较前两种方法将大大提高
#define N 100000
bool prime[N+1];
void IsPrime()
{
int i, j;
for (i = 1; i < N + 1; i++)
{
if (i % 2 == 0)
{
prime[i] =false;
}
else
{
prime[i] = true;
}
}
prime[1] = false;
prime[2] = true;
for (i = 3; i * i <= N; i += 2)
{
if(prime[i])
{
for (j = i + i; j <= N; j += i)
{
prime[j] = false;
}
}
}
}