মূল-শক্তি গুণক থেকে বিভাজকের যোগফল


11

কাজটি হ'ল তার প্রধান গুণনীয়কারকে কেন্দ্র করে কোনও সংখ্যার বিভাজকের যোগফল গণনা করা।

ইনপুট

দৈর্ঘ্য n এর দুটি অ্যারে (বা কিছু সমতুল্য) , একটিতে প্রধান উপাদান এবং অন্যটি সম্পর্কিত ব্যয় যুক্ত।

আউটপুট

সমস্ত বিভাজকের যোগফল (সংখ্যাটি নিজেই সহ)।

উদাহরণ

240 সংখ্যার 4, 1, এবং 1 সম্পর্কিত স্বীকৃতি হিসাবে প্রধান উপাদান হিসাবে 2, 3 এবং 5 রয়েছে। প্রত্যাশিত আউটপুটটি তখন 744 হবে।

Input: [2,3,5] [4,1,1]
Output: 744

স্কোরিং

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

যদি আপনার সমাধানের রান টাইম জটিলতা ও (এক্সপোজারগুলির পণ্য) এর চেয়ে ও (এক্সপোশনগুলির যোগফল) হয় তবে আপনার স্কোর 0.8 দ্বারা গুণিত হতে পারে।


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

বিজয়ী এই সপ্তাহান্তে চয়ন করা হবে


প্রাইম ফ্যাক্টর অ্যারেটি কি সর্বদা প্রথম হতে হবে এবং এক্সপোনেন্ট অ্যারে দ্বিতীয় হতে পারে বা আমরা ধরে নিতে পারি যে অ্যারেগুলি অন্য উপায়ে চারপাশে প্রবেশ করানো হয়েছে?
Sp3000

প্রস্তাবিতটির সাথে
সামঞ্জস্যপূর্ণ

এখনই এটি খুঁজে পাচ্ছি না, তবে আমি মনে করি এটি বা এর মতোই কিছু
প্রোজেকটিউলারনেটে রয়েছে

উত্তর:


3

পাইথ, 13 বাইট * 0.8 = 10.4

*Fms^LhdhedCQ

প্রদর্শন.

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

উদাহরণ হিসেবে বলা যায়, [প্রধানমন্ত্রী, সূচক] যুগল উপর [2, 4], আমরা ম্যাপ 2 ^ xউপর 0, 1, 2, 3, 4, দান [1, 2, 4, 8, 16], যা 31 সংকলিত করা হয়।

ফলাফলগুলি তখন এক সাথে গুণিত এবং মুদ্রিত হয়।

যদি ক্ষয়ক্ষতি সঠিকভাবে প্রয়োগ করা হয়, বা যদি মধ্যবর্তী ফলাফলের ক্যাচিং থাকে তবে এটি হবে O(sum of exponents)


বাস্তবায়ন স্বাধীনভাবে, আমি এটা প্রথম নিরূপণ করা সম্ভব মনে করি না এন শক্তি একটি হে (ঢ) সময়, যদি না আপনি অনুমান গুণ হে (1) হয়।
ডেনিস 21

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

9

সিজোম, 15 বাইট * 0.8 = 12

q~.{_@)#(\(/}:*

এটি অনলাইনে চেষ্টা করুন । ইনপুট অর্ডারটি হ'ল প্রথমে এক্সপেনেন্টের তালিকা, তারপরে প্রাইমগুলির তালিকা (@ ডেনিসকে ধন্যবাদ -3 বাইট)

প্রতিটি প্রাইম-এক্সপোনেন্ট পেয়ারের (p, e)সন্ধান করুন

(p^(e+1) - 1)/(p - 1)

তারপরে এগুলির সমস্তটির সন্ধান করুন। যেমন 240 এর জন্য এটি হবে

(1 + 2 + 4 + 8 + 16)(1 + 3)(1 + 5) = 31 * 4 * 6 = 744

ক্ষয়ক্ষতি কীভাবে কার্যকর করা হয় তার উপর নির্ভর করে এটি এর চেয়ে ভাল হতে পারে O(sum of exponents)


6

এপিএল, 18 13 বাইট * 0.8 = 10.4

×/(1-⊣×*)÷1-⊣

এটি একটি ডায়াডিক ফাংশন ট্রেন তৈরি করে যা বাম দিকের অ্যারের এবং ডান দিকের এক্সপোশনগুলি গ্রহণ করে।

×/             ⍝ Vector product of
  (1-⊣×*)      ⍝ each factor^(exponent+1)-1
         ÷1-⊣  ⍝ divided by factor-1

এটি অনলাইনে চেষ্টা করুন । নোট করুন যে এটি Sp3000 এর দুর্দান্ত চালাক সিজেএম উত্তরের মতো একই পদ্ধতি ।

ডেনিসের জন্য 5 টি বাইট সংরক্ষণ করা!


2

টিআই-বেসিক, 17 বাইট * 0.8 = 13.6

এছাড়াও স্প 3000 এর পদ্ধতিটি ব্যবহার করে, যদিও আমি এটি স্বাধীনভাবে খুঁজে পেয়েছি। ইনপুট থেকে একটি এবং হোমস্ক্রিন থেকে একটি তালিকা নেয়।

Input E
prod(AnsAns^∟E-1)/prod(Ans-1

প্রোড ব্যবহার করা (দু'বারই ছোট কারণ এটি আমাদের নিখরচায় খোলা বন্ধনী ব্যবহার করতে দেয় Note মনে রাখবেন যে এই উত্তরটি খালি অ্যারেগুলিকে সমর্থন করে না, কারণ টিআই-বেসিকের কোনও খালি অ্যারে নেই।


2

হাস্কেল, 38 * 0.8 = 30.4

product$zipWith(\p e->(p*p^e-1)/(p-1))

ব্যবহার:

product$zipWith(\p e->(p*p^e-1)/(p-1)) [2,3,5] [4,1,1]
744.0

বেনামী ফাংশন লাগে (p,e)জন্য ভাজক-সমষ্টি p^eজ্যামিতিক সিরিজের সমষ্টি মাধ্যমে। যোগদান এবং পণ্য গ্রহণ হিসাবে এই দুটি তালিকা একসাথে জিপ করা ফলাফল দেয়।

পাটিগণিতের বহিঃপ্রকাশের মতো ছোট কিছু আমি খুঁজে পাচ্ছিলাম না

(p*p^e-1)/(p-1)
sum$map(p^)[0..e]

এ থেকে মুক্তি পাওয়ার কোনও উপায় আছে (\p e->_)

ইনফিক্স ফাংশন সংজ্ঞা একই দৈর্ঘ্য দেয় (38):

p%e=(p*p^e-1)/(p-1)
product$zipWith(%)

2

সি ++, 111 80 77 বাইট * 0.8 = 61.6

int g(int*p,int*e,int n){return n?g(p+1,e+1,n-1)*(pow(*p,*e-1)-1)/(*p-1):1;}

এই গণনাগুলি (পি ^ (ই + 1) -1) / (পি -1) এবং পুনরাবৃত্তভাবে সমস্ত কারণকে গুণ করে। এক বছর আগে নিজেকে খুঁজে পেয়েছি।

সহায়তার জন্য আপনাকে ধন্যবাদ, সি ++ স্টাইলের বুলিয়ান ব্যবহার সম্পর্কে সম্পূর্ণ ভুলে গেছেন।


1
n==0এটিকে সহজতর করে !n- বা আপনি ফলাফলগুলি বিপরীত করতে পারেন এবং কেবল ব্যবহার করতে পারেনn
টবি স্পাইট

2

মতলব, 53

function t=f(x,y)
s=1:prod(x.^y);t=s*~mod(s(end),s)';

উদাহরণ:

>> f([2 3 5], [4 1 1])
ans =
   744

দেখে মনে হচ্ছে আপনি 0.8 বোনাস যুক্ত করতে পারেন
মর্টেম

টুইটারে তবে আমি সে সম্পর্কে নিশ্চিত নই। আমি এই নম্বরে গনা sএবং তারপর থেকে সব সম্ভব ভাজক পরীক্ষা 1করতে s। সুতরাং এটি (কমপক্ষে) হে (গুলি), যা সম্ভবত হে (এক্সপোশনগুলির যোগফল) এবং ও (
এক্সপেনার্সের

হ্যাঁ, এটা ঠিক, এটি ও এর চেয়েও বড় (
এক্সপেনশনগুলির

1

পাইথন 2,156

from itertools import*
from operator import*
i=input()
print sum(reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]])))

ইনপুট

[[2,3,5],[4,1,1]]

আউটপুট

744

ব্যাখ্যা

এই প্রোগ্রামটি 2 টি তালিকার তালিকা পেয়েছে: গুণক এবং উদ্দীপক।

i=input() # Receive list of 2 lists: i[0] for factors i[1] for exponents

তারপরে এটি ব্যয়কারী তালিকার সমস্ত সম্ভাব্য সংমিশ্রণের তালিকা তৈরি করে।

[x+1 for x in i[1]] # [4,1,1]->[5,2,2] (to include last element)
map(range,[x+1 for x in i[1]]) # [[0, 1, 2, 3, 4], [0, 1], [0, 1]]
product(*map(range,[x+1 for x in i[1]])) # [(0, 0, 0), (0, 0, 1), ..., (4, 1, 1)]

এবং কারণগুলির সাথে এটি জিপ করুন:

zip(i[0],p) for p in product(*map(range,[x+1 for x in i[1]])) # [[(2, 0), (3, 0), (5, 0)], ..., [(2, 4), (3, 1), (5, 1)]]

উদ্দীপকগুলির শক্তির জন্য গুণনীয়ক গণনা করুন:

 [a**b for a,b in zip(i[0],p)]for p in product(*map(range,[x+1 for x in i[1]])) # [[1, 1, 1], ..., [16, 3, 5]]

এবং প্রতিটি তালিকাকে গুণিত করুন (এটি আমাদের সমস্ত বিভাজন দেয়):

reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]])) # [1, 5, 3, 15, ..., 240]

অবশেষে, সমস্ত তালিকা সংযুক্ত করুন এবং মুদ্রণ:

print sum(reduce(mul,[a**b for a,b in zip(i[0],p)])for p in product(*map(range,[x+1 for x in i[1]]))) # 744

আপনার কোড কী করে আপনি সংক্ষেপে ব্যাখ্যা করতে পারেন (যেমন আমি পাইথনের সাথে পরিচিত নই), তাই আমি আপনার কোডটির জটিলতা বিচার করতে পারি?
মোআর্টেম

একটি চতুর পদ্ধতির কথা বলা, তবে জটিলতা হ'ল এক্সটেনশনগুলির পণ্য
মর্টেম

@ মোয়ার্টেম হ্যাঁ, জটিলতা হ্রাস করতে আমি খুব বেশি সময় ব্যয় করিনি
থ্রিক্রিপ্ট

1

পাইথন 3, 134 120 117

ইনপুট: কমা দ্বারা পৃথক দুটি কমা-বিভাজিত অ্যারে ra

উদাহরণ:

(2,3,7,11),(4,2,3,2)
21439600
from functools import*
a=eval(input())
print(reduce(int.__mul__,(sum(x**j for j in range(y+1))for x,y in zip(*a)),1))

NumPy দিয়ে 100 বাইটে হ্রাস করা যেতে পারে:

import numpy
a=eval(input())
print(numpy.product([sum(x**j for j in range(y+1))for x,y in zip(*a)]))

1
প্রথম উদাহরণের জন্য, কেবলমাত্র আপনি জানেন, একবার operatorব্যবহারের জন্য আমদানির পরিবর্তে mul, আপনি float.__mul__একগুচ্ছ বাইট সংরক্ষণ করতে পারেন ।
কেড

1

জেলি, অ-প্রতিযোগিতামূলক

এই উত্তরটি প্রতিদ্বন্দ্বিতামূলক নয়, যেহেতু চ্যালেঞ্জটি জেলি তৈরির পূর্বে রয়েছে।

5 বাইট (কোনও বোনাস নেই)

*PÆDS

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

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

*PÆDS    Main link. Left input: p (prime factors). Right input: e (exponents).

*        Elevate the prime factors to the corresponding exponents.
 P       Take the product of all powers.
  ÆD     Find all divisors of the product.
    S    Compute the sum of the divisors.

7 বাইট (বোনাসের পরে 5.6 বাইট)

*‘}’:’{P

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

×*’:’{P  Main link. Left input: p (prime factors). Right input: e (exponents).

 *       Elevate the prime factors to the corresponding exponents.
         This yields p ** e.
×        Multiply the prime factors with the corresponding powers.
         This yields p ** (e + 1).
  ’      Decrement the resulting products.
         This yields p ** (e + 1) - 1.
    ’{   Decrement the prime factors.
         This yields p - 1.
   :     Divide the left result by the right one.
         This yields (p ** (e + 1) - 1) / (p - 1).
      P  Take the product of all quotients.

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


1

এপিএল, 12 বাইট * 0.8 = 9.6

×/1++/¨⎕*⍳¨⎕

এটি কীবোর্ড থেকে দুটি তালিকাগুলি পড়বে, প্রথমে এক্সপোশনগুলি, অর্থাৎ:

      ×/1++/¨⎕*⍳¨⎕
⎕:
      4 1 1
⎕:
      2 3 5
744

ব্যাখ্যা:

  • : কীবোর্ড থেকে একটি তালিকা পড়ুন (উদ্দীপক)
  • ⍳¨: তালিকার প্রতিটি সংখ্যার জন্য একটি তালিকা তৈরি করুন [1..n]
  • ⎕*: কীবোর্ড (প্রাইমস) থেকে অন্য একটি তালিকা পড়ুন, এবং সংশ্লিষ্ট তালিকাগুলির প্রত্যেকটিকে প্রত্যক্ষ করে তুলুন
  • +/¨: প্রতিটি তালিকা যোগফল
  • 1+: প্রতিটি ফলাফলের জন্য একটি যোগ করুন, x^0তালিকাগুলির প্রতিটিটিতে নিখোঁজদের ক্ষতিপূরণ দিতে
  • ×/: ফলাফলের পণ্য গ্রহণ

1

র‌্যাকেট (স্কিম), 65 * 0.8 = 52 বাইট

সবার মতো একই গাণিতিক

(λ(x y)(foldl(λ(m n o)(*(/(-(expt m(+ n 1))1)(- m 1))o))1 x y))

ব্যাখ্যা:

(λ (x y)    ;defines anonymous function with two inputs
    (foldl    ;recursively applies the following function to all elements of the lists given to an argument given (foldl function argument lists lists lists...)
        (λ (m n o) (* (/ (- (expt m (+ n 1)) 1) (- m 1)) o))    ;an anonymous function representing the same arithmetic used in the CJam answer, then multiplying it with our incrementor
        1 x y))    ;the incrementor argument is 1, and the input lists are the ones provided into the original function

0

পাইথন 2, 80 বাইট * 0.8 = 64

এটি ধরে নেয় ইনপুট একের পর এক আসে। Sp3000 এর সিজেএম উত্তরে বর্ণিত একই সূত্র অনুসরণ করে।

print(reduce(float.__mul__,[~-(x**-~y)/~-x for x,y in zip(input(),input())],1)) 

যদি এটি অনুমোদিত না হয়, তবে আমি এটি সমাধান হিসাবে ব্যবহার করব যা 84 বাইট * 0.8 = 67.2 এর স্কোর পায়। ইনপুটটি কমা দ্বারা পৃথক করা উচিত, অর্থাত্‍ [2,3,5],[4,1,1]

k=input()
print(reduce(float.__mul__,[~-(x**-~y)/~-x for x,y in zip(k[0],k[1])],1))

চুপ। হে! এটি প্রতীকী একটি সম্ভাব্য সমাধান যা আমি নিয়ে কাজ করছি:Ƥ(П([~-(x**-~y)/~-xϝx,yϊʐ(Ί,Ί)],1))


0

গণিত, 40 বাইট

Total[Outer@@{*}~Join~(#^0~Range~#2),3]&

থ্রেডের অন্যান্য গণিতের সমাধান থেকে পৃথক করতে কোনও বিভক্তদের সাথে কাজ করে এমন কোনও ইনবিল্ট ব্যবহার না করেই।

ইনপুট হ'ল (উদাহরণ ব্যবহার করে) [{2, 3, 5}, {4, 1, 1}]


0

পার্ল 5, 96 বাইট

স্পষ্টতই এটি অদম্য, তবে আমি মজাদার জন্য এটি লেখার সিদ্ধান্ত নিয়েছি।

এটি একটি সাবরুটিন:

{($b,$e)=@_;$s=1;map$s*=$b->[$_]**$e->[$_],0..@$b-1;$_=1x$s;for$j(1..$s){$i+=$j*/^(.{$j})*$/}$i}

এটি কার্যকরভাবে দেখুন:

perl -e'print sub{...}->([2,3,5],[4,1,1])'

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

  • ($b,$e)=@_ইনপুট অ্যারেরেফস $b(ঘাঁটি) এবং $e(এক্সপোনেন্ট) পড়েন ।
  • $s=1 পণ্য আরম্ভ।
  • map$s*=$b->[$_]**$e->[$_],0..@$b-1$sএকের পর এক বেস-এক্সপোনেন্ট শক্তি দ্বারা গুণিত হয়। এখন $sসম্মিলিত নম্বর।
  • $_=1x$sসেট $_বেশী একটি স্ট্রিং সমান, $sদীর্ঘ। $i0 এ আরম্ভ করা হয়।
  • for$j(1..$s){$i+=$j*/^(.{$j})*$/}$j1 এবং 2 এর মধ্যে প্রতিটি সংখ্যার জন্য অক্ষর হিসাবে কোনও বার বার পুনরাবৃত্তি $sহওয়ার চেষ্টা $_করে $j। যদি এটি পারে, তবে $jভাগ করে $s, এবং /^(.{$j})*$/1 হয় (অন্যথায় এটি 0), এবং এর $iদ্বারা বাড়ানো হয় $j। সুতরাং, আমরা এর $iসমান আকারের পার্টিশনে পার্টিশনের সংখ্যা যুক্ত করি $_। হিসাবে ওমর ই পল তুলে ধরে , $iসংখ্যা আমরা জানতে চাচ্ছি হয়।
  • $iশেষে ফিরে আসে $i

0

জে, 14 বাইট * 0.8 = 11.2

[:*/(^>:)%&<:[

ব্যবহার

   f =: [:*/(^>:)%&<:[
   2 3 5 f 4 1 1
744
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.