ডিরিচলেট কনভলিউশন


20

Dirichlet সংবর্তন একটি বিশেষ ধরনের সংবর্তন যে সংখ্যা তত্ত্ব খুব দরকারী হাতিয়ার হিসেবে উপস্থিত হয়। এটি গাণিতিক ক্রিয়াকলাপগুলির সেটে পরিচালনা করে ।

চ্যালেঞ্জ

দুটি গাণিতিক ফাংশন দেওয়া , (অর্থাত্ ফাংশন ,:এনআর ) ডিরিচলেট কনভলিউশন (*):এনআর গণনা করুন : নীচে সংজ্ঞায়িত হিসাবে এনআর

বিস্তারিত

  • আমরা কনভেনশন ব্যবহার 0এন={1,2,3,...}
  • Dirichlet সংবর্তন * দুই গাণিতিক ফাংশন , আবার গাণিতিক ফাংশন, এবং এটা হিসাবে সংজ্ঞায়িত করা হয়
    (*)(এন)=Σ|এন(এন)()=Σআমি=এন(আমি)()
    (উভয় অঙ্কের হয় সমতুল্য অভিব্যক্তি।|এনমানেএনভাগএন, অতএব সমষ্টি প্রাকৃতিক শেষ হয়ে গেছেভাজকএর এনএকইভাবে আমরা subsitute পারবেন না।i=ndN,j=dNএবং আমরা দ্বিতীয় সমতুল্য সূত্রটি পাই। আপনি যদি এই স্বরলিপিটি ব্যবহার করে না থাকেন তবে নীচের দিকে ধাপে ধাপে উদাহরণ রয়েছে)) কেবল ব্যাখ্যা করার জন্য (এটি এই চ্যালেঞ্জের জন্য সরাসরি প্রাসঙ্গিক নয়): সংজ্ঞাটিডিরিচলেট সিরিজেরপণ্যটি গণনা করে আসে:
    (nNf(n)ns)(nNg(n)ns)=nN(fg)(n)ns
  • ইনপুট দুটি ব্ল্যাক বক্স ফাংশন হিসাবে দেওয়া হয় । বিকল্পভাবে, আপনি একটি সীমাহীন তালিকা, একটি জেনারেটর, একটি স্ট্রিম বা অনুরূপ কিছু ব্যবহার করতে পারেন যা সীমাহীন সংখ্যার মান উত্পাদন করতে পারে।
  • দুটি আউটপুট পদ্ধতি রয়েছে: হয় একটি ফাংশন fg ফিরে আসে, অথবা বিকল্পভাবে আপনি অতিরিক্ত ইনপুট নিতে পারেন nN এবং সরাসরি (fg)(n) নিতে পারেন ।
  • সরলতার জন্য আপনি ধরে নিতে পারেন যে N প্রতিটি উপাদান যেমন একটি ধনাত্মক 32-বিট ইন্টের সাথে প্রতিনিধিত্ব করা যায়।
  • সরলতার জন্য আপনি ধরে নিতে পারেন যে প্রতিটি এন্ট্রি R উদাহরণস্বরূপ একটি একক বাস্তব ভাসমান পয়েন্ট সংখ্যা দ্বারা প্রতিনিধিত্ব করা যেতে পারে।

উদাহরণ

আসুন প্রথমে কয়েকটি ফাংশন সংজ্ঞায়িত করি। নোট করুন যে প্রতিটি সংজ্ঞার নীচে সংখ্যাগুলির তালিকা সেই ফাংশনের প্রথম কয়েকটি মান উপস্থাপন করে।

  • গুণক পরিচয় ( 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 )
    id(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)k if n is squarefree and k is the number of Primefactors of n0 otherwise 
    1, -1, -1, 0, -1, 1, -1, 0, 0, 1, -1, 0, -1, 1, 1, 0, -1, 0, -1, ...
  • Euler totient ফাংশন ( A000010 )
    φ(n)=np|n(11p)
    1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8, ...
  • লিউভিলি ফাংশন ( A008836 )
    λ(n)=(1)k
    যেখানে k হ'ল n এর মৌলিক গুণকের সংখ্যা গুণনের সাথে গণনা করা হয় 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, ...
  • বিভাজকের যোগফল ( A000203 )
    σ(n)=d|nd
    1, 3, 4, 7, 6, 12, 8, 15, 13, 18, 12, 28, 14, 24, 24, 31, 18, 39, 20, ...
  • বিভাজক গণনা কার্য ( A000005 )
    τ(n)=d|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 )
    sq(n)={1 if n is a square number0otherwise
    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μ
  • f=ϵff
  • ϵ=λ|μ|
  • σ=φτ
  • id=σμ এবংσ=id1
  • sq=λ1 এবংλ=μsq
  • τ=11 এবং1=τμ
  • id=φ1 এবংφ=idμ

গত ফলত হয় Möbius বিপর্যয় : কোনো জন্য 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

সব স্বাভাবিক সংখ্যার উপর সমষ্টি iterates dN যে ডিভাইড n=12 , এইভাবে d সব প্রাকৃতিক ভাজক অনুমান n=12=223 । এগুলি d=1,2,3,4,6,12 । প্রতিটি summand, আমরা মূল্যায়ন 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 ?
মারিও কার্নেরিও

ল্যাম্বদা তিনটি বাইট, আমি মনে করি
লিক নুন

আমি মনে করি এটি ইউটিএফ 8 এ দুটি (গ্রীকটি বেশ কম ইউনিকোড)
মারিও কার্নেইরো

তুমি ঠিক বলছো. আমি আমদানিটি গল্ফ করেছি
লিকি নুন

আমি cond5
বাইটও

4

হাস্কেল , 46 বাইট

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

এটি অনলাইন চেষ্টা করুন!

-6 বাইট এবং দুর্দান্ত চ্যালেঞ্জের জন্য flawr ধন্যবাদ! এবং অন্য -6 এর জন্য এইচ.পি.উইজকে ধন্যবাদ!


সহজ এখানে ছোট
এইচপিউইজ

@ এইচপিউইজ এটি বেশ চালাক - আমি এটি সেভাবে করার কথা ভাবিনি!
মেগো

3

পাইথন 3 , 59 বাইট

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

এটি অনলাইন চেষ্টা করুন!


হয় //সত্যিই পরিবর্তে প্রয়োজন /?
মিঃ এক্সকোডার

/ভাসমান উত্পাদন করা হবে?
ফাঁস নুন

কারণ সংজ্ঞা দ্বারা 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¦+

এটি অনলাইন চেষ্টা করুন!

দুটি পূর্ব-সংজ্ঞায়িত ফাংশন আর্গুমেন্ট হিসাবে যোগ, এবং এন এবং আউটপুট (*)(এন)

কিভাবে এটা কাজ করে

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

এপিএল (ডায়ালগ ক্লাসিক) , 20 বাইট

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

সঙ্গে ⎕IO←1

এটি অনলাইন চেষ্টা করুন!

সমাধান করা সহজ, পরীক্ষা করা শক্ত - সাধারণত আমার ধরণের চ্যালেঞ্জ নয়। তবুও, আমি এটিকে খুব উপভোগ করেছি!

{ }একটি dyadic অপারেটর যার operands সংজ্ঞায়িত ⍺⍺এবং ⍵⍵দুটি ফাংশন convolved হচ্ছে হয়; সংখ্যার যুক্তি

∪⍵∨⍳⍵এর ভাজক আছে আরোহী আদেশ, অর্থাত অনন্য (ইন ) LCMs এর ( ) এর এটি সব স্বাভাবিক সংখ্যার দিয়ে ( )

⍵⍵¨ প্রত্যেকের জন্য ডান অপরেন্ড প্রয়োগ করুন

⍺⍺¨∘⌽ বিপরীতে প্রতিটি বাম অপারেন্ড প্রয়োগ করুন

+.× অভ্যন্তরীণ পণ্য - আনুষঙ্গিক উপাদান এবং যোগফল


ইউনিকোড শনাক্তকারীদের কারণে এনএনজি / এপিএল একই দেখায় তবে 1-ইনডেক্সিংয়ের কারণে 2 অতিরিক্ত বাইট নেয়।


খুব নিশ্চিত যে এটি এনজিএন / এপিএলে 27 অতিরিক্ত বাইট নেয় ...
এরিক দি আউটগলফার



1

জাভাস্ক্রিপ্ট (ES6), 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এবং একটি প্রাকৃতিক সংখ্যা n। এর মানগুলি ফিল্টার করে যা dপ্রাকৃতিকভাবে ভাগ হয় না n। তারপরে তাদের মূল্যায়ন করে f(n/d) এবং g(d)একত্রে গুণিত করে এবং ফলাফলগুলি যোগ করে।



0

এপিএল (এনএআরএস), 47 টি চর, 94 বাইট

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

যেখানে মি এবং এন হ'ল ফাংশনটি ব্যবহার করতে হবে (এটি কারণ আমি এপিএলে কোনও ফাংশনে একটি ক্রিয়াকে অ্যারে কল করতে জানি না)। মোবিয়াস ফাংশনটির গুণনের উপরে উদাহরণটি ব্যবহার করে (এখানে এটি 12π) এবং 12 টি মানের জন্য বিভাজন ফাংশন (এখানে এটি 11 here) এর যোগফলটি হ'ল: গুণটি হবে:

  {(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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.