সর্বাধিক বিভাজক বিয়োগ করে এন থেকে 1 পর্যন্ত কত পদক্ষেপ নেয়?


50

গণিতে এই প্রশ্নটি দ্বারা অনুপ্রাণিত


সমস্যাটি

nএকটি প্রাকৃতিক সংখ্যা হতে দিন ≥ 2। এর বৃহত্তম বিভাজন নিন n- যা nনিজের থেকে পৃথক - এবং এটি থেকে বিয়োগ করুন n। আপনি না পাওয়া পর্যন্ত পুনরাবৃত্তি 1

প্রশ্নটি

1প্রদত্ত সংখ্যায় পৌঁছাতে কয়টি পদক্ষেপ নেয় n ≥ 2

বিস্তারিত উদাহরণ

যাক n = 30

এর বৃহত্তম বিভাজন:

1.   30 is 15  -->  30 - 15 = 15
2.   15 is  5  -->  15 -  5 = 10
3.   10 is  5  -->  10 -  5 =  5
4.    5 is  1  -->   5 -  1 =  4
5.    4 is  2  -->   4 -  2 =  2
6.    2 is  1  -->   2 -  1 =  1

এটি পৌঁছাতে 6 টি পদক্ষেপ নেয় 1

ইনপুট

  • ইনপুটটি একটি পূর্ণসংখ্যা n, যেখানে n ≥ 2
  • আপনার প্রোগ্রামটির ভাষার সর্বোচ্চ পূর্ণসংখ্যার মান পর্যন্ত ইনপুট সমর্থন করা উচিত।

আউটপুট

  • কেবল ধাপের সংখ্যা যেমন আউটপুট করে 6
  • শীর্ষস্থানীয় / পিছনের সাদা জায়গা বা নিউলাইনগুলি ভাল।

উদাহরণ

f(5)        --> 3
f(30)       --> 6
f(31)       --> 7
f(32)       --> 5
f(100)      --> 8
f(200)      --> 9
f(2016^155) --> 2015

আবশ্যকতা

  • আপনি STDINফাংশন প্যারামিটার হিসাবে বা নিকটতম সমতুল্য থেকে কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট পেতে পারেন ।
  • আপনি একটি প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। এটি যদি কোনও বেনামে কাজ করে থাকে তবে দয়া করে কীভাবে এটি চালাবেন তার একটি উদাহরণ অন্তর্ভুক্ত করুন।
  • এটি তাই বাইট জিতে সংক্ষিপ্ত উত্তর।
  • স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

এই সিরিজটি ওআইআইএস-তেও পাওয়া যাবে: A064097

একটি আধা-লোগারিদম দ্বারা inductively সংজ্ঞা দেওয়া হয় a(1) = 0এবং a(p) = 1 + a(p-1)যদি pপ্রধান হয় এবং a(n*m) = a(n) + a(m)যদি m,n > 1


দেশীয় স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার সাহায্যে ভাষাগুলিতে ইনপুট প্রয়োজনীয়তাটি স্পষ্ট করুন?
স্পার

@ স্পার আমি বলব, আপনার কমপক্ষে সমর্থন করা উচিত 2^32 - 1। বাকিটি আপনার এবং আপনার সিস্টেমের উপর নির্ভর করে। আশা করি, আপনি আপনার প্রশ্নের সাথে এটি বোঝাতে চেয়েছিলেন।
সন্নিবেশকারী নাম এখানে

3
আমি পছন্দ করি কীভাবে শিরোনামটি এটির সমস্ত অঙ্ক করে
লুইস মেন্ডো

উত্তর:


20

জেলি , 9 বাইট

ÆṪÐĿÆFL€S

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

পটভূমি

সিকোয়েন্স A064097 এর সংজ্ঞাটি এটিকে বোঝায়

সংজ্ঞা

দ্বারা ইউলার পণ্যের সূত্র

ইউলারের পণ্য সূত্র

যেখানে ule ইউলারের মোট কার্যকারিতা বোঝায় এবং পি কেবলমাত্র মূল সংখ্যার চেয়ে পৃথক হয়।

উভয়ের সংমিশ্রণে আমরা সম্পত্তিটি ছাড় করি

প্রথম সম্পত্তি

যেখানে ω স্বতন্ত্র মৌলিক উত্পাদক সংখ্যা উল্লেখ করে এন

ফলে সূত্র প্রয়োগ করা হচ্ছে ট + 1 টি বার, যেখানে যথেষ্ট বড় যাতে φ ট + 1 টি (ঢ) = 1 , আমরা পেতে

দ্বিতীয় সম্পত্তি

এই সম্পত্তি থেকে, আমরা সূত্র প্রাপ্ত

সূত্র

যেখানে সর্বশেষ সাম্যতা হ'ল কারণ ω (1) = 0

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

ÆṪÐĿÆFL€S  Main link. Argument: n

  ÐĿ       Repeatedly apply the link to the left until the results are no longer
           unique, and return the list of unique results.
ÆṪ           Apply Euler's totient function.
           Since φ(1) = 1, This computes φ-towers until 1 is reached.
    ÆF     Break each resulting integer into [prime, exponent] pairs.
      L€   Compute the length of each list.
           This counts the number of distinct prime factors.
        S  Add the results.

এখন এটি একটি সুপার চালাক পদ্ধতির!
Abr001am

15

05 এ বি 1 ই , 13 11 বাইট

কোড:

[DÒ¦P-¼D#]¾

ব্যাখ্যা:

[        ]   # An infinite loop and...
       D#        break out of the loop when the value is equal to 1.
 D           # Duplicate top of the stack (or in the beginning: duplicate input).
  Ò          # Get the prime factors, in the form [2, 3, 5]
   ¦         # Remove the first prime factor (the smallest one), in order to get 
               the largest product.
    P        # Take the product, [3, 5] -> 15, [] -> 1.
     -       # Substract from the current value.
      ¼      # Add one to the counting variable.
          ¾  # Push the counting variable and implicitly print that value.

ব্যবহার সিপি-1252 এনকোডিং। এটি অনলাইন চেষ্টা করুন!


13
সর্বাধিক পণ্য পেতে প্রথম প্রাইম ফ্যাক্টর (সবচেয়ে ছোটটি) সরান, কত চালাক! :-)
লুইস মেন্ডো

আমি দেখতে পাচ্ছি, আপনি ভাষা বিকাশকারী
সারজে বোর্শ

@SargeBorsch হ্যাঁ, যে সঠিক :) হল
আদনান

[¼Ñü-¤ÄD#]¾- আমি জুটি বাঁধার সাথে একটি বাইট শেভ করার খুব কাছে ছিলাম, ওহ ভাল ...
ম্যাজিক অক্টোপাস উরান

-1 বাইট: [Ð#Ò¦P-¼]¾Ðচেয়ে ভাল DD
গ্রিমি

11

পাইথ, 11 বাইট

fq1=-Q/QhPQ

পরীক্ষা স্যুট

একটি সরল পুনরাবৃত্তি-সত্য-লুপ।

ব্যাখ্যা:

fq1=-Q/QhPQ
               Implicit: Q = eval(input())
f              Apply the following function until it is truthy,
               incrementing T each time starting at 1:
         PQ    Take the prime factorization of Q
        h      Take its first element, the smallest factor of Q
      /Q       Divide Q by that, giving Q's largest factor
    -Q         Subtract the result from Q
   =           Assign Q to that value
 q1            Check if Q is now 1.

fইলটারের সাথে এটি সত্যিই দুর্দান্ত কৌশল ।
মালটিসেন

3
আমি বুঝতে পারি না কেন এটি ফাংশনটি যে সময় চালিয়েছে তার সংখ্যা বাড়িয়ে দেয়। এটি কি একটি অনাবৃত বৈশিষ্ট্য f?
কর্সিকা

fএকটি দ্বিতীয় যুক্তি ছাড়াই @ করসিকা সমস্ত ইতিবাচক পূর্ণসংখ্যার থেকে শুরু হয়ে পুনরুক্তি করে 1এবং প্রথম মানটি দেয় যা অভ্যন্তরীণ বিবৃতিতে সত্য দেয়। এই মানটি এই প্রোগ্রামটিতে অব্যবহৃত হওয়ার কারণ হয়, তাই এটি যে সংখ্যাটি চালিয়েছে তার সংখ্যা ফিরে আসে। forfor(int i=1; some_condition_unrelated_to_i; i++) { change_stuff_that_affects_condition_but_not_i;}
বিনা প্রতিবন্ধী

@ কর্সিকা এটি অনলাইন অনুবাদকের ডান পাশে অক্ষর রেফারেন্সে নথিভুক্ত। শুধুমাত্র একটি আর্গুমেন্ট (সঙ্গে f <l:T> <none>), fহয় প্রথম ইনপুট যেখানে A(_)ওভার truthy হয়[1, 2, 3, 4...]
ডেনিস

আহ আমি এখন বুঝতে পারি। এটি সেই ইনপুট ব্যবহার করে তবে গণনায় কখনই ইনপুট ব্যবহার করে না । এটি "এটি একটি দুর্দান্ত কৌশল" এর মাল্টেসেনের মন্তব্যের ব্যাখ্যা দেয় কারণ আপনি কেবলমাত্র পুনরাবৃত্তি গণনাটি যত্নবান হন যে আপনার ফিল্টারের কোথাও সেই গণনাটি ব্যবহার করা হয়নি। আমি সেই আহ-হা মুহুর্তগুলিকে ভালবাসি!))
কর্সিকা

7

পাইথন 2, 50 49 বাইট

f=lambda n,k=1:2/n or n%(n-k)and f(n,k+1)or-~f(k)

এটি শীঘ্রই যে কোনও শেষ পরীক্ষার মামলা শেষ করতে চলেছে না ...

অন্যথা, এখানে একটি 48-বাইট যা ফেরৎ এর Trueপরিবর্তে 1জন্য n=2:

f=lambda n,k=1:n<3or n%(n-k)and f(n,k+1)or-~f(k)

6

জেলি , 10 বাইট

ÆfḊPạµÐĿi2

এটি অনলাইন চেষ্টা করুন! বা বেশিরভাগ পরীক্ষার কেস যাচাই করুন । সর্বশেষ পরীক্ষার কেসগুলি স্থানীয়ভাবে দ্রুত শেষ হয়।

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

ÆfḊPạµÐĿi2  Main link. Argument: n (integer)

Æf          Factorize n, yielding a list of primes, [] for 1, or [0] for 0.
  Ḋ         Dequeue; remove the first (smallest) element.
   P        Take the product.
            This yields the largest proper divisor if n > 1, 1 if n < 2.
    ạ       Yield the abs. value of the difference of the divisor (or 1) and n.
     µ      Convert the chain to the left into a link.
      ÐĿ    Repeatedly execute the link until the results are no longer unique.
            Collect all intermediate results in a list.
            For each starting value of n, the last results are 2 -> 1 -> 0 (-> 1).
        i2  Compute the 1-based index of 2.

5

রেটিনা , 12

  • 14 মার্টিনবাটনারকে 14 টি বাইট সংরক্ষণ করা হয়েছে thanks
(1 + +) (? = \ 1 + + $)

এটি আনারি এবং দশমিক হিসাবে দেওয়া আউটপুট প্রদত্ত ইনপুট ধরে নেয় । যদি এটি গ্রহণযোগ্য না হয় তবে আমরা আরও 6 বাইটের জন্য এটি করতে পারি:

রেটিনা , 18

  • 8 মার্টিনবাটনারকে 8 টি বাইট সংরক্ষণ করা হয়েছে
। + +
$ *
(1 + +) (? = \ 1 + + $)

এটি অনলাইনে চেষ্টা করে দেখুন - একযোগে সমস্ত টেস্টকেস চালানোর জন্য প্রথম লাইন যুক্ত হয়েছে।

দুঃখের বিষয় এটি গণনার জন্য অবিচ্ছিন্ন ব্যবহার করে, তাই ২০১৫ 155 এর ইনপুটটি ব্যবহারিক নয়।

  • প্রথম পর্যায়ের (2 লাইন) কেবল একটি স্ট্রিং হিসেবে ইউনারী দশমিক ইনপুট পরিবর্তন করে 1গুলি
  • দ্বিতীয় পর্যায়ে (1 লাইন) এনের বৃহত্তম ফ্যাক্টর গণনা করে রেগেক্স ম্যাচিং গ্রুপ এবং লুক-হিন্ডস ব্যবহার করে এবং কার্যকরভাবে এটিকে n থেকে বিয়োগ করে। যতটা সম্ভব সংখ্যা হ্রাস করার জন্য এই রেজেক্সটি যতবার প্রয়োজন তার সাথে মিলবে। রেজেক্স মিলগুলির সংখ্যা পদক্ষেপের সংখ্যা হবে এবং এই পর্যায়ে আউটপুট হবে।

আমি আপনাকে মনে করি না \b
মার্টিন ইন্ডার


@ মার্টিনব্যাটনার ফ্যান্টাস্টিক! খুব মার্জিত - ধন্যবাদ!
ডিজিটাল ট্রমা

5

পাইথ - 15 14 13 বাইট

বিশেষ কেসিং 1আমাকে সত্যিই হত্যা করছে।

tl.u-N/Nh+PN2

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

tl                One minus the length of
 .u               Cumulative fixed point operator implicitly on input
  -N              N -
   /N             N /
    h             Smallest prime factor
     +PN2         Prime factorization of lambda var, with two added to work with 1

1
একটি জিনিস যা আমি সবসময় ভুলে যাই .... হিংস্র শক্তি প্রায়শই গল্ফিয়েস্ট অ্যাপ্রোচ
Leaky Nun

বিশেষ কেসিংয়ের অর্থ কী 1?
আদনান

1
@ আদনান হ'ল প্রধান উপাদানটি 1হ'ল [], যখন আমি প্রথম উপাদানটি গ্রহণ করি তখন ত্রুটি ঘটে। এটি 1আবার .uফেরাতে আমাকে বিশেষ কেস করতে হবে যাতে স্থির-পয়েন্টটি শেষ হয়। .xচেষ্টা করার চেয়ে আমি একটি ভাল উপায় খুঁজে পেয়েছি যা আমাকে সেই 2 বাইট সংরক্ষণ করেছিল।
মাল্টেসেন

এর জন্য কেবল সংখ্যাগুলি = = ((1)) গ্রহণ করা দরকার।
সলোমন উকো

@ সলোমনউকো আপনি ভুল বোঝাবুঝি করছেন, .uস্থির-পয়েন্টটি শেষ পর্যন্ত 1সমস্ত ইনপুটের জন্য পৌঁছে যাবে , সেই সময়ে এটি বিশেষ কেসড হতে হবে।
মাল্টেসেন

5

জাভাস্ক্রিপ্ট (ES6), * 44 38

6 টি বাইট সম্পাদনা করুন ধন্যবাদ @ l4m2

(* ৪ টি স্ট্রাইক করা এখনও 4)

পুনরাবৃত্তি ফাংশন

f=(n,d=n)=>n>1?n%--d?f(n,d):f(n-d)+1:0

কম গল্ফড

f=(n, d=n-1)=>{
  if (n>1)
    if(n % d != 0)
      return f(n, d-1) // same number, try a smaller divisor
    else
      return f(n-d)+1  // reduce number, increment step, repeat
  else
    return 0
}

পরীক্ষা

f=(n,d=n)=>n>1?n%--d?f(n,d):f(n-d)+1:0

console.log=x=>O.textContent+=x+'\n';

[5,30,31,32,100,200].forEach(x=>console.log(x+' -> '+f(x)))
<pre id=O></pre>


ভাল লাগছে, তবে আমার মনে হয় আপনার f (1) == 0. বানানোর জন্য প্রয়োজনীয় দুটি বাইট ব্যয় করা উচিত
নীল

@ নীল আবার চিন্তা করছেন: না। "আসুন এন একটি প্রাকৃতিক সংখ্যা ≥ 2 ..."
edc65

আমার নতুন চশমা দরকার।
নিল

কেন হবে না f=(n,d=n)=>n>1?n%--d?f(n,d):f(n-d)+1:0?
l4m2

@ l4m2 ঠিক আছে, কেন নয়? ধন্যবাদ
edc65

4

গণিত, 36 বাইট

f@1=0;f@n_:=f[n-Divisors[n][[-2]]]+1

একটি নামহীন ফাংশন একই বাইট গ্রহণ করে:

If[#<2,0,#0[#-Divisors[#][[-2]]]+1]&

এটি একটি পুনরাবৃত্তি ফাংশন হিসাবে সংজ্ঞাটির একটি খুব সরল বাস্তবায়ন।


4

অক্টাভা, 59 58 55 বাইট

function r=f(x)r=0;while(x-=x/factor(x)(1));r++;end;end

স্টিভি গ্রিফিনকে 1 বাইট সাশ্রয় করে ধন্যবাদ জানিয়েছে

আরও আপডেট, চেক-ইন-এ চিকিত্সার ফলাফল ব্যবহার করে আরও তিনটি বাইট সংরক্ষণ করা।

নমুনা রান:

octave:41> f(5)
ans =  3
octave:42> f(30)
ans =  6
octave:43> f(31)
ans =  7
octave:44> f(32)
ans =  5
octave:45> f(100)
ans =  8
octave:46> f(200)
ans =  9

endঅষ্টকায় শেষ প্রয়োজনীয়?
Abr001am

এটাই. আমি লক্ষ্য করেছি যে এটি আপনার উত্তরগুলি থেকে মতলব নয়, তবে অক্টাভা এটি প্রত্যাশা করে (যেমন আমি অক্টোবায় আপনাকে চেষ্টা করে শিখেছি)।
dcsohl

4

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

f 1=0;f n=1+(f$n-(last$filter(\x->n`mod`x==0)[1..n`div`2]))

ব্যবহার:

Prelude> f 30
Prelude> 6

তালিকাটি তৈরি করার কারণে এটি বৃহত সংখ্যার জন্য কিছুটা অক্ষম হতে পারে।


1
তালিকা ধী এবং <1পরিবর্তে ==0: কয়েকটি বাইট সংরক্ষণ f 1=0;f n=1+f(n-last[a|a<-[1..nDIV আছে2],mod n a<1])
Angs

4

জুলিয়া, 56 50 45 39 বাইট

f(n)=n>1&&f(n-n÷first(factor(n))[1])+1

এটি একটি পুনরাবৃত্ত ফাংশন যা কোনও পূর্ণসংখ্যাকে গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়।

Ungolfed:

function f(n)
    if n < 2
        # No decrementing necessary
        return 0
    else
        # As Dennis showed in his Jelly answer, we don't need to
        # divide by the smallest prime factor; any prime factor
        # will do. Since `factor` returns a `Dict` which isn't
        # sorted, `first` doesn't always get the smallest, and
        # that's okay.
        return f(n - n ÷ first(factor(n))[1]) + 1
    end
end

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

মার্টিন বাটনারকে 6 বাইট এবং ডেনিসকে 11 ধন্যবাদ সংরক্ষণ করা!


3

পাওয়ারশেল ভি 2 +, 81 বাইট

param($a)for(;$a-gt1){for($i=$a-1;$i-gt0;$i--){if(!($a%$i)){$j++;$a-=$i;$i=0}}}$j

বর্বর শক্তির নিষ্ঠুর।

ইনপুট নেয় $a, কম বা সমান forনা হওয়া পর্যন্ত একটি লুপে প্রবেশ $aকরে 1। প্রতিটি লুপ আমরা অন্য forলুপটি দিয়ে যাচ্ছি যা $aআমাদের ডিভাইডার ( !($a%$i) না পাওয়া অবধি নিচে গণনা করা হয় । সবচেয়ে খারাপ, আমরা $i=1একটি বিভাজক হিসাবে খুঁজে পাবেন । যখন আমরা করি, তখন আমাদের পাল্টা $jবাড়ান, আমাদের বিভাজকটি বিয়োগ করুন $a-=$iএবং $i=0অভ্যন্তরীণ লুপটি বিচ্ছিন্ন হয়ে যাওয়ার জন্য সেট করুন । অবশেষে, আমরা এমন অবস্থায় পৌঁছে যাব যেখানে বাইরের লুপটি মিথ্যা (যেমন, $aপৌঁছে গেছে 1), সুতরাং আউটপুট $jএবং প্রস্থান করুন।

সতর্কতা : এটি বৃহত সংখ্যক বিশেষত প্রাইমগুলিতে দীর্ঘ সময় নিবে । 100,000,000 এর ইনপুটটি আমার কোর আই 5 ল্যাপটপে ~ 35 সেকেন্ড সময় নেয়। সম্পাদনা করুন - সবেমাত্র [int]::MaxValue(2 ^ 32-1) দিয়ে পরীক্ষা করা হয়েছে এবং এটিতে 27 মিনিট সময় লেগেছে। না খুব খারাপ, আমি অনুমান।



3

জাপট , 12 বাইট (প্রতিযোগী নয়)

@!(UµUk Å×}a

এটি অনলাইন পরীক্ষা! প্রতিযোগিতামূলক নয় কারণ এটি চ্যালেঞ্জ পোস্ট হওয়ার পরে যুক্ত করা বেশ কয়েকটি বৈশিষ্ট্য ব্যবহার করে।

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

@   !(Uµ Uk Å  ×   }a
XYZ{!(U-=Uk s1 r*1 }a
                       // Implicit: U = input integer
XYZ{               }a  // Return the smallest non-negative integer X which returns
                       // a truthy value when run through this function:
         Uk            //   Take the prime factorization of U.
            s1         //   Slice off the first item.
                       //   Now we have all but the smallest prime factor of U.
               r*1     //   Reduce the result by multiplication, starting at 1.
                       //   This takes the product of the array, which is the
                       //   largest divisor of U.
      U-=              //   Subtract the result from U.
    !(                 //   Return !U (which is basically U == 0).
                       //   Since we started at 0, U == 1 after 1 less iteration than
                       //   the desired result. U == 0 works because the smallest
                       //   divisor of 1 is 1, so the next term after 1 is 0.
                       // Implicit: output result of last expression

এই কৌশলটি 05AB1E উত্তরের দ্বারা অনুপ্রাণিত হয়েছিল । পূর্ববর্তী সংস্করণ ব্যবহৃত হয়েছে ²¤(একটি 2 টিপুন, প্রথম দুটি আইটেম কেটে টুকরো টুকরো করুন) Åকারণ এটি এক বাইটের চেয়ে কম s1 (নোট ট্রেলিং স্পেস); আমি শুধু সত্য যে কারণ এই একটি 2 appends পর উপলব্ধি শেষ অ্যারের থেকে টুকরা প্রারম্ভে , এটা আসলে কোনো বিজোড় যৌগিক সংখ্যার উপর ব্যর্থ হয়, যদিও এটি সব দেওয়া পরীক্ষার বিষয় কাজ করে।


2

পাইথন 3, 75, 70 , 67 বাইট।

g=lambda x,y=0:y*(x<2)or[g(x-z,y+1)for z in range(1,x)if x%z<1][-1]

এটি একটি দুর্দান্ত সোজা ফরোয়ার্ড পুনরাবৃত্ত সমাধান। উচ্চ সংখ্যার পরীক্ষার ক্ষেত্রে এটি অনেক দীর্ঘ সময় নেয় takes


2

> <>, 32 বাইট

<\?=2:-$@:$/:
1-$:@@:@%?!\
;/ln

nস্ট্যাকের ইনপুট নম্বরটি আশা করে ।

এই প্রোগ্রামটি স্ট্যাকের উপর সম্পূর্ণ ক্রম তৈরি করে। শুধুমাত্র সংখ্যা হতে পারে হিসাবে 1হয় 2, ক্রম নির্মাণের যখন স্টপ 2উপনিত। এটি স্ট্যাকের আকারের সাথে ধাপের সংখ্যার তুলনায় +1 পদক্ষেপের সংখ্যাও বাড়ায়।


2

রুবি, 43 বাইট

f=->x{x<2?0:1+f[(1..x).find{|i|x%(x-i)<1}]}

আমাদের পৌঁছানো অবধি বিভাজন এবং পুনরাবৃত্তি হওয়া iযেমন সর্বাধিকতম সংখ্যার সন্ধান করুন ।xx-i1


2

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

কোডটি এখানে:

a&b|b<2=0|a==b=1+2&(b-1)|mod b a<1=1+2&(b-div b a)|1<2=(a+1)&b
(2&)

এবং হাস্কেল দুর্দান্ত হওয়ার এক কারণ এখানে:

f = (2&)

(-->) :: Eq a => a -> a -> Bool
(-->) = (==)

h=[f(5)        --> 3
  ,f(30)       --> 6
  ,f(31)       --> 7
  ,f(32)       --> 5
  ,f(100)      --> 8
  ,f(200)      --> 9
  ,f(2016^155) --> 2015
  ]

হ্যাঁ, হাস্কেলতে আপনি এর -->সমতুল্য হতে সংজ্ঞা দিতে পারেন ==


2

মতলব, 107 বাইট

a=input('');b=factor(a-isprime(a));c=log2(a);while(max(b)>1),b=max(factor(max(b)-1));c=c+1;end,disp(fix(c))
  • প্রতিযোগিতামূলক, এটি আমার শেষ জমা দেওয়ার পুনরাবৃত্ত অনুবাদ নয়, কেবল অন্য প্রত্যক্ষ বীজগণিতের পদ্ধতি, এটি সমস্ত মৌলিক কারণগুলির সমস্ত বাইনারি-লগগুলি বোঝায়, উদাহরণস্বরূপ অস্পষ্ট kind
  • সময় পেলে আমি আরও গল্ফ করব।

2

এমএটিএল, 17 16 বাইট

`tttYfl)/-tq]vnq

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

ব্যাখ্যা

        % Implicitly grab input
`       % Do while loop
    ttt % Make three copies of top stack element
    Yf  % Compute all prime factors
    l)  % Grab the smallest one
    /   % Divide by this to get the biggest divisor
    -   % Subtract the biggest divisor
    t   % Duplicate the result
    q   % Subtract one (causes loop to terminate when the value is 1). This
        % is functionally equivalent to doing 1> (since the input will always be positive) 
        % with fewer bytes
]       % End do...while loop
v       % Vertically concatenate stack contents (consumes entire stack)
n       % Determine length of the result
q       % Subtract 1 from the length
        % Implicitly display result

2

সি 99, 62 61 বাইট

অ্যালচিমিস্ট দ্বারা 1 বাইট গল্ফড

f(a,c,b)long*c,a,b;{for(*c=0,b=a;a^1;a%--b||(++*c,b=a-=b));}  

F (x, & y) হিসাবে কল করুন, যেখানে x ইনপুট এবং y আউটপুট।


যদি আপনি% - b পরীক্ষা করে থাকেন তবে আপনি শেষে --- এড়াতে পারবেন। একটি পুরো একটি বাইট সঞ্চয়।
অ্যালকিমিস্ট


2

ক্লোজার, 116 104 বাইট

(fn[n](loop[m n t 1](let[s(- m(last(filter #(=(rem m %)0)(range 1 m))))](if(< s 2)t(recur s (inc t))))))

গুণমানগুলি সন্ধানের জন্য একটি ব্যাপ্তি ফিল্টার করে -12 বাইটস, তারপরে lastএকটি সর্বাধিক পাওয়ার জন্য using

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

প্রিগল্ফড এবং পরীক্ষা:

(defn great-divider [n]
  ; Filter a range to find multiples, then take the last one to get the largest
  (last
     (filter #(= (rem n %) 0)
             (range 1 n))))

(defn sub-great-divide [n]
  (loop [m n
         step 1]
    (let [g-d (great-divider m) ; Find greatest divisor of m
          diff (- m g-d)] ; Find the difference
      (println m " is " g-d " --> " m " - " g-d " = " diff)
      (if (< diff 2)
        step
        (recur diff (inc step))))))

(sub-great-divide 30)

30  is  15  -->  30  -  15  =  15
15  is  5  -->  15  -  5  =  10
10  is  5  -->  10  -  5  =  5
5  is  1  -->  5  -  1  =  4
4  is  2  -->  4  -  2  =  2
2  is  1  -->  2  -  1  =  1
6

1
@ অন্তর্ভুক্ত ব্যবহারকারী নাম নেই, দুর্ভাগ্যক্রমে, কারণ এগুলি সমস্ত বৈধ শনাক্তকারী। আমি সম্ভাব্য সমস্ত সাদা স্থান সরিয়ে ফেলেছি। যদি আমি এটি আরও গল্ফ করতে চাই তবে আমাকে অ্যালগরিদমটি পুনরায় কাজ করতে হবে।
18:37

2

পার্ল 6 , 35 বাইট

{+({$_ -first $_%%*,[R,] ^$_}...1)}

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

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

{                                 }   # A bare block lambda.
                    [R,] ^$_          # Construct range from arg minus 1, down to 0.
        first $_%%*,                  # Get first element that is a divisor of the arg.
    $_ -                              # Subtract it from the arg.
   {                        }...1     # Do this iteratively, until 1 is reached.
 +(                              )    # Return the number of values generated this way.

1

পাইথ, 17 16 বাইট

L?tbhy-b*F+1tPb0

এটি অনলাইন চেষ্টা করুন! ( y.vশেষে ফাংশন কলিংয়ের জন্য রয়েছে)


আসল 17 বাইট:

L?tb+1y-b*F+1tPb0

এটি অনলাইন চেষ্টা করুন! ( y.vশেষে ফাংশন কলিংয়ের জন্য রয়েছে)

(আমি আসলে এই পাইথ প্রোগ্রামটি দিয়ে সেই প্রশ্নের উত্তর দিয়েছি))


আমি আসলে আপনার প্রোগ্রামটি নিয়ে যাওয়ার ঝামেলা করি নি, তবে আপনি যদি ওপিতে পুনরাবৃত্ত সংজ্ঞাটি ব্যবহার করেন uতবে সম্ভবত আসল পুনরাবৃত্তির চেয়ে সংক্ষিপ্ত।
মালটিসেন

1

পাইক, 11 বাইট (নন-কেপটিং)

D3Phf-oRr;o

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

# Implicit input and variable setup
inp = input()
o = 0
# End implicit
try:
    while 1:
        inp -= factors(inp)[0] # If factors is called on the value 1, it returns an empty
                               # list which when the first element tries to be accessed
                               # raises an exception
        o += 1 # Using `o` returns the current value of `o` and increments it
except:
    print o # This in effect gets the number of times the loop went

কিছুক্ষণ লুপ নির্মাণ ব্যতিরেকে পাইকে ব্যবহার করা সম্ভব -

এখানে চেষ্টা করুন!


1

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

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

সরবরাহিত পুনরাবৃত্তির সূত্রটি বাস্তবায়ন করা হয়েছে, তবে এখন বিভাজনকারীকে সন্ধান করতে পুনরাবৃত্তিগুলি ব্যবহার করতে আপডেট করা হয়েছে।


1

পার্ল, 57 + 1 ( -pপতাকা) = 58 বাইট

$n=$_;$n-=$n/(grep!($n%$_),2..$n/2,$n)[0],$\++while$n>1}{

ব্যবহার:

> echo 31 | perl -pe '$n=$_;$n-=$n/(grep!($n%$_),2..$n/2,$n)[0],$\++while$n>1}{'

Ungolfed:

while (<>) {
# code above added by -p
    # $_ has input value
    # $\ has undef (or 0)
    my $n = $_;
    while ($n > 1) {
        my $d = 1;
        for (2 .. ($n / 2)) {
            if ($n % $_ == 0) {
                $d = $n / $_;
                last;
            }
        }
        $n -= $d;
        $\++;
    }
} {
# code below added by -p
    print;  # prints $_ (undef here) and $\
}

1

ক্লোজার, 98 96 বাইট

#(loop[n % i -1](if n(recur(first(for[j(range(dec n)0 -1):when(=(mod n j)0)](- n j)))(inc i))i))

for :whenবৃহত্তম বিভাজকটি অনুসন্ধান করতে ব্যবহার করে, যতক্ষণ না কোনওের চেয়ে বড় এরকম কোনও মান না পাওয়া যায় ops

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