PrimePi[x]
x 以下の素数
の数を与える.
PrimePi
PrimePi[x]
x 以下の素数
の数を与える.
詳細とオプション
- PrimePiは素数計数関数としても知られている.
- 記号操作・数値操作の両方に適した数学関数である.
は x 以下の素数を数える.
は
のとき漸近展開
を持つ.- 次は,使用可能なオプションである.
-
Method Automatic 使用するメソッド ProgressReporting $ProgressReporting 計算の進捗状況を報告するかどうか - 次は,Methodの可能な設定である.
-
"DelegliseRivat" Deléglise–Rivatアルゴリズムを使う "Legendre" ルジャンドル(Legendre)の公式を使う "Lehmer" レーマー(Lehmer)の公式を使う "LMO" Lagarias–Miller–Odlyzkoのアルゴリズムを使う "Meissel" Meisselの公式を使う "Sieve" エラストテネス(Erastosthenes)の篩を使う
例題
すべて開く すべて閉じる例 (3)
スコープ (10)
数値評価 (5)
記号演算 (5)
PrimePiの従来の数学表記:
PrimePi[x]//TraditionalFormPrimePiを含む方程式の解の例を求める:
FindInstance[PrimePi[n] == 7, n, Integers]Integrate[PrimePi[x ^ 2], {x, 0, 10}]PrimePi関数を認識する:
FindSequenceFunction[{0, 1, 2, 2, 3, 3, 4, 4, 4, 4}, n]Asymptotic[PrimePi[x], x -> Infinity]AsymptoticEquivalent[PrimePi[x], LogIntegral[x], x -> Infinity]オプション (6)
Method (5)
素数の計数に使うためにルジャンドル(Legendre)法を指定する[MathWorld]:
PrimePi[10 ^ 6, Method -> "Legendre"]BarChart[Table[{First[AbsoluteTiming[PrimePi[10 ^ n]]], First[AbsoluteTiming[PrimePi[10 ^ n, Method -> "Legendre"]]]}, {n, 7, 11, .5}], ChartLegends -> {"Automatic", "Legendre"}]素数の計数に使うためにレーマー(Lehmer)法を指定する[MathWorld]:
PrimePi[10 ^ 6, Method -> "Lehmer"]BarChart[Table[{First[AbsoluteTiming[PrimePi[10 ^ n]]], First[AbsoluteTiming[PrimePi[10 ^ n, Method -> "Lehmer"]]]}, {n, 7, 11, .5}], ChartLegends -> {"Automatic", "Lehmer"}]素数の計数に使うためにDeléglise–Rivat法を指定する:
PrimePi[10 ^ 6, Method -> "DelegliseRivat"]BarChart[Table[{First[AbsoluteTiming[PrimePi[10 ^ n]]], First[AbsoluteTiming[PrimePi[10 ^ n, Method -> "DelegliseRivat"]]]}, {n, 7, 11, .5}], ChartLegends -> {"Automatic", "Deleglise-Rivat"}]素数の計数に使うためにMeissel法を指定する[MathWorld]:
PrimePi[10 ^ 6, Method -> "Meissel"]BarChart[Table[{First[AbsoluteTiming[PrimePi[10 ^ n]]], First[AbsoluteTiming[PrimePi[10 ^ n, Method -> "Meissel"]]]}, {n, 7, 11, .5}], ChartLegends -> {"Automatic", "Meissel"}]素数の計数に使うためにLagarias–Miller–Odlyzko (LMO) を指定する:
PrimePi[10 ^ 6, Method -> "LMO"]BarChart[Table[{First[AbsoluteTiming[PrimePi[10 ^ n]]], First[AbsoluteTiming[PrimePi[10 ^ n, Method -> "LMO"]]]}, {n, 7, 11, .5}], ChartLegends -> {"Automatic", "Lagarias-Miller-Odlyzko"}]ProgressReporting (1)
デフォルトで,PrimePiは進捗状況を報告しない:
PrimePi[10 ^ 17 + 1]ProgressReporting->Trueと設定すると,PrimePiは計算の進捗状況を表示するようになる:
PrimePi[10 ^ 17 + 1, ProgressReporting -> True]
| |
アプリケーション (22)
基本的なアプリケーション (7)
PrimePi関数を可視化する:
Grid[Prepend[Table[{"10" ^ n, PrimePi[10 ^ n]}, {n, 1, 10}], {"x", "π(x)"}], ...]PrimePiの螺線:
ListPolarPlot[Table[{Mod[π / 2 - n 4π / 50, 2π], PrimePi[n]}, {n, 50}], ...]hexagonalSpiral[n_] := {Re[#], Im[#]}& /@ Fold[Join[#1, Last[#1] + Exp[I Pi / 3] ^ #2Range[#2 / 2]]&, {0}, Range[n]]spiral = hexagonalSpiral[25];primes = spiral[[Prime[Range[PrimePi[Length[spiral]]]]]];ListPlot[spiral, ...]ListContourPlot[Table[{x = n, y = PrimePi[n]}, {n, 1, 25}]]RiemannR関数とPrimePi関数の差をプロットする:
r = 0;c = -1;ListPolarPlot[{Table[{i * Pi / 8, x = RiemannR[i] - PrimePi[i];If[x > c, c = x;r = r + 1];PrimePi[i] * r / i}, {i, 1000}]}, Rule[...]]Prime[Range[PrimePi[100]]]primecount[{x_, y_}] := PrimePi[y + 1] - PrimePi[x - 1]primecount[{5, 15}]近似 (7)
PrimePiの近似:
PrimePi[5000]5000 / Log[5000.]LogIntegral[5000.]RiemannR[5000.]PrimePiを推定値と比較してプロットする:
Plot[{PrimePi[x], x / Log[x], LogIntegral[x], RiemannR[x]}, {x, 1.5, 100}, Rule[...]]Plot[{x / Log[x], PrimePi[x], x / (Log[x] - 1.112)}, {x, 3, 100}, Rule[...]]Plot[{(x/HarmonicNumber[x] - 3 / 2), PrimePi[x]}, {x, 50, 200}, Rule[...]]リーマン(Riemann)予想が正しければ,
について
である:
Plot[{Abs[PrimePi[x] - LogIntegral[x]], Sqrt[x]Log[x] / (8 * Pi)}, {x, 2657, 3000}, PlotLegends -> "Expressions"]EulerPhiを使って素数を数える:
primecount[x_] := Underoverscript[∑, k = 2, ⌊x⌋]⌊(EulerPhi[k]/k - 1)⌋Table[primecount[n], {n, 0, 10}]Table[PrimePi[n], {n, 0, 10}]Hardy–Wrightの式に基づいてPrimePiを計算する:
primecount[x_] := Sum[Mod[(j - 2)!, j], {j, 4, x}]Table[primecount[n], {n, 5, 10}]Table[PrimePi[n], {n, 5, 10}]Accumulateを使ってPrimePiを計算する:
Accumulate[Table[Boole[PrimeQ[n]], {n, 1, 10}]]Table[PrimePi[n], {n, 1, 10}]整数論 (8)
TwinPrimes[n_] := Pick[#, PrimeQ[# + 2]]&[Prime[Range[PrimePi[n]]]]TwinPrimes[100]TwinPrimePi[n_] := Length[Pick[#, PrimeQ[# + 2]]]&[Prime[Range[PrimePi[n]]]]双子素数とPrimePiの列をプロットする:
ListStepPlot[{Table[TwinPrimePi[n], {n, 1, 100}], Table[PrimePi[n], {n, 1, 100}]}]![]()
番目のラマヌジャン素数は,すべての
について
である最小の数
である:
list = Table[PrimePi[n] - PrimePi[n / 2], {n, 10 ^ 4}];ramanujanPrime = 1 + Last[Position[list, #]][[1]]& /@ Range[0, 50];ramanujanPrimePi[n_] := Count[ramanujanPrime, _ ? (# ≤ n&)]Plot[ramanujanPrimePi[n], {n, 0, 100}]ラマヌジャン素数とPrimePiの数を比べる:
Plot[{ramanujanPrimePi[n], PrimePi[n]}, {n, 0, 100}]![]()
番目の素数までの素数積(階乗に似た,連続する素数の乗算)を計算する:
primorial[0] := 1
primorial[1] := 2
primorial[n_] := Times@@Prime@Range[n];primorial[5]DiscretePlot[{Log[n!], Log[Times@@Prime[Range[PrimePi[n]]]]}, {n, 1, 50}]ListLinePlot[If[True, Differences, Identity][Table[Log[(n!/Times@@Prime[Range[PrimePi[n]]])], {n, 1, 100, 1}]], Filling -> Axis]チェビシェフ(Chebyshev)のシータ関数をプロットする:
chebyshevTheta[n_] := Log[primorial[PrimePi[n]]];Plot[chebyshevTheta[n], {n, 1, 100}]DiscretePlot[{chebyshevTheta[n], PrimePi[n]}, {n, 1, 100}]primePowers[n_] := Union@@Table[Prime[Range[PrimePi[n ^ (1 / x)]]] ^ x, {x, Log2[n]}]primePowers[10]PrimePowerQ[%]primePowerPi[n_] := PrimePi[n] + Sum[Floor@Log[Prime[k], n] - 1, {k, PrimePi[Sqrt[n]//Floor]}]primePowerPi[10]DiscretePlot[primePowerPi[n], {n, 1, 100}]素数ベキの数をPrimePiと比較する:
DiscretePlot[{primePowerPi[n], PrimePi[n]}, {n, 1, 100}]
について
であるとするHardy–Littlewoodの第2の予想を可視化する:
ArrayPlot[((Outer[Plus, #, #]&)[PrimePi[Range[2, 20]]] - Outer[PrimePi[+##1]&, #, #]&)[Range[2, 20]], Rule[...]]
であるなら
は2より大きい連続する素数であり,
と
の間に少なくとも4つの素数があるとするブロカール(Brocard)の予想をプロットする:
ListStepPlot[-Subtract@@@Partition[PrimePi[Prime[Range[100]] ^ 2], 2, 1], Rule[...]]ゴールドバッハ(Goldbach)の分割,つまり
となるような素数(
,
)のペアを求める:
goldbachPartitions[n_] := IntegerPartitions[2n, {2}, Prime[Range[PrimePi[2n]]]]goldbachPartitions[50]ListPlot[Transpose[{Range[4, 1000, 2], Length /@ Table[IntegerPartitions[i, 2, Table[Prime[n], {n, PrimePi[i]}]], {i, 4, 1000, 2}]}], Rule[...]]Cases[Range[100], n_ /; PrimePi[n] == EulerPhi[n]]DiscretePlot[{PrimePi[n], EulerPhi[n]}, {n, 1, 22}, Rule[...]]特性と関係 (5)
PrimePiの最大定義域:
FunctionDomain[PrimePi[x], x, Complexes]PrimePiは
のとき
と漸近的に等しい:
AsymptoticEquivalent[PrimePi[x], x / Log[x], x -> Infinity]LogIntegralとも漸近的に等しい:
AsymptoticEquivalent[PrimePi[x], LogIntegral[x], x -> Infinity]PrimePi[Prime[100]]PrimeQを使って素数を数える:
Count[Table[PrimeQ[n], {n, 1, 1000}], True]PrimePi[1000]Entity["MathematicalFunction", "PrimePi"]PrimePiの積分表現:
Entity["MathematicalFunction", "PrimePi"]["IntegralRepresentations"]考えられる問題 (1)
おもしろい例題 (3)
PrimePiの値の差に基づいて彩色されたウラム(Ulam)の螺線:
ulam[n_] := Partition[Permute[Range[n ^ 2], Accumulate[Take[Flatten[{{n ^ 2 + 1} / 2, Table
[(-1) ^ j i, {j, n}, {i, {-1, n}}, {j}]}], n ^ 2]]], n]ArrayPlot[PrimePi[ulam[101] + 10] - PrimePi[ulam[101]], Rule[...]]PrimePi関数に基づいた経路を生成する:
Graphics[Line[AnglePath[Table[PrimePi[n], {n, 1, 1000}]], Rule[...]]]
より小さい素数によって生成された有向グラフを使って多面体を構築する:
vertexcoords[p_] :=
GraphEmbedding[Graph3D[Flatten[Table[i -> Mod[i * q, p], {i, 1, p - 1}, {q, Prime[Range[PrimePi[p] - 1]]}]]]]Table[ConvexHullMesh[vertexcoords[p], Rule[...]], {p, Prime[Range[4, 7]]}]テクニカルノート
履歴
1991 で導入 (2.0) | 2020 で更新 (12.1) ▪ 2021 (12.3)
テキスト
Wolfram Research (1991), PrimePi, Wolfram言語関数, https://reference.wolfram.com/language/ref/PrimePi.html (2021年に更新).
CMS
Wolfram Language. 1991. "PrimePi." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/PrimePi.html.
APA
Wolfram Language. (1991). PrimePi. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/PrimePi.html
BibTeX
@misc{reference.wolfram_2026_primepi, author="Wolfram Research", title="{PrimePi}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/PrimePi.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_primepi, organization={Wolfram Research}, title={PrimePi}, year={2021}, url={https://reference.wolfram.com/language/ref/PrimePi.html}, note=[Accessed: 03-November-2026]}