素數計數函式
在數論中,素數計數函式 π(x) 返回不超過 x 的素數的個數。
可以使用以下 C# 語言程式來計算 π(x):
1: using System;
2:
3: namespace Skyiv.Utils
4: {
5: sealed class PrimeHelper
6: {
7: long m; int z; int[] a; long[] b;
8:
9: public PrimeHelper(long n)
10: {
11: a = new int[(z = (int)Math.Sqrt(m = n)) + 1];
12: b = new long[z + 1];
13: for (int i = 1; i <= z; a[i] = i-1, ++i) b[i] = n/i-1;
14: for (int p = 2; p <= z; ++p) {
15: if (a[p] <= a[p - 1]) continue;
16: long d = p, q = (long)p * p;
17: int c = a[p - 1], m = (int)Math.Min(z, n / q);
18: for (int i = 1; i <= m; ++i, d += p)
19: b[i] += c - ((d <= z) ? b[d] : a[n / d]);
20: for (int i = z; i >= q; --i) a[i] += c - a[i/p];
21: }
22: }
23:
24: public long π(long n)
25: { // 當 n > sqrt(m) 時,僅保證對 n == floor(m/i) 正確
26: return (n > z) ? b[m / n] : a[n];
27: }
28:
29: public int[] GetPrimes(bool hasSentinel = false)
30: { // 返回不超過 sqrt(m) 的所有素數
31: var primes = new int[a[z] + (hasSentinel ? 1 : 0)];
32: for (int j = 0, i = 2; i <= z; ++i)
33: if (a[i] > a[i - 1]) primes[j++] = i;
34: if (hasSentinel) primes[a[z]] = z + 1;
35: return primes;
36: }
37: }
38: }
簡要說明:
- 第 24 至 27 行的 π(n) 方法返回不超過 n 的素數的個數。當 n > 時,僅保證對 正確,其中 i = 1,2,...。
- 第 29 至 36 行的 GetPrimes 函式返回不超過 的所有素數。當 hasSentinel 為真時,尾部附加有一個哨兵(該哨兵的值大於 ,但不一定是素數)。這個方法對於計算 π(n) 來說不是必需的,僅是順手提供一個可能有用的方法。也就是說,刪除這個方法並不影響計算 π(n)。
參考資料
相關文章
- 表示素數的函式函式
- 數論線性篩總結 (素數篩,尤拉函式篩,莫比烏斯函式篩,前n個數的約數個數篩)函式
- 素數個數 <埃式篩 && 尤拉篩>
- 計算素數【Java】Java
- 留存統計 引數聚合函式函式
- 函式引數 引數定義函式型別函式型別
- 函式定義、函式的引數、函式的預設引數函式
- Python:第6章-2 使用函式求素數和 (20分)Python函式
- 數學函式函式
- 函式式思維和函數語言程式設計函式函數程式設計
- Scala函式與函數語言程式設計函式函數程式設計
- 聚合函式與數字函式函式
- ACM 素數ACM
- 【數論】素數篩法
- 字元函式、數字函式和日期函式字元函式
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- 計算2..n的素數
- 6-2 計算素數和
- 函數語言程式設計(2) 高階函式函數程式設計函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- 函式基礎和函式引數函式
- numtoyminterval函式——數字轉換函式函式
- 數論函式(二)函式
- NumPy 數學函式函式
- [數學] 生成函式函式
- 如何計算PHP函式中傳遞的引數數量PHP函式
- C++行內函數、函式過載與函式預設引數C++函數函式
- javascript函式引數和函式內同名變數的關係JavaScript函式變數
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- 函數語言程式設計:Lambda 表示式函數程式設計
- python---函式引數、變數Python函式變數
- Lambda表示式入門--函數語言程式設計與函式式介面函數程式設計函式
- Python 函數語言程式設計 – 高階函式Python函數程式設計函式
- 函數語言程式設計4-高階函式函數程式設計函式
- Python函數語言程式設計指南(2):函式Python函數程式設計函式
- Python函數語言程式設計自帶函式Python函數程式設計函式
- 函式外與函式內的變數函式變數
- PHP函式,引數,可變參函式.PHP函式