素數表的獲取以及對整數進行質因子分解

2021-10-19 07:25:05 字數 1154 閱讀 8272

1.  求(0 - maxn)之間所有素數構成的素數表

法一:判斷每個數是否為素數,如果是素數存入素數表, 演算法複雜度為o(n根號n)

**:

// 判斷整數n是否為素數, 是素數則返回true

bool isprime(int n)

}return true;

}

// 求素數

const int maxn = 100;

int prime[101]; // 儲存所有的素數

int pnum = 0; // 素數的個數

bool p[101] = ; // 判斷每個下標對應的數是否為數數的結果

void find_prime()

else

}}

法二:素數篩選法,複雜度o(nloglogn),優點:演算法複雜度低,**簡短

**:

// 素數篩選法求素數表

const int maxn = 101; // 表長

int prime[maxn], pnum = 0; // prime陣列存放所有素數,pnum為素數個數

bool p[maxn] = ; // 如果i為素數,則p[i]為false,否則p[i]為true

void find_prime()}}

}

2. 對整數n進行質因子分解

將質因子以及每個質因子的數量存入乙個結構體中,遍歷上面求出的素數表,遍歷範圍只需是(2 - sqrt(n)),因為n的質因子一定小於等於sqrt(n), 當然還有乙個特例就是n本身,通過遍歷素數表,求出所有的質因子及對應的數量。

質因子結構體和實現函式:

// 儲存質因子的結構體

struct facto***c[10];

// 求數n的質因子

int num = 0;

void findfactors(int n)

num++;}}

if (n != 1)

}

關於素數表的製作以及利用素數表的快速素數判斷方法

第一次寫部落格,紀念我轉行2星期。昨天晚上刷codewar的題目,心血來潮想能不能用歐幾里得篩法重新做快速素數判斷方法呢?這個方法雖然說空間複雜度要遠遠高於試除法。voidgenerateprime intn loop for primelist index 0 primelist index pr...

求素數及素數表的獲取

質數 prime number 又稱素數,有無限個。乙個大於1的 自然數,除了1和它本身外,不能被其他自然數整除,換句話說就是該數除了1和它本身以外不再有其他的因數 否則稱為 合數。最小的質數是2。1.素數的判斷 由於一些題目中素數的判斷只是其中的一部分,所以如果這個時候的時間複雜度為o n 實際上...

陣列以及對其常用的操作

陣列 本身就是乙個容器,用來儲存資料。特點 是固定長度的。好處 給元素進行編號,從零開始。同時也可以通過length屬性獲取陣列長度。什麼時候使用陣列呢?當資料較多時,通常為了方便操作這些資料都需要進行臨時儲存。習慣 通常運算元組都需要進行遍歷。獲取陣列中的元素需要乙個指標。通過對指標的值的改變就可...