প্রধান ব্যাঙ 🐸


44

"প্রাইম ব্যাঙ" একটি অদ্ভুত প্রাণী যা 3 বা 19 তারিখের আগ পর্যন্ত ...


আপনার প্রোগ্রামটি কোনও পূর্ণসংখ্যাকে nইনপুট হিসাবে গ্রহণ করবে এবং নীচের অ্যালগরিদম ( 3বা 19) এর ফলাফল আউটপুট করবে ।

প্রদত্ত পূর্ণসংখ্যার জন্য n >= 2:

  1. যাক fবেঙ অবস্থান করা। এটি প্রাথমিকভাবে সেট করা আছেn
  2. যদি f = 3বা f = 19: ব্যাঙ জাম্পিং থামায় - প্রোগ্রাম এবং আউটপুট থামিয়ে দেয় f
  3. যদি fপ্রধান হয়: ব্যাঙটি অবস্থানটিতে লাফ দেয় 2×f-1। ২ য় ধাপে ফিরে যান।
  4. যদি fযৌগিক হল: দিন dহতে fএর সবচেয়ে বড় মৌলিক গুণনীয়ক। ব্যাঙ পজিশনে লাফ দেয় f-d। ২ য় ধাপে ফিরে যান।

উদাহরণ:

এর সাথে একটি উদাহরণ n = 5:

5 > 9 > 6 > 3 stop

প্রোগ্রাম আউটপুট করা উচিত 3

এর সাথে আরও একটি উদাহরণ n = 23:

23 > 45 > 40 > 35 > 28 > 21 > 14 > 7 > 13 > 25 > 20 > 15 > 10 > 5 > 9 > 6 > 3 stop

আবার, প্রোগ্রাম আউটপুট করা উচিত 3

পরীক্ষার কেস:

10 => 3
74 => 19
94 => 3
417 => 3
991 => 19
9983 => 19

আপনি ধরে নিতে পারেন 1 < n < 1000000(আমি এই মানগুলির জন্য প্রোগ্রামটি শেষ করে দিয়েছি)।


3
3 লুপটি হ'ল [3 5 9 6 3] এবং 19 লুপটি [19 37 73 145 116 87 58 29 57 38 19]
আর্নাড

8
দুর্দান্ত কোলাটজ প্রকরণ।
আর্থার

3
আমরা যদি প্রমাণ করতে পারি না যে ব্যাঙ সবসময় আসে 3বা আসে 19, আমরা আলগোরিদমে 2 আইটেমটি পরিবর্তন করতে পারি যে ব্যাঙ যদি কোনও লুপে প্রবেশ করে (আগে দেখা একটি অবস্থানের মুখোমুখি হয়েছিল), তবে এটি জাম্পিং বন্ধ করে এবং সবচেয়ে ছোটটিকে ফেরত দেয় যে লুপ সদস্য।
জেপ্পে স্টিগ

4
@ পাইরুলেজ যদি এটি পৌঁছে যায় তবে আপনার সম্ভবত ওপিকে বলা উচিত।
mbomb007

3
@ কেয়ুগান সম্ভবত ম্যাথ.এসইতে পোস্ট করা ভাল জিনিস হতে পারে।
mbomb007

উত্তর:



12

সি (জিসিসি),  87  65 বাইট

i,k;f(n){for(i=n;i>1;)for(k=i;k%--i;);n=~16&n-3?f(n-k?:n+n-1):n;}

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

ব্যাখ্যা:

i,k;
f(n)
{
    for (i=n; i>1;)              // Loop until `k` is prime (the largest positive
                                 // `i` inequal to `k` that divides `k` is 1).
        for (k=i; k%--i;);       // Find the largest factor `k`

    n =                          // Returning like this is undefined behaviour,
                                 // but happens to work with gcc. This can be
                                 // replaced with `return` at the cost of 4 bytes.

        ~16&n-3                  // If `n` is 3 or 19, this expression equals 0 and
                                 // the algorithm halts. Otherwise the function
                                 // calls itself to perform the next iteration.

        ? f(n-k ?: n+n-1)        // If `n-k` is non-zero, n is not prime.
                                 // In this case call `f` with the value of `n-k`.
                                 // (Omitting the second `n-k` between `?` and `:`
                                 // is a gcc extension)
                                 // Otherwise call `f` with `2*n-1`.

        : n;                     // All done, `n` is returned.
}

পোর্টেবল সংস্করণ (72 বাইট):

i,k;f(n){for(i=n;i>1;)for(k=i;k%--i;);return~16&n-3?f(n-k?n-k:n+n-1):n;}

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

আরও উপযুক্ত পরিবর্তনশীল নাম সহ:

f,r;o(g){for(f=g;f>1;)for(r=f;r%--f;);g=~16&g-3?o(g-r?:g+g-1):g;}

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


5
পুরোপুরি ব্যাঙ শব্দটি এবং আপনার ভেরিয়েবলগুলি সহ নাটকটি পছন্দ করুন। +1 টি।
রায়রিং - মনিকা

10

রেটিনা , 63 62 বাইট

1 বাইট বাঁচানোর জন্য নীলকে ধন্যবাদ জানাই।

{`^(11+)(?<!^\2+(11+))(?=\1+$)

^(?!(11+)\1+$|111$|1{19}$)1
$_

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

আনারি ইনপুট এবং আউটপুট (পরীক্ষার স্যুট সুবিধার জন্য দশমিক ব্যবহার করে)। এই সমাধানটি বড় ইনপুটগুলির জন্য অবিশ্বাস্যরূপে ধীর হয়ে যায়। 9983টিআইও- র পরীক্ষার সময় শেষ।

ব্যাখ্যা

এর কারণে {, প্রোগ্রামের উভয় স্তরগুলি কেবলমাত্র একটি লুপে চালিত হয় যতক্ষণ না তারা স্ট্রিংটিকে আর প্রভাবিত করে না। আমরা একটি পর্যায় প্রক্রিয়াকরণ কম্পোজিট এবং একটি মঞ্চ প্রক্রিয়াজাতকরণ প্রাইমগুলির মধ্যে বিকল্প করি। এটি আমাদেরকে আসল শর্তসাপেক্ষ এড়াতে দেয় (যা সত্যিকার অর্থেই রেটিনার মধ্যে নেই)। যদি বর্তমান মানটি মঞ্চের জন্য ভুল ধরণের হয় তবে মঞ্চটি কেবল কিছুই করে না।

^(11+)(?<!^\2+(11+))(?=\1+$)

এটি যৌগিক প্রক্রিয়াজাত করে। আমরা এর সাথে একটি সম্ভাব্য বিভাজকের সাথে মেলে (11+), তবে তারপরে আমরা পরীক্ষা করে দেখি যে এটি কোনও সংমিশ্রিত নয় (?<!^\2+(11+)), তাই আমরা কেবলমাত্র প্রাথমিক কারণগুলি বিবেচনা করি। লোভের কারণে +, এটি বৃহত্তম ফ্যাক্টরটিকে অগ্রাধিকার দেয়। তারপরে আমরা পরীক্ষা করে দেখি যে এই সম্ভাব্য বিভাজকটি তার পুনরাবৃত্তির সাথে বাকী স্ট্রিংয়ের সাথে মেলে চেষ্টা করে প্রকৃত বিভাজক (?=\1+$)। এই বিভাজকটি কেবল স্ট্রিং থেকে সরানো হয়, এটিই আপনি কীভাবে অ্যানারিতে কিছু বিয়োগ করেন।

^(?!(11+)\1+$|111$|1{19}$)1
$_

এটি 3 এবং 19 বাদে প্রাইমগুলি প্রক্রিয়া করে । নেতিবাচক চেহারাটি নিশ্চিত করে যে ইনপুটটি 3 এবং 19-এর নয় , সম্মিলিত নয় । তারপরে আমরা একটি সিলেক্ট 1করে পুরো স্ট্রিংয়ের সাথে এটি প্রতিস্থাপন করি। এই কম্পিউটিং একটি ইউনারী ফর্ম 1 + N - এন , যা অবশ্যই হয় 2n-1

একবার আমরা 3 বা 19 টি আঘাত করলে কোনও মঞ্চ স্ট্রিংয়ের সাথে মেলে না এবং এটি আর পরিবর্তন করা হবে না।


1
1$'যেমন হয় না তেমন $_?
নীল

4
@ নীল হ্যাঁ ......
মার্টিন এন্ডার


8

জেলি , 12 বাইট

_ÆfṂoḤ’$µÐḶṂ

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

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

_ÆfṂoḤ’$µÐḶṂ  Maink link. Argument: n

        µ     Combine the links to the left into a chain.
         ÐḶ   Repeatedly call the chain monadically until the results are no longer
              unique. Yield the loop, i.e., the first occurrence of the first
              repeated integer, up to and excluding the repetition.
              Let's call the argument of the chain k.
_Æf             Subtract all prime factors of k from k.
   Ṃ            Take the minimum of the differences. This yields 0 iff k is prime.
     Ḥ’$        Compute 2k-1.
    o           Take the logical OR of the results.
              The result is now a rotation of either [3, 5, 9, 6] or
              [19, 37, 73, 145, 116, 87, 58, 29, 57, 38].
          Ṃ   Take the minimum, yielding either 3 or 19.

7

ওল্ফ্রাম ভাষা (গণিত) , 6566 68 বাইট

#//.i:Except[3|19]:>If[PrimeQ@i,2i-1,i-#&@@Last@FactorInteger@i]&
  • -১ বাইট, মিশা লাভরভকে ধন্যবাদ!
  • -২ বাইট, মার্টিনকে ধন্যবাদ!

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

টিপ দ্বারা অনুপ্রাণিত । মূলত, এটি কেবল অ্যালগরিদমটিকে পুনরায় তৈরি করে।

//.হয় RepeatedReplaceএবং /;হয় Condition। সুতরাং, মূল্যায়ন না হওয়া পর্যন্ত কোডটি i_(একক পরিমাণ) এর সাথে প্রতিস্থাপন করবে ।If[PrimeQ@i,2i-1,i-#&@@Last@FactorInteger@i]i!=3&&!=19True

মাপকাঠি:

মাপকাঠি


3
মজাদার ঘটনা: এই কোডটি বৃহত্তর সংখ্যার জন্য কাজ করবে না 10000000010কারণmaximum number of iterations is 2^16 (= 65536)
J42161217

1
3 এবং 19 এর জন্য যাচাই করার জন্য একটি ছোট্ট উপায়#//.i:Except[3|19]:>If[PrimeQ@i,2i-1,i-#&@@Last@FactorInteger@i]&
মিশা লাভরভ

@ মিশা লাভরভ কিন্তু ফলাফলটি ভুল?
কিউ গান

@ কেয়ুগান আমার জন্য, দুটি ফাংশন 1 থেকে 1000 এর মধ্যে পূর্ণসংখ্যার জন্য ঠিক একই ফল দেয়
মিশা লাভরভ

1
সম্ভবত আপনি যে মন্তব্যটি করছেন তা হ'ল অপ্রিন্টযোগ্য অক্ষরগুলি youোকানো হয় যখন আপনি মন্তব্যগুলি অনুলিপি করে আটকান, যা কখনও কখনও ঘটে।
মিশা লাভরভ

6

05 এ বি 1 , 19 18 17 বাইট

[ÐƵηfså#pi·<ëDfθ-

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

ব্যাখ্যা

[      #            # loop until
 Ð   så             # a copy of the current value is contained in
  Ƶηf               # the unique prime factors of 171
        pi          # if the current value is prime
          ·<        # double and decrement
            ë   -   # else subtract
             Dfθ    # the largest prime factor of a copy of the current value

4
আপনার উৎস কোডের মধ্যে একটি প্রকৃত বেঙ থাকার জন্য +1
Arnaud

57991 এর জন্য 1 মিনিটের বেশি
রোজলুপি

@ রোসলুপি: আপনি দীর্ঘ পরীক্ষার মামলাগুলি অফলাইনে চালিয়ে যাওয়ার চেয়ে ভাল
better

5

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

f=n=>57%n?f(n-(g=(k,d=1)=>++d<k?k%d?g(k,d):g(k/d):d<n?d:1-n)(n)):n%38

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

বিন্যাসিত এবং মন্তব্য

f = n =>                 // given n
  57 % n ?               // if n is neither 3, 19 or 57 (and assuming that n is > 1):
    f(                   //   do a recursive call to f() with:
      n -                //     n minus
      (g = (k, d = 1) => //     the result of the recursive function g():
        ++d < k ?        //       increment d; if d is less than k:
          k % d ?        //         if d is not a divisor of k:
            g(k, d)      //           recursive call to g() with k and d unchanged
          :              //         else:
            g(k / d)     //           recursive call to g() with k = k / d, d = 1
        :                //       else, d is now the highest prime divisor of n:
          d < n ?        //         if d is less than n:
            d            //           n is composite: return d, which results in f(n - d)
          :              //         else:
            1 - n        //           n is prime: return 1 - n, which results in f(2n - 1)
      )(n)               //     initial call to g()
    )                    //   end of recursive call to f()
  :                      // else:
    n % 38               //   return n % 38 (gives 19 as expected if n = 57)

1
স্মার্ট, ব্যবহার 57%nএবং n%38পরিবর্তে n==3|n==19আমার জাভা উত্তরে 1 বাইট সংরক্ষণ করা , তাই ধন্যবাদ!
কেভিন ক্রুইজসেন

আইডিয়োনে 57991 ইনপুট প্রগ্রেট উত্পন্ন করে: j: 2: 26 অভ্যন্তরীণ
ত্রুটি

টিও এফ = এন => 57% এন? এফ (এন- (জি = (কে, ডি = 1) => ++ ডি <কে? কে% ডি? জি (কে, ডি): জি (কে / ডি) : d <n? d: 1-n) (n)): n% 38 মুদ্রণ (চ (57991)) স্টপ প্রোগ্রাম উত্পন্ন করে আউটপুট নয়, এটি আমার কাছে মনে হয়
রোজলুপি

1
@ রসলুপি এটি কোনও নির্দিষ্ট বাধা ছাড়াই একটি কোড-গল্ফ চ্যালেঞ্জ। বর্তমান sensক্যমত্যটি হ'ল গতি বা মেমরির সীমাবদ্ধতাগুলি (যেমন কল স্ট্যাকের আকার) এটিকে উপেক্ষা করা যেতে পারে যদি না অন্যথায় প্রশ্নে স্পষ্টভাবে বর্ণিত হয়। আমি এটি গ্রহণযোগ্যভাবে বিবেচনা করি যে 1000000 সীমাটি কেবল তথ্যবহুল কারণ ক্রমটি এর বাইরে পরীক্ষা করা হয়নি। ঘটনাচক্রে, আপনার 70-বাইট সমাধানটি পুরোপুরি ঠিক আছে এবং সম্ভবত একটি কোড-গল্ফ চ্যালেঞ্জের জন্য 93-বাইট সংস্করণটির চেয়ে বেশি প্রাসঙ্গিক।
আর্নৌল্ড

4

জেলি , 23 19 বাইট

মাইল থেকে -4 বাইট । যদিও 05AB1E এর চেয়ে বেশি দীর্ঘ।

Ḥ’$_Æf$ÆP?Ṫµḟ3,19$¿

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


1
Ḥ’$_Æf$ÆP?Ṫµḟ3,19$¿পরিবর্তে কিছুক্ষণের জন্য লুপ এবং কিছু পুনরায় ক্রম ব্যবহার করে
মাইল

4

পাইথন 2 , 110 105 103 101 বাইট

-২ বাইট @ লিনাকে ধন্যবাদ

f=lambda n,i=2,k=0:i/n and(n*(n&~16==3)or f((2*i-1,k-i)[k>0]))or n%i and f(n,i+1,k)or f(n/i,2,k or n)

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


পাইথন 2 , 116 112 105 বাইট

f=lambda n,i=2:i/n*i or n%i and f(n,i+1)or f(n/i)
n=input()
while~16&n-3:n=[2*n-1,n-f(n)][f(n)<n]
print n

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


1
…n*(n&~16==3)or…2 বাইট সংরক্ষণ
লিন 11

ইনপুট জন্য 57991 sys.setrecursionlimit (20000)
রোজলুপি

4

এমএটিএল , 22 21 বাইট

@ জিউসেপকে 1 বাইট অপসারণ করার জন্য ধন্যবাদ !

`tZp?Eq}tYfX>-]tI19h-

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

`           % Do...while
  t         %   Duplicate. Takes (implicit) input the first time
  Zp        %   Is it prime? 
  ?         %   If so
    Eq      %     Times 2, minus 1
  }         %   Else
    t       %     Duplicate
    YfX>-   %     Prime divisors, maximum, subtract
  ]         %   End
  t         %   Duplicate
  I19h      %   Push array [3 19]
  -         %   Subtract, element-wise. The result is truthy if and only if
            %   it doesn't contain any zero
            % End (implicit). Next iteraton if top of the stack is truthy
            % Display (implicit)

4

হাস্কেল - 154 বাইট

f 3=3
f 19=19
f n
 |(c==[1])=f$2*n-1
 |True=f$n-head c
 where c=z n;v b=reverse[x|x<-[1..(b-1)],b`rem`x==0];z j=case v j of[1]->[1];s->filter((==[1]).v)$s

সম্ভবত এখানে কিছু গল্ফের কৌশল অনুপস্থিত, হ্যাসেল গল্ফে এটি আমার প্রথম প্রচেষ্টা।


হ্যালো এবং সাইটে আপনাকে স্বাগতম। প্যাটার্ন গার্ডগুলির জন্য আপনার নতুন লাইন এবং স্পেসের দরকার নেই। এছাড়াও আপনি ব্যবহার করতে পারেন 1>0জন্য Trueসবচেয়ে বার কিন্তু প্রায়ই এটা উদাহরণস্বরূপ, একটি কাজ ব্যবহার করতে ভালো হতে পারে c<-z n
গম উইজার্ড

1
[x|x<-[b-1,b-2..1],rem b x==0]reverse[x|x<-[1..(b-1)],bরেম চেয়ে ছোট x==0]
গম উইজার্ড

2
এবং একটি শেষ কথা, আপনি যদি হ্যাসেল গল্ফিং সম্পর্কে আলোচনা করতে চান তবে আপনি আমাদের মনডস এবং মেনে যোগ দিতে পারেন ।
গম উইজার্ড



3

জাভা 8, 140 135 134 94 বাইট

n->{for(int f,t,m=0;57%n>0;n=f>n?2*n-1:n-m)for(t=n,f=1;f++<t;)for(;t%f<1;t/=m=f);return n%38;}

লুপের সাথে -5 বাইট রিকার্সিভ জাভা 7 পদ্ধতিটি জাভা 8 ল্যাম্বডায় রূপান্তর করে।
-1 থেকে বাইট অন্তর্নিহিত ধন্যবাদ @Arnauld এর জাভাস্ক্রিপ্ট উত্তর পরিবর্তন করে n!=3&n!=19এবং return n;করতে 57%n>0এবং return n%38;
আমি মনে করি যে কোনওভাবে দুটি লুপগুলি একত্রিত করে nএকটি প্রাইম কিনা তা পরীক্ষা করা সম্ভব এবং একই সাথে এটি সবচেয়ে বড় মৌলিক ফ্যাক্টরটি পাওয়া সম্ভব তবে আমি এটি এখনও বের করতে পারি না (এখনও)। সুতরাং এটি আপাতত প্রাথমিক সংস্করণ হবে।
-40 হ্যাপ্পিং বাইটস @ নেভিকে ধন্যবাদ, আমি যা করতে পারিনি তা করে: একবারে প্রাইমস এবং বৃহত্তম প্রাইম ফ্যাক্টরটি অনুসন্ধানের জন্য লুপগুলি একত্রিত করে।

ব্যাখ্যা:

এটি এখানে চেষ্টা করুন (এমনকি 9999991 সেকেন্ডের মধ্যেও চালিত হয় )।

n->{                  // Method with integer as both parameter and return-type
  for(int f,          //  Flag-integer
          t,          //  Temp-integer
          m=1;        //  Max prime factor integer, starting at 0
      57%n>0;         //  Loop (1) as long as `n` is not 3, not 19 and not 57:
      n=f>n?          //    After every iteration: if `f` is larger than `n`:
         2*n-1        //     Change `n` to `2*n-1`
        :             //    Else:
         n-m)         //     Change `n` to `n-m`
    for(t=n,          //   Reset `t` to `n`
        f=1;          //   Reset `f` to 1
        f++<t;)       //   Inner loop (2) from 2 to `t` (inclusive)
      for(;t%f<1;     //    Inner loop (3) as long as `t` is divisible by `f`
        t/=m=f;       //     Set `m` to `f`, and set `t` to `t/f`
      );              //    End of inner loop (3)
                      //   End of inner loop (2) (implicit / single-line body)
                      //  End of loop (1) (implicit / single-line body)
  return n%38;        //  Return `n%38`, which is now either 3 or 19
}                     // End of method

1
সি # বহুগ্লোট হওয়ার চেয়ে 1 টি চরিত্রের সংক্ষিপ্তসার :(
ইয়ান এইচ।

@IanH। হেই, হ্যাঁ, সাধারণত: কেস এর n=>পরিবর্তে n->। এবং কখনও কখনও ছোট / বড় হাতের কল। ;)
কেভিন ক্রুইজসেন

1
94 বাইট:n->{for(int f,t,m=0;57%n>0;n=f>n?2*n-1:n-m)for(t=n,f=1;f++<t;)for(;t%f<1;)t/=m=f;return n%38;}
নেভায়ে

@ নতুন ধন্যবাদ! আমি কেবল জানতাম লুপগুলি একত্রিত করা সম্ভব হওয়া উচিত, তবে এটি বের করতে পারিনি। একটি চূড়ান্তভাবে 40 বাইট আপনার জন্য সংরক্ষিত ধন্যবাদ!
কেভিন ক্রুইজসেন

3

বাশ, 73 বাইট

((57%$1))&&$0 $[(x=$1-`factor $1|sed 's/.* //'`)?x:2*$1-1]||echo $[$1%38]

এটি অনলাইন চেষ্টা করুন! টিআইওতে কাজ করার জন্য কিছুটা পরিবর্তন করা হয়েছে।

পুনরাবৃত্তভাবে তার নিজস্ব স্ক্রিপ্ট ফাইলটি কল করে কল করে $0, যা টিআইও তে কাজ করে না কারণ এটি অবশ্যই চালানো উচিত./filename.sh । কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট গ্রহণ করে।

@ আরনাউল্ডের জেএস উত্তরের মতো একই মডুলাস ট্রিক ব্যবহার করে ।

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

$ for t in 5 23 10 74 94 417 991 9983;{ echo -n "$t -> "; ./prime-frog.sh $t; }
5 -> 3
23 -> 3
10 -> 3
74 -> 19
94 -> 3
417 -> 3
991 -> 19
9983 -> 19


1

পাইথ , 19 বাইট

.W!/P57H?P_ZtyZ-ZeP

সমস্ত পরীক্ষার কেস যাচাই করুন!

তুষ উত্তর আমাকে (2 বাইট সংরক্ষণ করতে অনুপ্রাণিত ,3 19করার P57)।

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

.W! / P57H? P_ZtyZ-ZeP - সম্পূর্ণ প্রোগ্রাম।

.ডাব্লু - কার্যকরী যখন। যদিও A (মান) সত্যবাদী, মান = বি (মান)। শেষ মানটি প্রদান করে।
    P57 - 57 এর প্রধান কারণ ([3, 19])।
   / এইচ - বর্তমান মানটির উপস্থিতি গণনা করুন।
  ! - যৌক্তিক নয়। 0 -> সত্যবাদী, অন্য কিছু -> মিথ্যা।
        ? পি_জেড - যদি বর্তমান মানটি প্রধান হয় তবে:
            tyZ - বর্তমান মান দ্বিগুণ, হ্রাস।
               -জেপ - অন্যটি, নিজের থেকে বর্তমান মানের সর্বাধিক প্রধান উপাদানটি বিয়োগ করুন।
                     - স্পষ্টভাবে মুদ্রণ করুন।

1

পাওয়ারশেল , 150 126 বাইট

for($n="$args";57%$n){$a=$n;$d=for($i=2;$a-gt1){if(!($a%$i)){$i;$a/=$i}else{$i++}};if($n-in$d){$n+=$n-1}else{$n-=$d[-1]}}$n%38

এটি অনলাইন চেষ্টা করুন! (সতর্কতা: বড় সংখ্যার জন্য ধীর)

Iterative পদ্ধতি। পাওয়ারশেলের কোনও প্রাইম ফ্যাক্টেরাইজেশন অন্তর্নির্মিত নেই, সুতরাং এটি প্রাইম ফ্যাক্টর বাডস সম্পর্কে আমার উত্তর থেকে কোড ধার করে ।

প্রথমটি আমাদের forলুপ। সেটআপটি $nইনপুট মান হিসাবে সেট করে এবং শর্তসাপেক্ষে লুপটি এতক্ষণ ধরে 57%$nশূন্য-অ-শূন্য থাকে ( সেই কৌশলটির জন্য আরনাউল্ডকে ধন্যবাদ )। লুপের অভ্যন্তরে আমরা প্রথমে $a(সেট করা $n) এর প্রধান উপাদানগুলির একটি তালিকা পাই । এটি প্রাইম ফ্যাক্টর বাডস থেকে ধার করা কোড। যদি ইনপুটটি $aইতিমধ্যে প্রাইম হয় তবে এটি ঠিক $a(গুরুত্বপূর্ণ পরে) ফিরে আসবে । এটি (সম্ভাব্য মাত্র $a) এতে সঞ্চিত হয় $d

পরবর্তী একটি হল if/ elseশর্তসাপেক্ষ। জন্য ifঅংশ, আমরা চেক কিনা $nহয় -in $d। যদি এটি হয় তবে এর অর্থ $nপ্রধান, সুতরাং আমরা নিই $n=2*$n-1বা করি $n+=$n-1। অন্যথায়, এটি যৌগিক, সুতরাং আমাদের সবচেয়ে বড় প্রধান উপাদান খুঁজে পাওয়া দরকার to মানে হল, আমরা গত এক নেওয়া প্রয়োজন [-1]এর $dএবং বিয়োগ থেকে $nসঙ্গে $n-=। এটি কাজ করে কারণ আমরা লুপ আপ করছি 2এবং এইভাবে এর শেষ উপাদানটি $dইতিমধ্যে বৃহত্তম হতে চলেছে।

লুপিংয়ের কাজ শেষ হয়ে গেলে আমরা কেবল $n%38পাইপলাইনে (আবার ধন্যবাদ আর্নৌল্ড) রাখি এবং আউটপুট অন্তর্ভুক্ত থাকে।


1

এপিএল (ডায়ালগ ইউনিকোড) , 113 90 59 বাইট

CY 'dfns'
g←{1pco ⍵:f(2×⍵)-1f⍵-⊃⌽3pco ⍵}
f←{⍵∊3 19:⍵⋄g ⍵}

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

টিআইও 3200 ডলার পর্যন্ত মান সহ কাজ করে। সর্বশেষ পরীক্ষার মামলার জন্য আমার পিসিতে পরীক্ষিত। টিআইওতে পরীক্ষা করতে, কেবল f valueকোডের নীচে যুক্ত করুন । আর প্রয়োগ করা হয় না, আমার প্রাথমিকতা পরীক্ষা করা অ্যালগরিদমটি সত্যই খারাপ ছিল এবং প্রতিস্থাপনের জন্য আমাকে সরবরাহ করায় @ অ্যাডমকে ধন্যবাদ; এছাড়াও 23 বাইট সংরক্ষণ করুন।

বাইট গণনা ঠিক করতে সম্পাদিত।

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

CY 'dfns'                      # Imports every Defined Function, which is shorter than importing just the function I used (pco).

g←{1pco ⍵:f(2×⍵)-1f⍵-⊃⌽3pco ⍵} 
g                              # define g as
   1pco ⍵:                      # if the argument ⍵ is prime
          f(2×⍵)-1              # Call f over 2×⍵-1
                  f            # else, call f over
                               # the first element of the
                      3pco     # list of prime factors of ⍵
                               # reversed

f←{⍵∊3 19:⍵⋄g ⍵}
f                              # Define f as
        :                      # if the argument ⍵
                               # is in
     3 19                       # the list [3, 19]
                               # return the argument ⍵
                               # else
            g                  # call g over the argument ⍵

1

অ্যাক্সিয়োম, 93 বাইট

h(n)==(repeat(n=3 or n=19 or n<2=>break;prime? n=>(n:=2*n-1);n:=n-last(factors(n)).factor);n)

পরীক্ষা:

(4) -> [[i,h(i)] for i in [10,74,94,417,991,9983]]
   (4)  [[10,3],[74,19],[94,3],[417,3],[991,19],[9983,19]]
                                                  Type: List List Integer

68 বাইট ফাংশন হবে

q x==(n<4=>3;n=19=>n;prime? n=>q(2*n-1);q(n-last(factors n).factor))

তবে এন = 57991 এর জন্য (যদি আমি ভাল করে মনে করি) এটি স্ট্যাকের স্থানটি বাইরে রেখে যায়।


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