তুমি কি এখনও হারিয়ে গেছ?


31

আপনার কাজটি পূর্ণসংখ্যার ক্রম A130826 প্রয়োগ করা :

একটি এন হল ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা যেমন একটি এন - এন সম্পূর্ণ 3 এর একাধিক এবং এক বিভাজকের দ্বিগুণ (একটি এন - এন) / 3 ফ্ল্যাভিয়াস দ্বারা উত্পাদিত ক্রমের প্রথম পার্থক্যে n পদ দেয় জোসেফাসের চালনি।

হারিয়েছেন এখনও? ঠিক আছে, এটি আসলে বেশ সহজ।

Flavius জোসেফাস চালনী নিম্নরূপ একটি পূর্ণসংখ্যা ক্রম সংজ্ঞায়িত করে।

  1. ধনাত্মক পূর্ণসংখ্যার ক্রম দিয়ে শুরু করুন এবং কে = 2 সেট করুন ।

  2. প্রত্যেক সরান ক্রম পূর্ণসংখ্যা, দিয়ে শুরু

  3. বর্ধমান কে এবং ২ য় ধাপে ফিরে যান।

f n হল n পূর্ণসংখ্যা (1-ইনডেক্সড) যা কখনই সরানো হয় না।

যদি - যথারীতি - σ 0 (কে) পূর্ণসংখ্যার কে এর ধনাত্মক বিভাজকের সংখ্যা বোঝায় , আমরা একটি এন কে সংক্ষিপ্ততর ধনাত্মক পূর্ণসংখ্যা যেমন 0 ((একটি এন - এন) / 3) = এফ এন + 1 হিসাবে সংজ্ঞা দিতে পারি - চ n

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন যা একটি ধনাত্মক পূর্ণসংখ্যা লাগে লিখুন এন ইনপুট এবং কপি করে প্রিন্ট হিসাবে অথবা ফেরৎ একটি এন

স্ট্যান্ডার্ড বিধি প্রযোজ্য। সংক্ষিপ্ততম কোডটি জয় হোক!

কাজের উদাহরণ

আমরা যদি ধনাত্মক পূর্ণসংখ্যার প্রতিটি দ্বিতীয় উপাদানটি সরিয়ে ফেলি তবে আমাদের সাথে বাকি রয়েছে

 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...

অবশিষ্ট প্রতিটি তৃতীয় উপাদান অপসারণ করার পরে, আমরা পেতে

 1  3  7  9 13 15 19 21 25 27 31 33 37 39 ...

এখন, প্রতি চতুর্থ, অপসারণের পরে পঞ্চম, তার পরে ষষ্ঠ উপাদানটি আমাদের পায়

 1  3  7 13 15 19 25 27 31 37 39 ...
 1  3  7 13 19 25 27 31 39 ...
 1  3  7 13 19 27 31 39 ...
 1  3  7 13 19 27 39 ...

শেষ সারিটি f 1 থেকে f 7 পদগুলি দেখায় ।

এই পদগুলির একটানা উপাদানগুলির পার্থক্য

 2  4  6  6  8 12

এই সামনের পার্থক্যগুলিকে 2 দ্বারা ভাগ করে নেওয়া , আমরা পাই get

 1  2  3  3  4  6 

এগুলি লক্ষ্য বিভাজক গণনা।

  • 4 প্রথম পূর্ণসংখ্যা যেমন যে σ 0 = 1 - (1) / 3 (ট) । আসলে, σ 0 (1) = 1
  • 8 প্রথম পূর্ণসংখ্যা যেমন যে σ 0 = 2 - (2) / 3 (ট) । আসলে, σ 0 (2) = 2
  • 15 প্রথম পূর্ণসংখ্যা যেমন যে σ 0 = 3 - (3) / 3 (ট) । আসলে, σ 0 (4) = 3
  • 16 প্রথম পূর্ণসংখ্যা যেমন যে σ 0 = 3 - (4) / 3 (ট) । আসলে, σ 0 (4) = 3
  • 23 হ'ল প্রথম পূর্ণসংখ্যা k যা σ 0 ((কে - 5) / 3) = 4 । আসলে, σ 0 (6) = 4
  • 42 প্রথম পূর্ণসংখ্যা যেমন যে σ 0 = 6 - (6) / 3 (ট) । আসলে, σ 0 (12) = 6

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

   n     a(n)

   1        4
   2        8
   3       15
   4       16
   5       23
   6       42
   7       55
   8      200
   9       81
  10       46
  11      119
  12      192
  13      205
  14   196622
  15    12303
  16       88
  17      449
  18      558
  19      127
  20     1748
  21   786453
  22       58
  23     2183
  24     3096
  25     1105
  26   786458
  27 12582939
  28      568
  29     2189
  30     2730

14
ওয়েস-এ কীওয়ার্ড: বোবা ("একটি গুরুত্বহীন ক্রম")।
orlp

15
বোবা? এটা বিশ্ব বাঁচাতে পারে!
ডেনিস

3
যদিও সেই পাং ...
মেগো

উত্তর:


7

জেলি, 30 29 27 25 বাইট

@ ডেনিস সম্পর্কে আমাকে অবহিত করার Ædজন্য 2 বাইট এবং দুটি চেইন একত্রিত করার জন্য আরও 2 বাইট সংরক্ষণ করা হয়েছে

RUð÷‘Ċ×µ/
‘Ç_ÇH0Æd=¥1#×3+

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

এটি সম্ভবত জেলির সাথে আমার সবচেয়ে মজা ছিল। আমি দ্বিতীয় লাইন, যা গণনা করে থেকে শুরু এন থেকে এন OEIS উপর সূত্র ব্যবহার করে, এবং বেশ সুন্দর।

ব্যাখ্যা

RUð ÷ 'Ċ × µ / এফ এন গণনার জন্য সহায়ক লিঙ্ক । যুক্তি: এন
আর নম্বর পান [1..n]
 ইউ বিপরীত
        / "পরবর্তী 2 গুণক পর্যন্ত" কমিয়ে দিন:
   Next পরবর্তী সংখ্যা দ্বারা ভাগ করুন
    'একাধিক এড়াতে বৃদ্ধি
     Il সিল (বৃত্তাকার)
      Next পরবর্তী সংখ্যাটি দিয়ে গুণ করুন

'Ç_ÇH0Æd = ¥ 1 # × 3 + মূল লিঙ্ক। যুক্তি: এন
'বৃদ্ধি n
 F F n + 1 
   গণনা করুন F n গণনা করুন
  _ বিয়োগ
    এইচ 2 দ্বারা বিভক্ত
     0 1 # 0 থেকে শুরু করে, (একটি এন- এন) / 3 এর জন্য প্রথম প্রার্থী খুঁজুন
                   যে সন্তুষ্ট ...
      Σd σ 0 ((একটি এন- এন) / 3)
        = = (এফ এন +1 -F এন ) / 2
            × 3 গুন 3 দ্বারা ঘুরিয়ে (ক এন একটি মধ্যে -n) / 3 এন -n
              + একটি মোড় এন যোগ করুন এন একটি মধ্যে -n এন

3

পাইথন 2 , 121 119 118 বাইট

n=input();r=range(1,4**n);d=s,=r*1,
for k in r:del s[k::k+1];d+=sum(k%j<1for j in r)*2,
print d.index(s[n]-s[n-1])*3+n

রান সময়টি O (4 n ) মেমরির ব্যবহারের সাথে মোটামুটিভাবে O (16 n ) হওয়া উচিত । প্রতিস্থাপন করা হচ্ছে সঙ্গে - যা আমি মনে করি যথেষ্ট - এই নাটকীয়ভাবে উন্নতি হবে, কিন্তু আমি বিশ্বাস করছি না যে এটা ইচ্ছামত বড় মানের জন্য কাজ করে এন4**n5<<n

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

Asyptotic আচরণ এবং একটি এন এর উপরের সীমা

বি এন হিসাবে সংজ্ঞা দিন (একটি এন - এন) / 3 , অর্থাত্, ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা কে যেমন σ 0 (কে) = ½ (এফ এন + 1 - এফ এন )

OEIS পৃষ্ঠায় উল্লিখিত হিসাবে, f n ~ 2n 2 , সুতরাং n + 1 - f n ~ ¼π (n + 1) 2 - 2n 2 = ¼π (2n + 1) ½π ½πn

এইভাবে, ½ (f n + 1 - f n ) ~ .n । যদি আসল সংখ্যাটি প্রাইম পি হয় তবে পি বিভাজকের সাথে ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা 2 পি -1 হয় , সুতরাং বি এন 2 সি এন দ্বারা সীমাবদ্ধ হতে পারে , যেখানে সি এন ¼π ¼πn

অতএব এন <4 এন পর্যাপ্ত পরিমাণে বৃহত্তর এন ধরে রাখবে , এবং যে 2 < n <2 n << (2 এন ) 2 = 4 এন দেওয়া হয়েছে , আমি নিশ্চিত যে কোনও প্রতিস্থাপনের নমুনা নেই।

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

n=input();r=range(1,4**n);d=s,=r*1,

এটি আমাদের পুনরাবৃত্ত প্রক্রিয়াটির জন্য কয়েকটি রেফারেন্স সেট আপ করে।

  • n হ'ল ব্যবহারকারীর ইনপুট: ধনাত্মক পূর্ণসংখ্যা।

  • r হল তালিকা [1, ..., 4 এন - 1]

  • s হ'ল r এর একটি অনুলিপি ।

    সঙ্গে একবার তালিকা পুনরায় r*1অগভীর কপি তৈরি করে, তাই পরিবর্তন গুলি সংশোধন করা হবে না

  • টি টিপল (গুলি) হিসাবে আরম্ভ করা হয় ।

    এই প্রথম মানটি গুরুত্বপূর্ণ নয়। সমস্ত অন্যান্য ধনাত্মক পূর্ণসংখ্যার বিভাজক সংখ্যা ধরে রাখবেন।

for k in r:del s[k::k+1];d+=sum(k%j<1for j in r)*2,

1 থেকে 4 এন - 1 পর্যন্ত প্রতিটি পূর্ণসংখ্যার কে এর জন্য আমরা নিম্নলিখিতটি করি।

  • del s[k::k+1]প্রত্যেক লাগে (ট + 1 টি) তম মধ্যে পূর্ণসংখ্যা গুলি - দিয়ে শুরু (ট + 1 টি) - এবং মোছাগুলিকে থেকে ফালি গুলি

    এই চালনী Flavius জোসেফাস একটি প্রাথমিক ব্যবধান জমা করার একটি সহজবোধ্য উপায় গুলি । এটি প্রয়োজনীয় n + 1 প্রাথমিক পদগুলির তুলনায় অনেক বেশি গণনা করবে তবে s এবং dfor উভয় আপডেট করতে একক লুপ ব্যবহার করে কিছু বাইট সংরক্ষণ করে।

  • d+=sum(k%j<1for j in r)*2,গন্য কিভাবে অনেক উপাদান ডিভাইড সমান এবং আপনার স্বাক্ষরে 0 (ট) থেকে

    যেহেতু একটি Singleton tuple যেমন সক্রিয়া করা হয়েছিল, 0 (ট) সূচিতে সংরক্ষিত হয়

print d.index(s[n]-s[n-1])*3+n

এই খুঁজে বের করে প্রথম সূচক এন +1 - চ এন মধ্যে , যা সবচেয়ে ছোট যেমন যে 0 (ট) = চ এন +1 - চ এন , তারপর নির্ণয় একটি এন যেমন 3k + 1 টি এবং ফলাফল ছাপে।


2

জাভা 8, 336 , 305 , 303 , 287 , 283 279 বাইট

57 বাইট সরানো কৃতিক্সী লিথোসকে ধন্যবাদ

Golfed

class f{static int g(int s,int N){return s<1?N+1:g(s-1,N+N/s);}static int h(int k){int u=0,t=1,i;for(;u!=(g(k,k)-g(k,k-1))/2;t++)for(i=1,u=0;i<=t;)if(t%i++<1)u++;return 3*t-3+k;}public static void main(String[]a){System.out.print(h(new java.util.Scanner(System.in).nextInt()));}}

Ungolfed

class f {
    static int g(int s,int N){return s < 1 ? N + 1 : g(s - 1, N + N / s);}

    static int h(int k) {
        int u = 0, t = 1, i;
        // get the first number with v divisors
        while(u != (g(k, k) - g(k, k - 1))/2){
            u = 0;
            for (i = 1; i <= t; i++)
                if (t % i < 1) u++;
            t++;
        }
        // 3*(t-1)+k = 3*t+k-3
        return 3 * t + k - 3;
    }

    public static void main(String[] a) {
        System.out.print(h(new java.util.Scanner(System.in).nextInt()));
    }
}

আমি মনে করি কমান্ড-লাইন আর্গুমেন্টকে পার্স করা হিসাবে intব্যবহারের চেয়ে কম java.util.Scanner। আপনি যদি স্ক্যানার ব্যবহার করে থাকেন System.out.print(h(new java.util.Scanner().nextInt()))
তবেও আপনি

@ ক্রিটিক্সিলিথস থেক্স, এখনই ঠিক করছে ...
বোবাস_পেট

ভিতরে int h(), আপনি এটিতে পরিবর্তন করতে পারেন int v = (g(k,k)-g(k,k-1))/2,u = 0,t = 1;। তুমি তোমার যদি-বিবৃতি (আপনার ভিতরে যে জন্য-লুপ) থেকে পরিবর্তন করতে পারেন if(t%i==0)থেকেif(t%i<1)
Kritixi Lithos

উপরন্তু, আপনি আপনার ফাংশন পরিবর্তন করতে পারেন gতিন অপারেটর ব্যবহার করে ভালো কিছু ফেরত দিতে return s==0?N+1:g(s-1,N+N/2)পর
Kritixi Lithos

2
@ ক্রিতিক্সিলিথোস এই মুহুর্তে আপনার নিজের সমাধান হিসাবে আলাদা পোস্ট হিসাবে পোস্ট করা উচিত
বোবাস_পেট ২

1

গাণিতিক, 130 116 106 103 বাইট

3Catch@Do[f=#2⌈#/#2+1⌉&~Fold~Reverse@Range@#&;If[Tr[2+0Divisors@k]==f[#+1]-f@#,Throw@k],{k,∞}]+#&

অথবা

3Catch@Do[f=#2⌈#/#2+1⌉&~Fold~Reverse@Range@#&;If[2DivisorSum[k,1&]==f[#+1]-f@#,Throw@k],{k,∞}]+#&

@ Pietu1998 এর জেলি কোডের সাথে প্রায় অভিন্ন হয়ে শেষ হয়েছিল ...

ব্যাখ্যা

Catch@

Catchযাই হোক না Throwকেন- (নিক্ষেপ)

Do[ ... ,{k,∞}]

অগণিত চক্র; kথেকে শুরু হয় 1এবং প্রতিটি পুনরাবৃত্তি বৃদ্ধি হয়।

f= ...

বরাদ্দ করুন f:

Reverse@Range@#

সন্ধান করুন {1, 2, ... , n}। বিপরীত।

#2⌈#/#2+1⌉&

সিল আউটপুট করে এমন একটি ফাংশন (এন 1 / এন 2 + 1) * এন 2

f= ... ~Fold~ ... &

fপ্রতিটি আউটপুটকে প্রথম ইনপুট হিসাবে এবং প্রতিটি ইনপুট হিসাবে তালিকার প্রতিটি উপাদানকে ব্যবহার করে উপরের ফাংশনটি তালিকার উপরের দুটি পদক্ষেপ থেকে পুনরাবৃত্তভাবে প্রয়োগ করে এমন একটি ক্রিয়া নির্ধারণ করুন। প্রাথমিক "আউটপুট" (প্রথম ইনপুট) হ'ল তালিকার প্রথম উপাদান।

Tr[2+0Divisors@k]==f[#+1]-f@#

দ্বিগুণকারী বিভাজকের সংখ্যা দ্বিগুণ kf (n + 1) - f (n) এর কিনা পরীক্ষা করে দেখুন ।

If[ ... ,Throw@k]

শর্ত হয়, তাহলে True, Throwএর মান k। যদি তা না হয় তবে লুপিং চালিয়ে যান।

3 ... +#&

আউটপুটটি 3 দিয়ে গুণ করুন এবং এন যোগ করুন।

130 বাইট সংস্করণ

Catch@Do[s=#+1;a=k-#;If[3∣a&&2DivisorSigma[0,a/3]==Differences[Nest[i=1;Drop[#,++i;;;;i]&,Range[s^2],s]][[#]],Throw@k],{k,∞}]&

1

পার্ল 6 , 154 149 136 107 বাইট

->\n{n+3*first ->\o{([-] ->\m{m??&?BLOCK(m-1).rotor(m+0=>1).flat!!1..*}(n)[n,n-1])/2==grep o%%*,1..o},^Inf}

Ungolfed:

-> \n {                    # Anonymous sub taking argument n
  n + 3 * first -> \o {    # n plus thrice the first integer satisfying:
    (                      #
      [-]                  #
      -> \m {              # Compute nth sieve iteration:
        m                  # If m is nonzero,
          ?? &?BLOCK(m-1).rotor(m+0=>1).flat # then recurse and remove every (m+1)-th element;
          !! 1..*          # the base case is all of the positive integers
      }                    #
      (n)                  # Get the nth sieve
      [n,n-1]              # Get the difference between the nth and (n-1)th elements (via the [-] reduction operator above)
    ) / 2                  # and divide by 2;
    ==                     # We want the number that equals
    grep o %% *, 1..o      # the number of divisors of o.
  }
  ,^Inf
}

1

05AB1E ,35 34 39 বাইট

1Qi4ë[N3*¹+NÑg·¹D>‚vyy<LRvy/>îy*}}‚Æ(Q#

এটি দেখতে ভয়ঙ্কর দেখাচ্ছে, তাই রানটাইম পারফরম্যান্সও। এটি ইনপুটটির জন্য কয়েক সেকেন্ড সময় নেয় যা ছোট মান দেয়। 14 এর মতো সংখ্যা চেষ্টা করবেন না; এটি শেষ পর্যন্ত ফলাফলটি সন্ধান করবে তবে যুগে যুগে সময় লাগবে।

ব্যাখ্যা

এটি 2 ক্রমানুসারে প্রোগ্রাম হিসাবে কাজ করে। প্রথমটি F n + 1 - F n গণনা করে এবং দ্বিতীয়টি একটি ব্রুটফোর্স পদ্ধতির ব্যবহার করে এর সংজ্ঞা অনুসারে একটি এন নির্ধারণ করে।

F n + 1 - F n প্রতিটি পুনরাবৃত্তির জন্য মূল্যায়ন করা হয় যদিও এটি লুপ ইনগ্রানেন্ট t এটি কোড সময়কে অদক্ষ করে তোলে তবে কোডটি সংক্ষিপ্ত করে তোলে।

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


আমি নিশ্চিত নই যে আমি বুঝেছি. কেন এটি 65,536 এর উপরে চালনীটি গণনা করতে পারে না?
ডেনিস

এটি 0 এবং 65536 ( žHL) এর মধ্যে সমস্ত পূর্ণসংখ্যার উত্পন্ন করে এবং তারপরে মানগুলি ছাঁটাইয়ের সীমাবদ্ধতাগুলি পূরণ করে না তা ফিল্টার করে। আমি মনে করি এই প্রোগ্রামটির প্রথম অংশটি পুরোপুরি একে একে অন্যকে দৃষ্টিনন্দন করে তোলার জন্য সম্পূর্ণ ভিন্ন পদ্ধতির সাথে পুনরায় লেখা উচিত।
ব্যবহারযোগ্য

সীমাবদ্ধতা (স্থির প্রস্থের পূর্ণসংখ্যার মতো) না থাকলে যেগুলি আপনাকে এটি করতে বাধা দেয়, উত্তরগুলি যথেষ্ট সময় এবং মেমরির ভিত্তিতে কোনও ইনপুটটির জন্য কাজ করবে বলে আশা করা যায়।
ডেনিস

এজন্যই আমি অন্য চালনী অ্যালগরিদম নিয়ে এসেছি। এটি গল্ফযোগ্য হতে পারে তবে আমি 05AB1E তে এর চেয়ে ভাল আর পাই না। তবে এর একটি given enough time and memoryজবাবদিহি আছে , যেহেতু আমি ইতিমধ্যে অন্যান্য প্রশ্নের বেশ কয়েকটি উত্তর দেখেছি যা এত ধীরে ধীরে চলেছে যে তারা সঠিক আউটপুট তৈরি করেছে কিনা তা বলা প্রায় অসম্ভব। এই কারণে আমি চালুনির গণনাটি লুপ থেকে আলাদা রেখেছিলাম এবং এটিতে আমার জন্য 2 বাইট খরচ হয়।
Osable

আপনার কোডটি দক্ষ করার দরকার নেই। আপনি গল্ফড / স্লো বাস্তবায়নটিকে আপনার জমা দিতে পারেন এবং পার্শ্ব নোট হিসাবে দ্রুত / দীর্ঘতর একটি অন্তর্ভুক্ত করতে পারেন। আমি ভয় করি যে আমাকে গতিশীল সীমাতে জোর দিতে হবে, এমনকি এটির জন্য বাইট লাগলেও costs
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.