প্রাইম ফ্যাক্টোরাল রুটস


14

ডিজিটাল শিকড় দ্বারা অনুপ্রাণিত হয়ে, কোনও সংখ্যার প্রধান প্রকৃত মূলটি সেই সংখ্যার উত্থান হয় যখন আপনি কোনও সংখ্যার প্রধান উপাদানগুলি গ্রহণ করেন, তাদেরকে একসাথে যুক্ত করেন এবং ফলস্বরূপ সংখ্যায় প্রক্রিয়াটি পুনরাবৃত্তি করেন, যতক্ষণ না আপনি একটি মৌলিক সংখ্যার সাথে শেষ করেন ( যার নিজস্ব একমাত্র মৌলিক ফ্যাক্টর হিসাবে এটি রয়েছে এবং এটি এর নিজস্ব প্রধান প্রকৃত মূল)। 4 এর প্রধান প্রকৃত মূল 4, 2 * 2 = 2 + 2 হিসাবে, এবং এটি 1 এর চেয়ে বড় পূর্ণসংখ্যার একমাত্র অ-প্রাইম প্রিমিয়ার মূল (এটি অন্য একটি বিশেষ ক্ষেত্রে, কারণ এর কোনও মৌলিক কারণ নেই)। প্রাইম ফ্যাক্টোরিয়াল শিকড় দ্বারা গঠিত OEIS ক্রমটি A029908

উদাহরণস্বরূপ, 24 এর মূল প্রকৃত মূলটি হ'ল:

24=2*2*2*3

2+2+2+3=9=3*3

3+3=6=2*3

2+3=5, and the only prime factor of 5 is 5.  Therefore, the prime factoral root of 24 is 5.  

তোমার কাজ:

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা কোনও ইনপুট পূর্ণসংখ্যার মূল দিকটি খুঁজে পায়।

ইনপুট:

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

আউটপুট:

একটি পূর্ণসংখ্যা, ইনপুটটির মূল দিকের মূল।

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

4   -> 4
24  -> 5
11  -> 11
250 -> 17

স্কোরিং:

এটি , বাইট জয়ের সর্বনিম্ন স্কোর!


3
আপনি কি 4পরীক্ষার ক্ষেত্রে যুক্ত করতে পারেন , যেহেতু এটি একটি ব্যতিক্রম এবং উত্তর পরীক্ষা করার সময় এটি ভুলে যাওয়া সহজ?
স্কটনেট

আমাদের কি 1 এর জন্য 1 আউটপুট দিতে হবে?
আমার সর্বনাম

লিঙ্কযুক্ত ওইআইএস ক্রম অনুসারে @ কোনও এক, এটি 1 এর জন্য 0 আউটপুট করা উচিত
স্কটনেট

2
@ সোমোন চ্যালেঞ্জটি জানিয়েছে যে ইনপুটটি কমপক্ষে 2 হবে
মার্টিন এন্ডার

@ সোমন কিছুক্ষণের জন্য বন্ধ থাকার জন্য দুঃখিত। মার্টিন যেমন বলেছিলেন, চ্যালেঞ্জটি স্পষ্টতই বলেছে যে ইনপুটটি একের বেশি হবে এবং সুতরাং ইনপুটটি 1 হলে আচরণ অপরিজ্ঞাত হয়।
গ্রিফন

উত্তর:


15

05 এ বি 1 , 3 বাইট

FÒO

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

ব্যাখ্যা:

FÒO   
F    Loops <input> times + 1
 Ò   List of prime factors w/ duplicates
  O  Total sum of the list
     -- implicit output

এটি ব্যর্থ বলে মনে হচ্ছে 4
শেগি

1
@ শেগি 2 বাইট সংরক্ষণের সময় ঠিক করেছেন
স্কটিটনেট

10
এটি কি একে একজন FÒO- যোদ্ধা মারার চেষ্টা করছে?
স্টেনবার্গ

কমপক্ষে এটি ফুবার ছিল না।
ম্যাজিক অক্টোপাস আরন

14

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

import Data.Numbers.Primes
until=<<((==)=<<)$sum.primeFactors

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

ব্যাখ্যা

until=<<((==)=<<)কোনও ফাংশন নেয় fএবং xকোনও নির্দিষ্ট পয়েন্ট না পাওয়া পর্যন্ত এটি ইনপুটটিতে প্রয়োগ করে , এটি f xসমান xprimeFactorsএকটি সংখ্যার প্রধান উপাদানগুলির তালিকা প্রদান করে,sum তালিকা প্রদান করে, সংখ্যার তালিকার যোগফল উপস্থাপন করে।

তবে অপেক্ষা করুন, কাজটি কেন until=<<((==)=<<) এত অদ্ভুত দেখাচ্ছে?

যদি আমরা ধরে নিই f=sum.primeFactors, তবে আরও প্রাকৃতিক সংজ্ঞা হবে until(\x->f x==x)f, কারণ untilএকটি প্রিডিকেট (একটি ফাংশন যা বুলিয়ান ফিরিয়ে দেয়) নেয়, একটি ফাংশন যা একই ইনপুট এবং রিটার্ন টাইপ (যেমন Int -> Int) এবং এই ধরণের মান রাখে এবং তারপরে এই ফাংশনটি প্রয়োগ করে ভবিষ্যদ্বাণী পূর্ণ হওয়া অবধি মান।

until(\x->f x==x)fহিসাবে একই until(\x->(==)(f x)x)f, এবং যেমন ঝুলিতে যে g (h x) xহিসাবে একই (g=<<h)x, আমরা পেতে until(\x->((==)=<<f)x)fএটা রূপান্তর হওয়ার পরে , এটি হয়ে যায় until((==)=<<f)f। কিন্তু আমরা এখন বিবেচনা (==)=<<একটি ফাংশন যা প্রয়োগ করা হয় যেমন f, আমরা দেখতে পারেন until(((==)=<<)f)fফর্মের আবার g (h x) x, সঙ্গে g=until, h=((==)=<<)এবং x=f, তাই এটি পুনর্লিখিত করা যেতে পারে (until=<<((==)=<<))f। ব্যবহার $বাইরের প্রথম বন্ধনী পরিত্রাণ পেতে অপারেটর এবং বদলে fদিয়ে sum.primeFactorsউৎপাদনের উপরে থেকে সমাধান।


4
=<<((==)=<<)$Whaaaaaat।
সম্পূর্ণরূপে

2
আমি একটি ব্যাখ্যা যুক্ত করেছি এই মায়াবিদ্যা কীভাবে কাজ করে সে সম্পর্কে আপনার যদি আরও প্রশ্ন থাকে তবে হাস্কেল চ্যাট রুমে নির্দ্বিধায় জিজ্ঞাসা করুন।
লাইকনি


4

পাইথ , 3 বাইট

usP

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

ব্যাখ্যা:

usPGQ The trailing GQ is implicit
  PG  Get prime factors
 s    Sum
u   Q Repeat until returned value no longer unique starting with the input

আপনি কি আপনার ব্যাখ্যা আপডেট করতে ভুলে গেছেন?
MCMasty

1
@ এমসিমিস্ট্রি নং, কোড এবং ব্যাখ্যা একই রকম। The trailing GQ is implicit
সম্পূর্ণমানবিক

@ এমসি ম্যাসাস্ট্রি আমি যা বলেছি তা প্রকাশ করেছেন
এরিক দ্য আউটগল্ফার

4

পাইথন 2 , 84 বাইট

f=lambda n,d=2:n>1and(n%d and f(n,d+1)or d+f(n/d))
i=input()
exec'i=f(i);'*i
print i

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


এটি একটি সুন্দর বোবা প্রশ্ন হতে পারে, কিন্তু কিভাবে f=lambda n,d=2:n>1and(n%d and f(n,d+1)or d+f(n/d))কাজ করে? আমি পাইথন (মূলত জাভা এবং সি #) তে কখনই প্রোগ্রাম করি নি, তাই এই ফাংশনটির ফলাফল কী তা আমি নিশ্চিত নই। এই ফাংশনটি কি ইনপুটটিকে সংশোধন করে nএবং এটির পরে ফিরিয়ে দেয়, বা এটি n>1and(n%d and f(n,d+1)or d+f(n/d))0 বা 1, বা 0 বা nঅন্য কোনও কিছু যেখানে বুলিয়ান আছে তার মতো? আমি জাভা / সি # তে এর কোনও বন্দর দেখতে কেমন হবে তা ভিজ্যুয়ালাইজ করার চেষ্টা করছি, তবে আমি অক্ষম কারণ আমি সাধারণভাবে পাইথন ল্যাম্বডাসকে বুঝতে পারি না।
কেভিন ক্রুইজসেন 4:44

1
@ কেভিন ক্রুইজসেন এটির সমান n>1 ? (n%d!=0 ? f(n, d+1) : d+f(n/d)) : n>1। সাধারণভাবে x and yসমান x ? y : x। বেশিরভাগ ক্ষেত্রে x and y or zসমান x ? y : z
ovs

1
@ কেভিন ক্রুজসেন একটি জাভা বন্দরটি এমন কিছু হবে f=(n,d=2)->n>1?n%d>0?f(n,d+1):d+f(n/d):0
ovs

আহ, ঠিক আছে. ব্যাখ্যার জন্য ধন্যবাদ, এখন এটি আরও অনেক বেশি অর্থবোধ করে। আর আমার মনে আছে x and yহচ্ছে x ? y : xপাশাপাশি জাভাস্ক্রিপ্ট থেকে। ধন্যবাদ!
কেভিন ক্রুইজসেন

4

জাভা 8, 175 144 142 141 বাইট

n->{for(int i,t=n,x;;n=t){for(i=2;i<t;t=t%i++<1?0:t);if(t>1|n<5)return n;for(t=0,i=1;i++<n;)for(;n%i<1;n/=i,t+=x)for(x=i;x>9;x/=10)t+=x%10;}}

-1 বাইট @ নেভায়ে ধন্যবাদ ।

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

ব্যাখ্যা:

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

n->{                // Method with integer as both parameter and return-type
  for(int i,        //  Index-integer `i`
          t=n,      //  Temp integer `t`, starting at the input `n`
          x;        //  Temp integer `x`
      ;             //  Loop (1) indefinitely
      n=t){         //    After every iteration, replace `n` with the value `t`
    for(i=2;        //   Reset `i` to 2
        i<t;        //   Inner loop (2) from 2 to `t` (exclusive)
        t=t%i++<1?  //    If `t` is divisible by `i`:
           0        //     Set `t` to 0
          :         //    Else:
           t        //     Leave `t` the same
    );              //   End of inner loop (2)
    if(t>1          //   If `t` is not 0 (it means it's a prime),
       |n<5)        //   or if `n` is below 5 (for edge-cases `4` and 'prime' `1`)
      return n;     //    Return `n` as result
    for(t=0,        //   Reset `t` to 0
        i=1;        //   Reset `i` to 1
        i++<n;)     //   Inner loop (3) from 2 to `n` (inclusive)
      for(;n%i<1;   //    Inner loop (4) as long as `n` is divisible by `i`
          n/=i,     //      After every iteration: Divide `n` by `i`,
          t+=x)     //      and increase `t` by `x`
        for(x=i;    //     Reset `x` to `i`
            x>9;    //     Inner loop (5) as long as `x` contains more than 1 digit
            x/=10)  //       After every iteration, remove the trailing digit
          t+=n%10;  //      Increase `t` with the trailing digit of `n`
                    //     End of inner loop (5) (implicit / single-line body)
                    //    End of inner loop (4) (implicit / single-line body)
                    //   End of inner loop (3) (implicit / single-line body)
  }                 //  End of loop (1)
}                   // End of method

6
ভারবোস হিসাবে ব্যাখ্যা লিখতে বিরক্ত করার জন্য +1 যেন এটি একটি গল্ফের ভাষা।
আমার সর্বনাম

@ সোনার ধন্যবাদ! যেহেতু কেউ আমাকে অতীতে একবার আমার জাভা উত্তরের ব্যাখ্যা সম্পর্কে জিজ্ঞাসা করেছিল, তাই আমি আমার সমস্ত উত্তরগুলিতে এগুলি যুক্ত করে চলেছি। :)
কেভিন ক্রুইজসেন

i,t=n,xদেখে মনে হচ্ছে এটি পাইথনের অন্তর্গত, হাহা
ইটিএইচ প্রডাকশনগুলি

@ এথ প্রডাকশন হি, খুব খারাপ আমাকে এখনও লিডিং যোগ করতে হবে int (পাইথনের বিপরীতে)। ;)
কেভিন ক্রুইজসেন

আপনি i++<nপরিবর্তে ব্যবহার করতে পারেন ++i<=n
নেভায়ে


3

রেটিনা , 30 বাইট

{+`(\1|\b11+?\B)+$
$1;$#1$*
;

আনারি ইনপুট এবং আউটপুট

এটি অনলাইন চেষ্টা করুন!(সুবিধার জন্য দশমিক / অবিচ্ছিন্ন রূপান্তর সম্পাদন করে))

ব্যাখ্যা

{+`(\1|\b11+?\B)+$
$1;$#1$*

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

এই পর্যায়টি নিজেই ইনপুটটির মূল কারণ নির্ধারণ করে। +অনুরূপ {কিন্তু শুধুমাত্র এই পর্যায়ে loops এটা স্ট্রিং পরিবর্তন স্টপ পর্যন্ত। রেজেক্স 1বারবার একই সাবস্ট্রিংয়ের (অর্থাৎ ফ্যাক্টর) সাথে মিল রেখে চূড়ান্ত রানের সাথে মেলে চেষ্টা করে । ফরোয়ার্ড রেফারেন্সের কারণে এটি যেভাবে করা হচ্ছে তা কিছুটা বিশৃঙ্খলাবদ্ধ \1। প্রথম পুনরাবৃত্তিতে, গোষ্ঠীটি 1এখনও কিছু ক্যাপচার করেনি, তাই \1নিঃশর্ত ব্যর্থ। পরিবর্তে, আমাদের ম্যাচ করতে হবে \b11+?\Bযা রানের শুরুতে শুরু হওয়া সবচেয়ে ছোট সম্ভাব্য সাবস্ট্রিং, কমপক্ষে দুটি 1এস রয়েছে এবং পুরো রানটি কভার করে না। পরবর্তী পুনরাবৃত্তির কারণে, এই বিকল্পটি আর ব্যবহার করতে সক্ষম হবে না \b। সুতরাং আরও সমস্ত পুনরাবৃত্তির উপর, আমরা মিলছি\1 , একই বারে বারে বারে। $আমরা ক্যাপচার করেছি এবং আসল বিভাজক তা নিশ্চিত করতে এই প্রক্রিয়াটির ঠিক ( ) স্ট্রিংয়ের শেষে আঘাত করতে হবে hit এই কিছুটা জটিল পদ্ধতির ব্যবহারের সুবিধাটি হ'ল গ্রুপটি 1ঠিক এন / ডি ব্যবহার করা হবে বার , অর্থাত্ বিভাজককে বিভাজনের পরে যা থাকবে ডি

আমরা এই ম্যাচটি ডি ( $1), একটি পৃথকীকরণ ;এবং এন / ডি ( $#1$*যা $#1কপিগুলি সন্নিবেশ করায় 1, $#1গ্রুপ দ্বারা ক্যাপচারের সংখ্যা কোথায় রয়েছে ) দিয়ে প্রতিস্থাপন করব 1

স্ট্রিংয়ের চূড়ান্ত রানটি নিজেই একটি প্রধান হয়ে যাওয়ার পরে এই প্রক্রিয়াটি বন্ধ হয়ে যায়, কারণ তখন রেজেক্স আর মেলে না।

;

প্রাইমগুলি যোগ করতে আমাদের যা করতে হবে তা হ'ল সমস্ত বিভাজককে সরিয়ে ফেলা।




2

আর + প্র্যাকমা , 53 বাইট

function(n){for(i in 1:n)n=sum(pracma::factors(n))
n}

এটি অনলাইন চেষ্টা করুন! (R-বেহালার)

আর builtin একটি মৌলিক উত্পাদক কিন্তু অসংখ্য প্যাকেজ (নেই pracma, numbersতাই আমি সুবিধামত সংক্ষিপ্ত এক বাছাই করা, ইত্যাদি) না।


1

জেলি , 6 বাইট

এই উত্তরটিতে জেলির অনেকগুলি প্রাথমিক গুণক অন্তর্নির্মিতগুলির মধ্যে একটি ব্যবহার করা হয়েছে, এবং দ্রুত repeat until the results are no longer unique

ÆfSµÐL

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


আমি মনে করি আপনি আউটগল্ফড হয়ে গেছেন তবে আপনার দৃষ্টিভঙ্গি দেওয়া সত্ত্বেও , আমি উত্তর পাই না যে উত্তরটি কার্যকর হয় কিনা
সিয়ারড কোইনরিঙ্গিংহহিং

@ কায়ারডকোইনরিঙ্গিংহিংং আমি তার উত্তরটি (বা বরং, পাইথন সমতুল্য) 1 থেকে 100000 পর্যন্ত পরীক্ষা করেছি এবং এটি কার্যকর হয়। আমি মনে করি 1একমাত্র ক্ষেত্রে যেখানে প্রয়োজনীয় পদক্ষেপের সংখ্যার সমান n(যা ঠিক আছে; 1আমাদের কেবল এটি একবার চালানো দরকার), এবং পদক্ষেপের সংখ্যার চেয়ে বেশি এমন কোনও পরিস্থিতি বলে মনে হয় না n(যেমন। কোনও পাল্টা উদাহরণ বলে মনে হচ্ছে না)। আহ ভাল, আমি ছড়িয়ে পড়েছি: ডি
শার্লক 9

ঠিক আছে, এটা ঘটে। যদিও এই চ্যালেঞ্জটি কখন দেখলাম ঠিক একই কোড হওয়ার জন্য আমি +1 ভাবছিলাম
caird coinheringaahing

N এর প্রধান গুণাবলগুলির যোগফল সর্বদা n এর চেয়ে কম বা সমান হয়, এটি প্রমাণ করা বেশ সহজ করে তোলে যে এন সবসময় পর্যাপ্ত চেয়ে বেশি।
ক্রিস

1

এমএটিএল , 6 বাইট

প্রয়োজনের চেয়ে বেশিবার লুপিংয়ের জন্য স্কটিনেটের ধারণা ব্যবহার করে । একটি ভুল নির্দেশ করে এখনই সংশোধন করার জন্য শেগিকে ধন্যবাদ ।

t:"Yfs

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

ব্যাখ্যা

t       % Take input (implicit). Duplicate
:"      % Do the following that many times
  Yf    %   Array of prime factors
  s     %   Sum of array
        % End (implicit). Display (implicit)

এটি ব্যর্থ বলে মনে হচ্ছে 4
শেগি

@ শেগি ধন্যবাদ! এটি নিয়ে কাজ করা
লুইস মেন্ডো

@ শেগি এখনই সমাধান হয়েছে
লুইস মেন্ডো

1

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

function f($a){for($i=2;$a-gt1){if(!($a%$i)){$i;$a/=$i}else{$i++}}}
for($x=$args[0];$l-ne$x){$l=$x;$x=(f($x))-join'+'|iex}$x

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

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

দ্বিতীয় লাইন এই প্রোগ্রামের মাংস। আমরা থেকে ইনপুট নিতে $argsমধ্যে $x, তারপর forলুপ পর্যন্ত $lহয় -nOT eগণদেবতা করতে $x। (প্রথম পুনরাবৃত্তির, $lহয় $nullএবং$x এটি একটি পূর্ণসংখ্যা, তাই আমরা কমপক্ষে একবার লুপ করব)।

লুপের অভ্যন্তরে, আমরা লুপটির $l = $xশেষের দিকে আঘাত করেছি কিনা তা নির্ধারণের জন্য আমাদের সেট করেছি। তারপর আমরা কারণের পেতে $xসঙ্গে f($x), -joinসেই একসঙ্গে সঙ্গে +এবং |iex(সংক্ষিপ্ত তাদের Invoke-Expressionএবং অনুরূপ eval)। এটি আবার জমা হয় $x। সুতরাং, আমরা "শেষ" টিপে আঘাত করেছি যেখানে একসাথে সংক্ষিপ্ত মৌলিক উপাদানটি আবার ফিরে আসে। তারপরে, আমরা কেবল $xপাইপলাইনে রাখি এবং আউটপুট অন্তর্ভুক্ত।


0

গণিত, 35 বাইট

#//.x_:>Tr[1##&@@@FactorInteger@x]&

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

(গণিত সমর্থন করে না does Trআমি নিজে এটি প্রয়োগ করতে হবে)


4
1##&এর জন্য সংক্ষিপ্ত Timesএবং FixedPointপ্রায় সর্বদা সংক্ষিপ্ত করা যেতে পারে //.:#//.x_:>Tr[1##&@@@FactorInteger@x]&
মার্টিন ইন্ডার

টুইটারে আমার ইতিমধ্যে জানা উচিত ছিল Times, কিন্তু আমি FixedPointকৌশল সম্পর্কে জানি না ।
ব্যবহারকারী 202729

আপনার কোডটি গাণিতিকায় লেখা আছে। এটি কোনও ম্যাথিক্স ফাংশন নয়। আপনি হয় ভাষাটির নাম ম্যাথমেটিকা ​​বা
ট্রিতে মোটে

@ {কেউ নেই} দুঃখিত, ভাষার নাম (গণিত) একটি ভুল ছিল। cri i CRit evritime} এটি ঠিক করে দিয়েছে।
ব্যবহারকারী 202729


0

রুবি , 63 বাইট

->n{n.times{n=n.prime_division.map{|x|x.reduce:*}.sum};n}

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

প্রাইম # প্রাইম_ বিভাগটি-rprime ব্যবহার করতে +6 বাইটের জন্য পতাকা ব্যবহার করে ।

prime_divisionজোড়গুলির জোড় দেয় [prime, exponent](উদাহরণস্বরূপ, 24 এর জন্য আমাদের এমন কারণগুলি রয়েছে [2, 2, 2, 3]যা এটি দেয় [[2, 3], [3, 1]]) তাই প্রতিটি পদক্ষেপে আমরা কেবল এই জোড়গুলির সদস্যদের একসাথে গুণ করি এবং ফলাফলগুলি যোগ করি।


0

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

f=n=>(q=(p=(m,x)=>m<x?0:m%x?p(m,x+1):x+p(m/x,x))(n,2))^n?f(q):q
<input id=i type=number min=0 value=0 oninput="o.innerText=f(i.value)">
<p id=o></p>

Ungolfed:

f=n=>(                  // Recursive function `f`
    p=(m,x=2)=>(        //   Recursive function `p`, used to sum prime factors
        m<x?            //     If m (the number to be factored) is less than x (the current
            0           //     iteration), return 0
        :m%x?           //     Else if m doesn't divide x
            p(m,x+1)    //     run the next iteration
        :               //     Else (if m divides x)
            x+p(m/x,x)  //     Divide m by x and repeat the current iteration
    ),
    q=p(n),             //   Set q to the sum of the prime factors of n
    q^n?                //   If q != n then
        f(q)            //     repeat f with q
    :                   //   else
        q               //     return q
)

0

জাভা 8, 101 বাইট

n->{for(int i=n;i-->0;n=f(n,2));return n;}int f(int n,int d){return n>1?n%d>0?f(n,d+1):d+f(n/d,2):0;}

@Ovs এর আশ্চর্যজনক পাইথন 2 উত্তরটির বন্দর ।

ব্যাখ্যা:

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

n->{                  // Method with integer as both parameter and return-type
  for(int i=n;i-->0;  //  Loop the input amount of times
    n=f(n,2)          //   And change `n` that many times with a separate method call
  );                  //  End of loop
  return n;           //  Then return the integer `n` as result
}                     // End of method

int f(int n,int d){   // Separated method with 2 integer parameters and integer return-type
                      // (`d` is 2 when we initially call this recursive-method)
  return n>1?         //  If input `n` is larger than 1:
    n%d>0?            //   And it's not divisible by `d`:
     f(n,d+1)         //    Do a recursive-call with `n, d+1`
    :                 //   Else:
     d                //    Sum `d` with
      +f(n/d,2)       //    a recursive call with `n/d, 2`
   :                  //  Else:
    0;                //   Simply return 0
}                     // End of separated method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.