मैं एक कारक अंतर से आश्चर्यचकित था कि डैनियल लिचब्लू pointed out प्रमुख कारकों (PrimeOmega
) की संख्या और अलग-अलग प्राइम कारकों (PrimeNu
) की संख्या के बीच अंतर को प्राप्त करने के दो तरीकों से आश्चर्यचकित था, एन। तो मैंने थोड़ा और आगे देखने का फैसला किया।गणित में इन दिनचर्या की सापेक्ष दक्षता क्यों?
फ़ंक्शन g1
और g2
नीचे दिए गए ones डैनियल के साथ-साथ तीन अन्य उपयोग किए गए हैं। वे सभी 1 से एन तक स्क्वायर-फ्री पूर्णांक की संख्या वापस कर देते हैं। लेकिन मतभेद काफी नाटकीय हैं। क्या कोई मतभेदों के पीछे कारणों को समझा सकता है। विशेष रूप से, g5
में इतनी गति का लाभ क्यों प्रदान करता है?
g1[n_] := Count[PrimeOmega[Range[n]] - PrimeNu[Range[n]], 0]
g2[n_] := Count[With[{fax = FactorInteger[#]},
Total[fax[[All, 2]]] - Length[fax]] & /@ Range[n], 0]
g3[n_] := Count[SquareFreeQ/@ Range[n], True]
(* g3[n_] := Count[SquareFreeQ[#] & /@ Range[n], True] Mr.Wizard's suggestion
incorporated above. Better written but no significant increase in speed. *)
g4[n_] := n - Count[MoebiusMu[Range[n]], 0]
g5[n_] := Sum[MoebiusMu[d]*Floor[(n - 1)/d^2], {d, 1, Sqrt[n - 1]}]
तुलना:
n = 2^20;
Timing[g1[n]]
Timing[g2[n]]
Timing[g3[n]]
Timing[g4[n]]
Timing[g5[n]]
परिणाम:
{44.5867, 637461}
{11.4228, 637461}
{4.43416, 637461}
{1.00392, 637461}
{0.004478, 637461}
संपादित करें:
Mysticial संभावना उठाया कि बाद ro यूटिन अपने आदेश के लाभ उठा रहे थे - कि कुछ कैशिंग चल रही हो सकती है।
तो चलो उलटे क्रम में तुलना चलाते हैं: उलट तुलना की
n = 2^20;
Timing[g5[n]]
Timing[g4[n]]
Timing[g3[n]]
Timing[g2[n]]
Timing[g1[n]]
परिणाम:
{0.003755, 637461}
{0.978053, 637461}
{4.59551, 637461}
{11.2047, 637461}
{44.5979, 637461}
फैसले: एक उचित अनुमान है, लेकिन डेटा द्वारा समर्थित नहीं।
रेडलाइन कौन है या क्या है? –
बीटीडब्ल्यू, 'स्क्वायरफ्रीक्यू [#] और/@ रेंज [एन]' वर्बोज़ है; 'स्क्वायरफ्रीक्यू/@ रेंज [एन] 'पर्याप्त होना चाहिए। –
उपरोक्त टिप्पणी पर विस्तार: आपको आम तौर पर फ़ॉर्म 'फ़ंक्शन [#] और' 'का एक शुद्ध फ़ंक्शन देखना चाहिए, यदि आपको अभिव्यक्ति के पहले तत्व को निकालने की आवश्यकता है। उदाहरण के लिए, 'वर्ग [प्रथम [#]] और/@ {{2, 4, 6}, {8, 10, 12}} के बजाय' आप 'Sqrt [#] और @@@ {{2, 4, 6}, {8, 10, 12}} ' –