তুচ্ছ ক্রমের একটি মোচড়


15

ভূমিকা

পূর্ণসংখ্যার একটি ক্রম বিবেচনা করুন সংজ্ঞায়িত নিম্নরূপ:

  1. f (2) = 2
  2. যদি এন একটি বিজোড় প্রাইম হয় তবে f (n) = (f (n-1) + f (n + 1)) / 2
  3. যদি n = p · q সংমিশ্রিত হয় তবে f (n) = f (p) · f (q)

প্রতিটি এন ≥ 2 এর জন্য এফ (এন) = এন দেখতে খুব অসুবিধা হয় না , এবং এইভাবে F গণনা খুব আকর্ষণীয় চ্যালেঞ্জ হতে পারে না। আসুন সংজ্ঞাটি একটি মোড় তৈরি করুন: প্রথম কেস অর্ধেক এবং দ্বিতীয় ক্ষেত্রে দ্বিগুণ। আমরা নীচে একটি নতুন সিকোয়েন্স জি সংজ্ঞায়িত করেছি:

  1. g (2) = 1
  2. যদি n একটি বিজোড় প্রাইম হয়, তবে g (n) = g (n-1) + g (n + 1)
  3. যদি n = p · q সংমিশ্রিত হয়, তবে g (n) = g (p) · g (q)

কাজটি

আপনার কাজটি হ'ল ইনপুট হিসাবে পূর্ণসংখ্যা n ≥ 2 গ্রহণ করা এবং আউটপুট হিসাবে g (n) উত্পাদন করা। আপনাকে পূর্ণসংখ্যার ওভারফ্লো সম্পর্কে চিন্তা করার দরকার নেই, তবে আপনার g (1025) = 81 সঠিকভাবে গণনা করতে সক্ষম হওয়া উচিত এবং আপনার অ্যালগরিদম তাত্ত্বিকভাবে নির্বিচারে বড় ইনপুটগুলির জন্য কাজ করা উচিত work

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জিতেছে।

উদাহরণ

আমি সেই জি (1025) = 81 এর উপরে দাবি করেছি , সুতরাং আসুন এটি হাতে হাতে গণনা করুন। 1025 এর প্রাথমিক গুণনীয়ক দেয়

1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41)

যেহেতু 41 প্রধান, আমরা পাই

g(41) = g(40) + g(42)

এরপরে, আমরা 40 এবং 42 এর প্রধান গুণকগুলি গণনা করি :

40 = 2*2*2*5 => g(40) = g(2)*g(2)*g(2)*g(5) = g(5)
42 = 2*3*7 => g(42) = g(2)*g(3)*g(7) = g(3)*g(7)

এই ছোট প্রাইমস জন্য আমরা পেতে

g(3) = g(2) + g(4) = 1 + 1 = 2
g(5) = g(4) + g(6) = 1 + 2 = 3
g(7) = g(6) + g(8) = 2 + 1 = 3

এই যে মানে

g(41) = g(40) + g(42) = g(5) + g(3)*g(7) = 3 + 2*3 = 9

এবং

g(1025) = g(5)*g(5)*g(41) = 3*3*9 = 81

পরীক্ষার মামলা

50 টি পর্যন্ত জি এর মান এখানে দেওয়া আছে ।

2 -> 1
3 -> 2
4 -> 1
5 -> 3
6 -> 2
7 -> 3
8 -> 1
9 -> 4
10 -> 3
11 -> 5
12 -> 2
13 -> 5
14 -> 3
15 -> 6
16 -> 1
17 -> 5
18 -> 4
19 -> 7
20 -> 3
21 -> 6
22 -> 5
23 -> 7
24 -> 2
25 -> 9
26 -> 5
27 -> 8
28 -> 3
29 -> 9
30 -> 6
31 -> 7
32 -> 1
33 -> 10
34 -> 5
35 -> 9
36 -> 4
37 -> 11
38 -> 7
39 -> 10
40 -> 3
41 -> 9
42 -> 6
43 -> 11
44 -> 5
45 -> 12
46 -> 7
47 -> 9
48 -> 2
49 -> 9
50 -> 9

Eerily অনুরূপ A002487 , এবং এখনও না (এ বিভিন্ন 15, 21, 25, 29, 33, 41, এবং একটি গুচ্ছ আরো, কিন্তু আমি কেন যেকোনো বাস্তব প্যাটার্ন খুঁজে পাচ্ছি না।)
গাব্রিয়েল Benamy

@ গ্যাব্রিয়েল বেনামি ওয়েল, আমার ক্রমটিও সন্তুষ্ট a(2*n) = a(n), এবং a(2*n+1) = a(n) + a(n+1)যদি 2*n+1প্রধান হয় তবে তা ধরে রাখে । অন্যান্য অনেক বিজোড় সংখ্যার জন্য ক্রমগুলি সম্ভবত কাকতালীয়ভাবে সম্মত হয়।
Zgarb

সত্য ফিরে আসছে1 এর পরিবর্তে গ্রহণযোগ্য?
ডেনিস

@ ডেনিস চ্যালেঞ্জটি কোনও সংখ্যার ফাংশনকে মূল্যায়নের বিষয়ে, কোনও সিদ্ধান্তের সমস্যা নয়, তাই আমি অনুমান করব না।
পাভেল

1
@ পাভেল যদিও পক্ষে এবং কমপক্ষে পাইথনে সত্যিকারের পক্ষে প্রচুর সমর্থন রয়েছে , সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে 1 এর মতো সত্য কাজ করে।
ডেনিস

উত্তর:


7

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

x#a|x<3=1|a>x=a#2+(x-1)#2|mod x a<1,a<x=a#2*div x a#2|b<-a+1=x#b
(#2)

ব্যবহারের উদাহরণ: (#2) 1025->81

প্যারামিটারটি aগণনা করা হয় যতক্ষণ না এটি বিভাজিত হয় xবা এটি পৌঁছায় নাx (অর্থাত্ xপ্রধান)। এটা এক বাইট জন্য পরীক্ষা খাটো a > xএবং আরও শর্ত (যোগ a < x) পরিবর্তে পরীক্ষা মডুলাস পরীক্ষা a == x, কারণ সাবেক শুশ্রূষা aকরার x+1, যা recursive কল সাহায্য করে। তুলনা করা:

|a==x=(x+1)#2+(x-1)#2|mod x a<1=
|a>x=a#2+(x-1)#2|mod x a<1,a<x=

4

জেলি , 18 বাইট

‘;’Ñ€Sµ1n2$?
ÆfÇ€P

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

এটি মূলত স্পেসিফিকেশনের সরাসরি অনুবাদ। (কিছুটা চিন্তা করার পরে, আমি সন্দেহ করি যে সিকোয়েন্সটি সন্ধানের জন্য যদি কোনও বন্ধ সূত্র থাকে তবে এটি সরাসরি পদ্ধতির চেয়ে বেশি বাইট হবে be)

ব্যাখ্যা

আমাদের দুটি পারস্পরিক পুনরাবৃত্তি ফাংশন রয়েছে। এখানে সহায়ক ফাংশন (যা প্রাইম এন এর জন্য জি (এন) গণনা করে ):

‘;’Ñ€Sµ1n2$?
           ?  If
        n2$     the input is not equal to 2 (parsed as a group due to $)
      µ       then do all the following (parsed as a group due to µ):
‘;’             Find the list [n+1, n-1];
   р           Call the main program on each element (i.e. [g(n+1),g(n-1)]);
     S          and return the sum of the list (i.e. g(n+1)+g(n-1)).
              Otherwise:
       1        Return 1.

এবং এখানে মূল প্রোগ্রামটি রয়েছে, যা কোনও এন এর জন্য জি (এন) গণনা করে :

ÆfÇ€P
Æf            Factorize the input into its prime factors;
  ǀ          Call the helper function on each element of that list;
    P         Then take the product.

স্পষ্টতই, আমরা যদি একটি প্রধান সংখ্যাটিতে মূল প্রোগ্রামটি কল করি তবে সমস্ত কিছু বাদে কোনও বিকল্প নেই Ç, সুতরাং এটি জি (এন) কে এই ক্ষেত্রে ফিরে আসে । প্রোগ্রামের বাকি অংশগুলি সম্মিলিত এন এর জন্য আচরণ পরিচালনা করে ।


4

জাভাস্ক্রিপ্ট (ES6), 59 বাইট

f=(n,d=2)=>n-2?d<n?n%d?f(n,d+1):f(n/d)*f(d):f(n-1)+f(n+1):1

পরীক্ষা


3

পাইথন 2, 85 69 বাইট

g=lambda n,k=3:(n&~-n<1)or n%k and g(n,k+2)or(g(k+1)+g(k-1))*g(n/k,k)

3

জেলি , 13 বাইট

Æfḟ2µ‘,’߀€SP

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

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

Æfḟ2µ‘,’߀€SP  Main link. Argument: n

Æf             Yield the array of prime factors of n.
  ḟ2           Remove all occurrences of 2.
    µ          Begin a new, monadic chain. Argument: A (array of odd prime factors)
     ‘         Increment all elements of A.
       ’       Decrement all elements of A.
      ,        Pair; yield [A+1, A-1].
        ߀€    Map the main link over all elements of A+1 and A-1.
           S   Column-wise reduce by addition.
            P  Reduce by multiplication.

3

ক্লোজার, 126 বাইট

(defn t[n](if(= n 2)1(let[a(+(.indexOf(for[b(range 2 n)](mod n b)2)0))](if(> a 1)(*(t(/ n a))(t a))(+(t(dec n))(t(inc n)))))))

হ্যাঁ! পাইথন উত্তর হিসাবে এটি প্রায় দ্বিগুণ!

অবহেলিত এবং একটি ব্যাখ্যা:

(defn trivial [n]
  ; Define the function.
  (if (= n 2) 1
  ; If the number is 2, return 1
    (let [a (+ 2 (.indexOf (for [b (range 2 n)] (mod n b)) 0))]
      ; Let a be the lowest prime factor of n
      (if (> a 1)
        ; The .indexOf function returns -1 if a is a prime, so -1 + 2 = 1.
        ; Checks if a is a prime.
        (* (trivial (/ n a)) (trivial a))
        ; If a is prime, return the trivial(a/n) * trivial(a).
        (+ (trivial (dec n)) (trivial (inc n)))))))
        ; Else, return trivial(n-1) + trivial(n + 1).

কুল, আমি জানতাম না আপনি করতে পারবেন (.indexOf (for [...] ...) x)!
নিকোনিহার

বর্তমান 118 বাইট সংস্করণ 11 এর জন্য 11 রিটার্ন দেয় (t 1025), সম্ভবত ifএটিই উদ্দেশ্য ছিল :when? তবে nthখালি তালিকা নিক্ষেপ করা হয় IndexOutOfBoundsException
নিকোনিহার

@ নিকোনিয়ার হ্যাঁ, এটি হওয়া উচিত নয় - আমি এটিও পরীক্ষা করে দেখেছি এবং কোডটি অবৈধ। মূল সংস্করণে ফিরে আসবে।
ক্লিমিক

2

গণিত, 83 বাইট

Which[#<4,#-1,PrimeQ@#,Tr[#0/@({#-1,#+1}/2)],0<1,1##&@@#0/@Divisors@#~Part~{2,-2}]&

একটি ইতিবাচক পূর্ণসংখ্যার যুক্তিটির অপরিবর্তনীয় ফাংশন, কোনও পূর্ণসংখ্যা ফেরত। শেষ যে সমস্ত সংক্ষিপ্ত নয়। Tr[#0/@({#-1,#+1}/2)](ক্ষেত্রে যেখানে ইনপুটটি প্রাইম হয়) আদেশযুক্ত জোড়ের উভয় সদস্যকে ফাংশনটি কল করে {(#-1)/2,(#+1)/2}এবং ফলাফলগুলি যুক্ত করে; এই জরিমানা যেহেতু ফাংশন একই মান আছে (#-1)/2এবং #-1উদাহরণস্বরূপ,। একইভাবে, 1##&@@#0/@Divisors@#~Part~{2,-2}দ্বিতীয়-ক্ষুদ্রতম বিভাজক #এবং এর পরিপূর্ণদৈর্ঘক বিভাজক (দ্বিতীয়-লার্জ্ট বিভাজক) এ ফাংশনটি কল করে এবং উত্তরগুলি একসাথে গুণিত করে।


নামবিহীন পুনরাবৃত্ত ফাংশনগুলি কীভাবে কাজ করে?
পাভেল

1
সম্পর্কে বিভাগটি পরীক্ষা করে দেখুন #0যে এই উত্তর
গ্রেগ মার্টিন

2

Clojure, 120 বাইট

(defn g[n](if(= n 2)1(if-let[F(first(for[i(range 2 n):when(=(mod n i)0)]i))](*(g F)(g(/ n F)))(+(g(dec n))(g(inc n))))))

ব্যবহার :whenএর ভাজক পেতে n, Fহয় nilযদি এই ধরনের কোন ভাজক পাওয়া যায় ( nপ্রধানমন্ত্রী) হয়।


আপনি কি ঝগড়া করতে চান স্যার? এটা চালু. (বন্ধুত্বপূর্ণ প্রতিযোগিতা?)
ক্লাইমিক

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