素数问题一般有两种类型
1.直接判断某个数是否为素数
#include<math.h>
bool judge(int x)
{
if (x <= 1) return false;
int bound = (int)sqrt(x) + 1; //防止double带来的精度损失
for (int i = 2; i < bound; i++)
{
if (x%i == 0) return false;
}
return true;
}
2.找某区间内的很多素数,不要用暴力,就需要提前进行初始化
int prime[10000]; //保存所有的素数
bool mark[10001]; //标记当前数是否为素数
int primesize; //素数个数
//初始化所有的数,素数进行标记为false,非素数为true
void init()
{
int i,j;
for (i = 1; i <= 10000; i++) {
mark[i] = false;
}
primesize = 0;
for (i = 2; i <= 10000; i++)
{
if (mark[i] == true) continue;
prime[primesize++] = i;
for (j = i*i; j <= 10000; j += i) //从i*i开始,因为比i*i小的已经标记过了
{
mark[j] = true;
}
}
}
例1:九度1047 素数判定
-
题目描述:
-
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。