小演算法整理 素數相關演算法

2021-08-20 01:34:05 字數 1124 閱讀 8880

素性測試演算法

| 判斷素數

//判斷是否為素數

bool isprime(int k)

return

true;

}

| 素數表的生成

一、列舉篩選法:

const

int maxn = 101; //表長

int prime[maxn], pnum = 0; //素數表,素數個數

bool p[maxn] = ; //p[i] == true 表示i是素數

void find_prime()

}}

二、eratosthenes & 尤拉 篩選法

參考部落格

#include

#include

#include

#include

#include

using

namespace

std;

//篩選素數,範圍(0, n)

/*1、erotosthenes篩選法:不斷刪除當前素數的倍數(即合數)

缺陷:部分數會被篩到多次,複雜度o(nlogn)

2、尤拉篩選法:空間換時間

開闢陣列,prime記錄已篩選出的素數;

還是從2開始遍歷(遇到vis[i] == 0,則為素數)

把 i乘以已儲存的所有素數prime[j]所得到的數 標記為合數,即vis[i * prime[j]] = 1

複雜度o(n)

*/#define max 10000

void sieveofe(int p, int n)

}printf("\n");

}void prime(int vis, int n)

for (int j = 0; j < cnt && i * prime[j] < n; j++)

}printf("\n");

}int main()

printf("%d\n", count);

}system("pause");

return

0;}

素數相關演算法(二)

素數演算法 二 上次討論了簡單的素數判定的演算法,不過這個演算法對於位數較大 一般小於108 的素數判定就顯得相當力不從心了。比如在素數目前最廣泛的應用領域 公共金鑰體系中,一般選擇的素數都是相當大的 通常在100位以上 如果採用上次的試除法來判定,那麼可能要窮盡你一生的時間都還不夠。所以在一般的應...

小演算法整理 質因子分解

質因子分解 練習題 pat.a1059 儲存結構 質因數 結構體 struct factor fac 10 int範圍內,10位夠用了考慮到2x3x5x7x11x13x17x19x23x29就已經超過了int範圍,因此對乙個int範圍內的數來說,fac陣列的大小只需開到10就可以了!結論 求解思路 ...

素數判斷演算法

bool isprime int n bool isprime int n int p max void prime int n return n odd 最後把主體和 剩下的 乘起來作為結果 演算法思路 對於n,從素數表中取出任意的素數對其進行費馬測試,如果取了很多個素數,n仍未測試失敗,則認為 ...