一般的写法,避免溢出
//推荐写法,避免溢出
#include <math.h>
bool isPrime(int n) {
if(n <= 1) return false; //特例,1不是素数
int sqrt = (int)sqrt(1.0*n); //浮点数取整
for(int i=2; i<= sqrt; i++) { //遍历2~根号n
if(n % i == 0) return false;
}
return true;
}
如果n没有接近int的上界,下面是更简单的写法
//如果n没有接近int的上界
bool isPrime(int n) {
if(n <= 1) return false;
for(int i=2; i*i <= n; i++) {
if( n%i == 0 ) return false;
}
return true;
}
(素数表)100以内的所有素数
const int maxn = 101;
int prime[maxn], pNum = 0; //prime数组存放所有素数,pNum为素数个数
bool p[maxn] = {0}; //p[i] == true表示 i 是素数
void Find_Prime() {
for(int i=1; i<maxn; i++) { //不能写成 i < maxn
if(isPrime(i) == true) {
prime[pNum++] = i; //是素数则把 i 存入prime数组
p[j] = true;
}
}
}
素数筛法 Eratosthenes筛法
//素数筛法 Eratosthenes筛法
const int maxn = 101;
int prime[maxn], pNum = 0; //prime数组存放所有素数,pNum为素数个数
bool p[maxn] = {0}; //如果 i 为素数,则 p[i]为false; 否则 p[i]为true
void Find_Prime() {
for(int i=2; i<maxn; i++) { //不能写成 i<=maxn
if(p[i] == false) { //如果 i 是素数
prime[pNum++] = i; //把素数 i 存到prime数组中
for(int j=i+i; j<maxn; j += i) {//筛去 i 的倍数,不能写成 j<=maxn
p[j] = true;
}
}
}
}