डिरिचलेट कन्वेंशन


20

डरिकलेट कन्वेंशन एक विशेष प्रकार का कनवल्शन है जो संख्या सिद्धांत में एक बहुत ही उपयोगी उपकरण के रूप में प्रकट होता है। यह अंकगणितीय कार्यों के सेट पर संचालित होता है

चुनौती

यह देखते हुए दो गणित कार्यों ,जी (यानी कार्यों ,जी:एनआर गणना) Dirichlet घुमाव (*जी):एनआर नीचे परिभाषित किए गए।

विवरण

  • हम सम्मेलन का उपयोग 0एन={1,2,3,...}
  • Dirichlet घुमाव के *जी दो गणित कार्यों का ,जी फिर अंकगणितीय समारोह है, और यह के रूप में परिभाषित किया गया है
    (*जी)(n)=Σ|n(n)जी()=Σमैंजे=n(मैं)जी(जे)
    (दोनों समतुल्य समतुल्य हैं। व्यंजक|nअर्थ हैएनविभाजितn, इसलिए योगnके प्राकृतिकविभाजकोंके ऊपर है। इसी प्रकार हमi=nको उप-विभाजितकर सकते हैं।nमैं=nएन,जे=एनऔर हम दूसरे बराबर तैयार मिलता है। आप इस अंकन करने के लिए इस्तेमाल नहीं कर रहे हैं वहाँ नीचे में कदम उदाहरण के द्वारा एक कदम है) बस विस्तृत करने के लिए (यह इस चुनौती के लिए सीधे प्रासंगिक) नहीं है:। परिभाषा के उत्पाद कंप्यूटिंग से आता हैDirichlet श्रृंखला:
    (Σnएन(n)nरों)(Σnएनजी(n)nरों)=Σnएन(*जी)(n)nरों
  • इनपुट को दो ब्लैक बॉक्स फ़ंक्शन के रूप में दिया गया है । वैकल्पिक रूप से, आप एक अनंत सूची, एक जनरेटर, एक स्ट्रीम या कुछ इसी तरह का उपयोग कर सकते हैं जो असीमित संख्या में मूल्यों का उत्पादन कर सकते हैं।
  • वहाँ दो उत्पादन तरीके हैं: या तो एक समारोह *जी दिया जाता है, या वैकल्पिक रूप से आप एक अतिरिक्त इनपुट ले ले जा सकते हैं nएन और वापसी (*जी)(n) सीधे।
  • सादगी के लिए आप मान सकते हैं कि एन प्रत्येक तत्व को उदाहरण के साथ एक सकारात्मक 32-बिट इंट का प्रतिनिधित्व किया जा सकता है।
  • सादगी के लिए आप यह भी मान सकते हैं कि प्रत्येक प्रविष्टि आर को एक वास्तविक फ्लोटिंग पॉइंट संख्या जैसे उदाहरण द्वारा दर्शाया जा सकता है।

उदाहरण

आइए हम पहले कुछ कार्यों को परिभाषित करें। ध्यान दें कि प्रत्येक परिभाषा के नीचे संख्याओं की सूची उस फ़ंक्शन के पहले कुछ मानों का प्रतिनिधित्व करती है।

  • गुणक पहचान ( A000007 )
    ε(n)={1n=10n>1
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
  • निरंतर इकाई फ़ंक्शन ( A000012 )
    1(n)=1n
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
  • पहचान समारोह ( A000027 )
    मैं(n)=nn
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ...
  • Möbius फ़ंक्शन ( A008683) )
    μ(n)={(-1) अगर n चौकोर है और  के प्राइमफेक्टर्स की संख्या है n0 अन्यथा 
    1, -1, -1, 0, -1, 1, -1, 0, 0, 1, -1, 0, -1, 1, 1, 0, -1, 0, -1, ...
  • यूलर totient समारोह ( A000010 )
    φ(n)=nΠपी|n(1-1पी)
    1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8, ...
  • लिउविले फंक्शन ( A008836 )
    λ(n)=(-1)
    जहां गुणनफल के साथ गिने गए n के प्रमुख कारकों की संख्या है 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, ...
  • भाजक योग समारोह ( A000203 )
    σ(n)=Σ|n
    1, 3, 4, 7, 6, 12, 8, 15, 13, 18, 12, 28, 14, 24, 24, 31, 18, 39, 20, ...
  • भाजक गिनती समारोह ( A000005 )
    τ(n)=Σ|n1
    1, 2, 2, 3, 2, 4, 2, 4, 3, 4, 2, 6, 2, 4, 4, 5, 2, 6, 2, 6, 4, 4, 2, 8, ...
  • वर्ग संख्या की विशेषता समारोह ( A010052 )
    रोंक्ष(n)={1 अगर n एक वर्ग संख्या है0अन्यथा
    1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ...

फिर हमारे पास निम्नलिखित उदाहरण हैं:

  • ε=1*μ
  • =ε*
  • ε=λ*|μ|
  • σ=φ*τ
  • मैं=σ*μ औरσ=मैं*1
  • रोंक्ष=λ*1 औरλ=μ*रोंक्ष
  • τ=11 और1=τμ
  • id=φ1 औरφ=idμ

मोबीअस उलटा के परिणाम के लिए अंतिम हैं : किसी भी f,g समीकरणg=f1 के बराबर हैf=gμ

स्टेप बाय स्टेप उदाहरण

यह एक उदाहरण है जो परिभाषा में उपयोग किए गए अंकन से परिचित नहीं लोगों के लिए कदम से गणना की जाती है। कार्यों पर विचार करें f=μ और g=σ । अब हम उनके घुमाव के मूल्यांकन करेंगेμσ मेंn=12 । उनकी पहली कुछ शर्तें नीचे दी गई तालिका में सूचीबद्ध हैं।

ff(1)f(2)f(3)f(4)f(5)f(6)f(7)f(8)f(9)f(10)f(11)f(12)μ111011100110σ134761281513181228

सभी प्राकृतिक संख्या से अधिक राशि दोहराता dN कि विभाजन n=12 , इस प्रकार d के सभी प्राकृतिक divisors मान लिया गया है n=12=223 । ये d=1,2,3,4,6,12 । प्रत्येक योज्य में, हम का मूल्यांकन g=σ में d और गुणा इसके साथ f=μ पर मूल्यांकन किया जाता nd । अब हम निष्कर्ष निकाल सकते हैं

(μ*σ)(12)=μ(12)σ(1)+μ(6)σ(2)+μ(4)σ(3)+μ(3)σ(4)+μ(2)σ(6)+μ(1)σ(12)=01+13+04+(-1)7+(-1)12+128=0+310-7-12+28=12=मैं(12)

जवाबों:


5

झुक , 108 100 95 78 75 बाइट्स

def d(f g:_->int)(n):=(list.iota n).foldr(λd s,ite(n%d=0)(s+f d*g(n/d))s)0

इसे ऑनलाइन आज़माएं!

सभी कार्यों के साथ अधिक वृषण।


क्या मेमना वास्तव में चार बाइट्स से अधिक महंगा है fun ?
मारियो कार्नेइरो

लैम्ब्डा तीन बाइट्स है, मुझे लगता है
लीकी नून

मुझे लगता है कि यह UTF8 में दो है (ग्रीक बहुत कम यूनिकोड है)
मारियो कार्नेइरो

आप सही हे। मैंने आयात को भी पूरा किया
लीक

मैंने cond
लीकी नून

4

हास्केल , 46 बाइट्स

(f!g)n=sum[f i*g(div n i)|i<-[1..n],mod n i<1]

इसे ऑनलाइन आज़माएं!

-6 बाइट्स और एक बड़ी चुनौती के लिए त्रुटिपूर्ण धन्यवाद! और दूसरे -6 के लिए H.PWiz का धन्यवाद!


सरल यहां छोटा है
H.PWiz

@ H.PWiz यह बहुत चालाक है - मैंने ऐसा करने के बारे में सोचा भी नहीं था!
मेवो

3

पायथन 3 , 59 बाइट्स

lambda f,g,n:sum(f(d)*g(n//d)for d in range(1,n+1)if 1>n%d)

इसे ऑनलाइन आज़माएं!


के //बजाय वास्तव में जरूरत है /?
श्री Xcoder

/सही फ्लोट का उत्पादन होगा?
लीक नन

क्योंकि dके एक भाजक है nपरिभाषा के द्वारा, का आंशिक हिस्सा n/dशून्य है, इसलिए वहाँ चल बिन्दु अंकगणितीय साथ किसी भी मुद्दे नहीं होना चाहिए। आंशिक भाग शून्य वाले फ़्लोट्स पाइथोनिक प्रयोजनों के लिए पर्याप्त रूप से करीब हैं, और फ़ंक्शन का आउटपुट एक वास्तविक संख्या है, इसलिए n/dइसके बजाय n//dठीक होना चाहिए।
मेगो

3

वोल्फ्राम भाषा (गणितज्ञ) , 17 बाइट्स

बेशक मैथेमेटिका में एक अंतर्निहित है। यह कई उदाहरण कार्यों को जानने के लिए भी होता है। मैंने कुछ काम करने के उदाहरणों को शामिल किया है।

DirichletConvolve

इसे ऑनलाइन आज़माएं!


2

++ , 51 बाइट्स जोड़ें

D,g,@~,$z€¦~¦*
D,f,@@@,@b[VdF#B]dbRzGb]$dbL$@*z€g¦+

इसे ऑनलाइन आज़माएं!

तर्क के रूप में दो पूर्व निर्धारित कार्यों ले जाता है, के साथ साथ n , और आउटपुट (*जी)(n)

यह काम किस प्रकार करता है

D,g,		; Define a helper function, $g
	@~,	; $g takes a single argument, an array, and splats that array to the stack
		; $g takes the argument e.g. [[τ(x) φ(x)] [3 4]]
		; STACK : 			[[τ(x) φ(x)] [3 4]]
	$z	; Swap and zip:			[[3 τ(x)] [4 φ(x)]]
	€¦~	; Reduce each by execution:	[[τ(3) φ(4)]]
	¦*	; Take the product and return:	τ(3)⋅φ(4) = 4

D,f,		; Define the main function, $f
	@@@,	; $f takes three arguments: φ(x), τ(x) and n (Let n = 12)
		; STACK:			[φ(x) τ(x) 12]
	@	; Reverse the stack:		[12 τ(x) φ(x)]
	b[V	; Pair and save:		[12]			Saved: [τ(x) φ(x)]
	dF#B]	; List of factors:		[[1 2 3 4 6 12]]
	dbR	; Copy and reverse:		[[1 2 3 4 6 12] [12 6 4 3 2 1]]
	z	; Zip together:			[[[1 12] [2 6] [3 4] [4 3] [6 2] [12 1]]]
	Gb]	; Push Saved:			[[[1 12] [2 6] [3 4] [4 3] [6 2] [12 1]] [[τ(x) φ(x)]]]
	$dbL	; Number of dividors:		[[[τ(x) φ(x)]] [[1 12] [2 6] [3 4] [4 3] [6 2] [12 1]] 6]
	$@*	; Repeat:			[[[1 12] [2 6] [3 4] [4 3] [6 2] [12 1]] [[τ(x) φ(x)] [τ(x) φ(x)] [τ(x) φ(x)] [τ(x) φ(x)] [τ(x) φ(x)] [τ(x) φ(x)]]]
	z	; Zip:				[[[τ(x) φ(x)] [1 12]] [[τ(x) φ(x)] [2 6]] [[τ(x) φ(x)] [3 4]] [[τ(x) φ(x)] [4 3]] [[τ(x) φ(x)] [6 2]] [[τ(x) φ(x)] [12 1]]]
	€g	; Run $g over each subarray:	[[4 4 4 6 4 6]]
	¦+	; Take the sum and return:	28

2

आर , 58 बाइट्स

function(n,f,g){for(i in (1:n)[!n%%1:n])F=F+f(i)*g(n/i)
F}

इसे ऑनलाइन आज़माएं!

लेता है n, fऔर g। सौभाग्य से numbersपैकेज में पहले से लागू कई कार्य हैं।

यदि वेक्टर संस्करण उपलब्ध थे, जो प्रत्येक के साथ लपेटकर संभव है Vectorize, तो निम्नलिखित 45 बाइट संस्करण संभव है:

आर , 45 बाइट्स

function(n,f,g,x=1:n,i=x[!n%%x])f(i)%*%g(n/i)

इसे ऑनलाइन आज़माएं!


2

APL (Dyalog Classic) , 20 बाइट्स

{(⍺⍺¨∘⌽+.×⍵⍵¨)∪⍵∨⍳⍵}

साथ में ⎕IO←1

इसे ऑनलाइन आज़माएं!

हल करना आसान, कठिन परीक्षा - आमतौर पर मेरी चुनौती नहीं है। फिर भी, मुझे यह बहुत पसंद आया!

{ }एक डाइएडिक ऑपरेटर को परिभाषित करता है, जिसके ऑपरेंड ⍺⍺और ⍵⍵दो कार्य दोषी हैं; संख्यात्मक तर्क है

∪⍵∨⍳⍵के divisors हैं आरोही क्रम, यानी अद्वितीय (में ) एलसीएमएस की ( ) की यह करने के लिए सभी प्राकृतिक संख्या के साथ ( )

⍵⍵¨ प्रत्येक के लिए सही ऑपरेंड लागू करें

⍺⍺¨∘⌽ प्रत्येक में बाएं ऑपरेंड को रिवर्स में लागू करें

+.× आंतरिक उत्पाद - संबंधित तत्वों और योग को गुणा करें


यूनिकोड पहचानकर्ताओं के कारण ngn / apl में बेहतर दिखता है, लेकिन 1-अनुक्रमण के कारण 2 अतिरिक्त बाइट्स लेता है।


बहुत यकीन है कि यह ngn / apl में 27 अतिरिक्त बाइट्स लेता है ...
एरिक आउटगोल्फर



1

जावास्क्रिप्ट (ईएस 6), 47 बाइट्स

के रूप में इनपुट लेता है (f)(g)(n)

f=>g=>h=(n,d=n)=>d&&!(n%d)*f(n/d)*g(d)+h(n,d-1)

इसे ऑनलाइन आज़माएं!

उदाहरण

liouville =
n => (-1) ** (D = (n, k = 2) => k > n ? 0 : (n % k ? D(n, k + 1) : 1 + D(n / k, k)))(n)

mobius =
n => (M = (n, k = 1) => n % ++k ? k > n || M(n, k) : n / k % k && -M(n / k, k))(n)

sq =
n => +!((n ** 0.5) % 1)

identity =
n => 1

// sq = liouville * identity
console.log([...Array(25)].map((_, n) => F(liouville)(identity)(n + 1)))

// liouville = mobius * sq
console.log([...Array(20)].map((_, n) => F(mobius)(sq)(n + 1)))

1

सी (जीसीसी) , 108 बाइट्स

#define F float
F c(F(*f)(int),F(*g)(int),int n){F s=0;for(int d=0;d++<n;)if(n%d<1)s+=f(n/d)*g(d);return s;}

सीधे कार्यान्वयन, बेशर्मी से लीक नन के अजगर जवाब से चोरी हो गई ।

Ungolfed:

float c(float (*f)(int), float (*g)(int), int n) {
    float s = 0;
    for(int d = 1; d <= n;++d) {
        if(n % d == 0) {
            s += f(n / d) * g(d);
        }
    }
    return s;
}

इसे ऑनलाइन आज़माएं!


1

एफ #, 72 बाइट्स

let x f g n=Seq.filter(fun d->n%d=0){1..n}|>Seq.sumBy(fun d->f(n/d)*g d)

दो कार्यों ले जाता है fऔर gऔर एक प्राकृतिक संख्या ndस्वाभाविक रूप से विभाजित नहीं है कि के मूल्यों को फिल्टर करता है n। फिर मूल्यांकन करता है f(n/d) और g(d), उन्हें एक साथ गुणा करता है, और परिणामों को बताता है।



0

एपीएल (एनएआरएस), 47 चार्ट, 94 बाइट्स

{(m⍵[1])×n⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}

जहां m और n फ़ंक्शन हैं उन्हें एक का उपयोग करना होगा (क्योंकि मुझे नहीं पता कि एपीएल में एक फ़ंक्शन में फ़ंक्शन के एक सरणी को कैसे कॉल किया जाए)। मोबियस फ़ंक्शन के गुणन के ऊपर उदाहरण का उपयोग करना (यहाँ यह 12 and है) और भाजक फ़ंक्शन का योग (यहाँ यह 11 12 है) मान 12 के लिए कि गुणन होगा:

  {(12π⍵[1])×11π⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}12
12

अगर किसी को कुछ अन्य मूल्य की गणना करनी है:

  {(12π⍵[1])×11π⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}1002
1002
  {(12π⍵[1])×11π⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}1001
1001
  {(12π⍵[1])×11π⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}20000x
20000 

उदाहरण के लिए पहले 2000 नंबर के फंक्शन रिजल्ट की पहचान है या नहीं

  (⍳2000)≡{(12π⍵[1])×11π⍵[2]}{+/⍺⍺¨{k←⍳⍵⋄(⍵÷b),¨b←k/⍨0=k∣⍵}⍵}¨⍳2000
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.