যে শক্তিগুলি সমষ্টি


35

একটি সহজ তবে আশা করি খুব তুচ্ছ চ্যালেঞ্জ নয়:

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা kসংখ্যাকে বিভাজনে যুক্ত করার ক্ষমতা যোগ করে n। আরো নির্দিষ্টভাবে:

  • ইনপুট: দুটি ধনাত্মক পূর্ণসংখ্যা nএবং k(অথবা একটি অর্ডারযুক্ত সংখ্যক জোড় ইত্যাদি)
  • আউটপুট: ইতিবাচক ভাজক সব এর সমষ্টি nযে kপূর্ণসংখ্যার তম ক্ষমতা

উদাহরণস্বরূপ, 11! = 39916800 ছয় ভাজক যে কিউব, যথা 1, 8, 27, 64, 216, এবং 1728. অতএব দেওয়া ইনপুট রয়েছে 39916800এবং 3, প্রোগ্রাম তাদের যোগফল আসতে উচিত, 2044

অন্যান্য পরীক্ষার মামলা:

{40320, 1} -> 159120
{40320, 2} -> 850
{40320, 3} -> 73
{40320, 4} -> 17
{40320, 5} -> 33
{40320, 6} -> 65
{40320, 7} -> 129
{40320, 8} -> 1
{46656, 1} -> 138811
{46656, 2} -> 69700
{46656, 3} -> 55261
{46656, 4} -> 1394
{46656, 5} -> 8052
{46656, 6} -> 47450
{46656, 7} -> 1
{1, [any positive integer]} -> 1

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


12
আমি যখন আপনার চ্যালেঞ্জটি প্রথম দেখলাম, তখন আমার কাছে বিচিত্র অনুভূতি হয়েছিল যে এটি একটি ধাতবিকার গানের শিরোনাম।
আরনৌল্ড

1
কি? এর জন্য কোনও গাণিতিক অন্তর্নির্মিত নেই?
boboquack

উত্তর:


13

05 এ বি 1 ই , 9 বাইট

DLImDŠÖÏO

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

ব্যাখ্যা

উদাহরণ ইনপুট 46656, 3

D          # duplicate first input
           # STACK: 46656, 46656
 L         # range [1 ... first input]
           # STACK: 46656, [1 ... 46656]
  Im       # each to the power of second input
           # STACK: 46656, [1, 8, 27 ...]
    D      # duplicate
           # STACK: 46656, [1, 8, 27 ...], [1, 8, 27 ...]
     Š     # move down 2 spots on the stack
           # STACK: [1, 8, 27 ...], 46656, [1, 8, 27 ...]
      Ö    # a mod b == 0
           # STACK: [1, 8, 27 ...], [1,1,1,1,0 ...]
       Ï   # keep only items from first list which are true in second
           # STACK: [1, 8, 27, 64, 216, 729, 1728, 5832, 46656]
        O  # sum
           # OUTPUT: 55261


5

হাস্কেল , 37 35 34 বাইট

n!k=sum[x^k|x<-[1..n],n`mod`x^k<1]

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

Prelude> 40320 ! 1
159120

কোডটি বেশ অকার্যকর কারণ এটি সর্বদা গণনা করে 1^k, 2^k, ..., n^k

সম্পাদনা করুন: জগারবকে ধন্যবাদ একটি বাইট সংরক্ষণ করা।

ব্যাখ্যা:

n!k=             -- given n and k, the function ! returns
 sum[x^k|        -- the sum of the list of all x^k
   x<-[1..n],    -- where x is drawn from the range 1 to n
   n`mod`x^k<1]  -- and n modulus x^k is less than 1, that is x^k divides n

1
mod n(x^k)হতে পারে n`mod`x^k
জাগারব

5

পাইথন 2, 54 52 বাইট

lambda x,n:sum(i**n*(x%i**n<1)for i in range(1,-~x))

2 রাইট কেটে দেওয়ার জন্য @ রডকে ধন্যবাদ


আপনি এর x%i**n==0সাথে প্রতিস্থাপন করতে পারেন x%i**n<1এবং অন্য দিকে যেতে পারেনi**n*(x%i**n<1)
রড

4

রুবি, 45 বাইট

->n,m{(1..n).reduce{|a,b|n%(c=b**m)<1?a+c:a}}

রুবি ২.৪-তে "যোগফল" ব্যবহার করে খাটো হবে। আপগ্রেড করার সময়?


4
আপগ্রেড করার সময়।
ইয়াতসি

4

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

t:i^\~5M*s

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

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

সঙ্গে উদাহরণ 46656, 6

t      % Implicitly input n. Duplicate
       % STACK: 46656, 46656
:      % Range
       % STACK: 46656, [1 2 ... 46656]
i      % Input k
       % STACK: 46656, [1 2 ... 46656], 6
^      % Power, element-wise
       % STACK: 46656, [1 64 ... 46656^6]
\      % Modulo
       % STACK: [0 0 0 1600 ...]
~      % Logically negate
       % STACK: [true true true false ...]
5M     % Push second input to function \ again
       % STACK: [true true true false ...], [1^6 2^6 ... 46656^6]
*      % Multiply, element-wise
       % STACK: [1 64 729 0 ...]
s      % Sum of array: 47450
       % Implicitly display

4

জেলি , 7 6 বাইট

-1 ডেনিস করার বাইট ধন্যবাদ (একটি অন্তর্নিহিত পরিসীমা, তর্ক)
একটি চালাক দক্ষতা সংরক্ষণ এছাড়াও এ ডেনিস দ্বারা 0 বাইট খরচ
(পূর্বে ÆDf*€Sযারা ভাজক যে একটি ক্ষমতা হয় রাখা ফিল্টার হবে কোনো প্রাকৃতিক সংখ্যা পর্যন্ত এন । কিন্তু মনে রাখবেন যে এন করতে পারেন শুধুমাত্র কি কখনো একটি ভাজক আছে আমি k যদি এটি একটি ভাজক আছে আমি যাহাই হউক না কেন!)

ÆDf*¥S

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

কিভাবে?

ÆDf*¥S - Main link: n, k
ÆD     - divisors of n  -> divisors = [1, d1, d2, ..., n]
    ¥  - last two links as a dyadic chain
  f    -     filter divisors keeping those that appear in:
   *   -     exponentiate k with base divisors (vectorises)
       - i.e. [v for v in [1, d1, d2, ..., n] if v in [1^k, d1^k, ..., n^k]]
     S - sum

3

জাভাস্ক্রিপ্ট (ES7), 56 53 বাইট

সিনট্যাক্স গ্রহণ nএবং kকারিঙে (n)(k)

n=>k=>[...Array(n)].reduce(p=>n%(a=++i**k)?p:p+a,i=0)

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


3

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

->\n,\k{sum grep n%%*,({++$**k}...*>n)}

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

->\n,\k{                              }  # A lambda taking two arguments.
                        ++$              # Increment an anonymous counter
                           **k           # and raise it to the power k,
                       {      }...       # generate a list by repeatedly doing that,
                                  *>n    # until we reach a value greater than n.
            grep n%%*,(              )   # Filter factors of n from the list.
        sum                              # Return their sum.

চেষ্টা করে দেখুন


2

জাপট , 10 বাইট

@ETH প্রোডাকশনগুলির জন্য প্রচুর বাইট সংরক্ষণ করা

òpV f!vU x

ব্যাখ্যা

òpV f!vU x
ò           // Creates a range from 0 to U
 pV         // Raises each item to the power of V (Second input)
    f       // Selects all items Z where
     !vU    //   U is divisible by Z
            //   (fvU would mean Z is divisible by U; ! swaps the arguments)
         x  // Returns the sum of all remaining items

এটি অনলাইন পরীক্ষা!


না vUদ্বারা বিভাজ্য সংখ্যা শনাক্ত U, বা সংখ্যা যে ডিভাইড U?
গ্রেগ মার্টিন

@ গ্রেগমার্টিন fvUআইটেমগুলিতে ফিল্টার করে যা বিভাজ্য U; বিভাজ্য f!vUআইটেমগুলিতে ফিল্টার Uকরে। !যুক্তিগুলি অদলবদল করে।
অলিভার

দুর্দান্ত, সুতরাং কোডটি ঠিক দেখাচ্ছে, তবে ব্যাখ্যাটি টুইট করার প্রয়োজন হতে পারে।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন এখনই আরও পরিষ্কার হওয়া উচিত।
ETH প্রোডাকশনগুলি



2

জাভাস্ক্রিপ্ট (ES7), 49 46 বাইট

n=>g=(k,t=i=0,p=++i**k)=>p>n?t:g(k,t+p*!(n%p))

যেহেতু আপনি পুনরাবৃত্তি করছেন না, কেন নয় n=>k=>? +1 টি।
Yytsi

@ টুকুএক্সএক্স আমি আরও ভাল কিছু নিয়ে এসেছি। (আমি আসলে এটির আগে iস্থানীয় হিসাবে ছিলাম , যার দাম 4 অতিরিক্ত বাইট, এবং আমি ভুলে গিয়েছিলাম যে আমি iআমার অন্যান্য গঠনের সাথেও একইভাবে অপব্যবহার করতে পারি।)
নীল

1

পিএইচপি, 86 বাইট

$n=$argv[1];$k=$argv[2];for($i=1;$i<=$n**(1/$k);$i++)if($n%$i**$k<1)$s+=$i**$k;echo$s;

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

ভাঙ্গন:

$n=$argv[1];$k=$argv[2];       # Assign variables from input
for($i=1;$i<=$n**(1/$k);$i++)  # While i is between 1 AND kth root of n
    if($n%$i**$k<1)            #     if i^k is a divisor of n
        $s+=$i**$k;            #         then add to s
echo$s;                        # echo s (duh!)

গল্ফড, তবে পরীক্ষা করা হয়নি: for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;59 বাইট; পিএইচপি 5.6 বা তার পরে প্রয়োজন।
তিতাস



1

বাশ + ইউনিক্স ইউটিলিটিস, 44 বাইট

bc<<<`seq "-fx=%.f^$2;s+=($1%%x==0)*x;" $1`s

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

টেস্ট রান:

for x in '40320 1' '40320 2' '40320 3' '40320 4' '40320 5' '40320 6' '40320 7' '40320 8' '46656 1' '46656 2' '46656 3' '46656 4' '46656 5' '46656 6' '46656 7' '1 1' '1 2' '1 3' '1 12' ; do echo -n "$x "; ./sumpowerdivisors $x; done

40320 1 159120
40320 2 850
40320 3 73
40320 4 17
40320 5 33
40320 6 65
40320 7 129
40320 8 1
46656 1 138811
46656 2 69700
46656 3 55261
46656 4 1394
46656 5 8052
46656 6 47450
46656 7 1
1 1 1
1 2 1
1 3 1
1 12 1

1

পাইথন , 56 বাইট

lambda n,k:sum(j*(j**k**-1%1==n%j)for j in range(1,n+1))

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

মোটামুটি সহজবোধ্য. একমাত্র লক্ষণীয় বিষয় হ'ল j**k**-1%1সর্বদা [0,1) এ একটি ফ্লোট ফেরত দেয় যখন n%jসর্বদা একটি অ-নেতিবাচক পূর্ণসংখ্যা ফেরত দেয়, তাই উভয়ই 0 হলেই তারা সমান হতে পারে ।


1

ব্যাচ, 138 বাইট

@set s=n
@for /l %%i in (2,1,%2)do @call set s=%%s%%*n
@set/at=n=0
:l
@set/an+=1,p=%s%,t+=p*!(%1%%p)
@if %p% lss %1 goto l
@echo %t%

যেহেতু ব্যাচের পাওয়ার অপারেটর নেই, তাই আমি set/aফর্ম হিসাবে গালি দিচ্ছি eval। খুব ধীর যখন k=1। গাণিতিক সীমা সমর্থিত মান পূর্ণসংখ্যা 32 বিট nএবং k:

           n   k
  (too slow)   1
 <1366041600   2
 <1833767424   3
 <2019963136   4
 <2073071593   5
 <1838265625   6
 <1801088541   7
 <1475789056   8
 <1000000000   9
 <1073741824  10
 <1977326743  11
  <244140625  12
 <1220703125  13
  <268435456  14
 <1073741824  15
   <43046721  16
  <129140163  17
  <387420489  18
 <1162261467  19
    <1048576  20
           ...
 <1073741824  30

0

আর, 28 বাইট সরাসরি, ফাংশন জন্য 43 বাইট

যদি এন, কে স্মৃতিতে থাকে:

sum((n%%(1:n)^k==0)*(1:n)^k)

একটি ফাংশন জন্য:

r=function(n,k)sum((n%%(1:n)^k==0)*(1:n)^k)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.