# 產生質數 (建表法)
這個只是自用的代碼庫。
#include<iostream>
#include<cmath>
using namespace std;
/*
* p: 質數表
* p_cnt: 質數數量計算
*/
int p[10000] = {2,3,5,7}, p_cnt =4;
/*
* Is Prime Function
* @param ia 需要檢測是否為質數的數字
* @return bool 是否為質數
*/
bool is_prime( int ia )
{
for(int i=0;i<p_cnt && p[i]*p[i]<=ia;i++)
if( ia % p[i] == 0 )
return false;
return true;
}
/*
* Build Prime Function
* @param prime_max 這個是質數的最大值,須設定為 最大範圍的 開根號,例如 sqrt( 2147483647 ) = 46340,函式會自動建表到比這個數字大的一個質數
* @return void
*/
void build_prime( int prime_max = 46340 )
{
for( int i=11, j=2; p[p_cnt-1]<=prime_max; i+=j, j=6-j )
if( is_prime(i) )
p[ p_cnt++ ] = i;
}
int main()
{
build_prime();
cout<<p_cnt<<' '<<p[p_cnt-1]<<endl;
}