হারমোনিক সিরিজের সঠিক আংশিক যোগফল


15

চ্যালেঞ্জ

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয় N, প্রথম Nপরিসংখ্যানের যোগটিকে সঠিক ভগ্নাংশ হিসাবে আউটপুট দেয় , যা সংখ্যার এবং ডিনোমিনেটরের প্রতিনিধিত্ব করে একটি ধারাবাহিক ক্রমে পূর্ণসংখ্যার জোড় হিসাবে উপস্থাপিত হয়।

বিধি

  • আউটপুট অবশ্যই সঠিক হতে হবে।

  • আউটপুটটি সংখ্যার এবং ডিনোমিনেটরের প্রতিনিধিত্বকারী ধারাবাহিক ক্রমে সংখ্যার জোড় হিসাবে হওয়া উচিত।

  • সংখ্যাসূচক সংখ্যা সংক্রান্ত প্রকারগুলি (অন্তর্নির্মিত বা লাইব্রেরি) ব্যবহার নিষিদ্ধ।

    • স্পেসিফিকেশন / ব্যতিক্রম: অ-পূর্ণসংখ্যার সংখ্যাসূচক প্রকারগুলি ঠিক আছে এবং কেবল যদি সমস্ত মান ব্যবহৃত হয়, গণনা করা হয় এবং ফিরে আসে তবে পূর্ণসংখ্যা হয় (যেমন আপনার ভাষাটি ডিফল্টরূপে যুক্তিযুক্ত সংখ্যা ব্যবহার করে, তবে আপনি কেবল আপনার উত্তরে পূর্ণসংখ্যার গাণিতিক ব্যবহার করেন)
  • আউটপুট যতটা সম্ভব কমাতে হবে। ( 3/2ঠিক আছে, 6/4নেই)

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।

  • সাবমিশনগুলিতে ইনপুটগুলির জন্য কমপক্ষে 20 পর্যন্ত কাজ করা উচিত, বা এই মেটা , যেটি উচ্চতর।

পরীক্ষার কেস

1: 1/1
2: 3/2 (1/1 + 1/2)
3: 11/6 (1/1 + 1/2 + 1/3)
4: 25/12 etc.
5: 137/60
6: 49/20
20: 55835135/15519504
56: 252476961434436524654789/54749786241679275146400
226: 31741146384418617995319820836410246588253008380307063166243468230254437801429301078323028997161/5290225078451893176693594241665890914638817631063334447389979640757204083936351078274058192000

টেস্ট-কেস জেনারেশন (পাইথন 3)

import fractions
def f(x):
    return sum(fractions.Fraction(1,i) for i in range(1,x+1))

এই চ্যালেঞ্জ এবং এই চ্যালেঞ্জের অনুরূপ ।

Numerators হয় OEIS A001008 এবং denominators, হয় OEIS A002805




হয় gcdএকটি "বিল্ট-ইন ফাংশন" যদি আপনার ভাষায় এটি উপলব্ধ করা?
চ্যাস ব্রাউন

@ চ্যাসব্রাউন gcdএবং অন্যান্য অন্তর্নির্মিত ফাংশনগুলি ভাল। যুক্তিযুক্ত / ভগ্নাংশের প্রকারভেদ অনুমোদিত নয়।
pizzapants184

1
@ জোকিং ঠিক আছে যদি সংখ্যাগুলি যুক্তিযুক্ত ধরণের হয় তবে যতক্ষণ না কেবল পূর্ণসংখ্যা ব্যবহৃত হয়। আমি প্রশ্ন আপডেট করব।
pizzapants 184

উত্তর:


8

পাইথন 2 , 80 79 বাইট

D=1;N=n=0;exec"n+=1;y=N=N*n+D;x=D=D*n;"*input()
while y:x,y=y,x%y
print N/x,D/x

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

অঙ্ক এবং ডিনোমিনেটর মুদ্রণ করে।

হ্যাঁ! ম্যাথজ্যাক্স সমর্থন !!!! একজন পর্যবেক্ষণ করেছেন:

i=1n1i=i=1nn!n!i=i=1nn!in!

তারপরে, পুনরাবৃত্তি সম্পর্কে ভাবনা, পজিটিভের জন্য thenN umerator:

i=1n+1(n+1)!i=(n+1)i=1nn!i+(n+1)!n+1=(n+1)i=1nn!i+n!

এবং Dএনোমিনেটর সম্পর্কে কেউ ভাবতে সহায়তা করতে পারে না ! পুনরাবৃত্তির পাশাপাশি; এইভাবে ।n!exec

লুপটিতে একটি জিসিডি গণনা সহ আমাদের হ্রাস করা ভগ্নাংশ পাইপারকে প্রদান করতে হবে while; এবং তারপর আমরা সম্পন্ন করেছি।



5

জে , 16 বাইট

!(,%+.)1#.!%1+i.

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

উদাহরণ চালান

f =: !(,%+.)1#.!%1+i.
f 6x
   20 49
f 20x
   15519504 55835135
f 56x
   54749786241679275146400 252476961434436524654789

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

!(,%+.)1#.!%1+i.    NB. Tacit verb
            1+i.    NB. 1 to n inclusive
          !%        NB. Divide factorial by 1 to n
       1#.          NB. Sum i.e. numerator (not reduced)
!                   NB. Factorial i.e. denominator (not reduced)
 (,%+.)             NB. Divide both by GCD

জে , 9 বাইট, ভগ্নাংশ প্রকার ব্যবহার করে

1#.1%1+i.

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

জে বিভাজ্য না হলে আন্তঃ-বিভাগ বিভাগের জন্য ভগ্নাংশ দেয়।




চান 2 x:1#.1%1+i.একটি বৈধ উত্তর হিসাবে গণনা, বা এই একটি মূলদ ধরনের একটি অবৈধ ব্যবহার হয়?
কোলে

5

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

!DIL÷O)D¿÷

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

অন্যান্য সমস্ত এন্ট্রিগুলির মতো একই পদ্ধতি ব্যবহার করে। আউটপুট ফর্ম হয় [denominator, numerator]

!DIL÷O)D¿÷   Full program. Let's call the input I.
!D           Push the factorial twice to the stack. STACK: [I!, I!]
  IL         Range from 1 to I. STACK: [I!, I!, [1 ... I]]
    ÷        Vectorized integer division. STACK: [I!, [I! / 1, I! / 2, ..., I! / I]]
     O       Sum. STACK: [I!, I! / 1 + I! / 2 + ... + I! / I]
      )      Wrap stack. STACK: [[I!, I! / 1 + I! / 2 + ... + I! / I]]
       D     Duplicate. STACK: [[I!, I! / 1 + ... + I! / I], [I!, I! / 1 +... + I! / I]]
        ¿    GCD. STACK: [[I!, I! / 1 + ... + I! / I], gcd(I!, I! / 1 +... + I! / I)]
         ÷   Vectorized integer division. 

4

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

#/GCD@@#&@{Tr[#!/Range@#],#!}&

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


অন্তর্নির্মিত ভগ্নাংশ প্রকারভেদে যদি 14 বাইটস থাকে

HarmonicNumber

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


InputForm@HarmonicNumber(24 বাইট) ওপি দ্বারা প্রদত্ত বিন্যাসে আউটপুট দেয়।
এরিক টাওয়ার

3

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

রিটার্নস [numerator, denominator]

f=(n,a=0,b=1)=>n?f(n-1,p=a*n+b,q=b*n):b?f(0,b,a%b):[p/a,q/a]

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

কিভাবে?

পদ্ধতিটি @ চ্যাসব্রাউনের পাইথন উত্তরের মতো

একটিএকটি=0=1

একটিএকটিএন+ +এনএনএন-1

এন=0

(একটি,)(পি,কুই)একটিGCD(একটি,)

একটিএকটিগেলিক ভাষার

=0

পি/একটিকুই/একটি


3

পার্ল 6 , 57 53 বাইট

{+($!=[*] 1..$_)/($!=($/=sum $! X/1..$_)gcd$!),$//$!}

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

একটি বেনামি কোড ব্লক যা একটি পূর্ণসংখ্যা নেয় এবং এর দ্বিগুণ দেয় denominator, numerator

যদি আমাদের ভগ্নাংশের প্রকারের ব্যবহারের অনুমতি দেওয়া হয় তবে এটি 32২ বাইটারের থেকে অনেক সহজ হবে:

{sum(map 1/*.FatRat,1..$_).nude}

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



2

সি ++ 17 (জিসিসি) , 108 বাইট

শুধুমাত্র পূর্ণসংখ্যার গাণিতিক ব্যবহার করুন:

#import<random>
int f(int x,long&n,long&d){n=0;d=1;int
a;while(n=n*x+d,d*=x,a=std::gcd(n,d),n/=a,d/=a,--x);}

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


সি ++ 17 (জিসিসি) , 108 বাইট

#import<random>
int f(long&n){double a=0;long
d=1;while(d*=n,a+=1./n,--n);n=a*d+.5;n/=a=std::gcd(n,d);d/=a;}

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

নীচের মতো একই, তবে সি ++ 17 ব্যবহার করুন std::gcd


সি ++ (জিসিসি) , 109 বাইট

#import<regex>
int f(long&n){double a=0;long
d=1;while(d*=n,a+=1./n,--n);n=a*d+.5;n/=a=std::__gcd(n,d);d/=a;}

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

সি ++ এর নেটিভ বিগিন্ট সমর্থন না থাকায় এটি অবশ্যই প্রবাহিত হবে n>20

প্রয়োজন:

  • জিসিসির অবচয় importবিবৃতি।
  • জিসিসি এর std::__gcd
  • -O0(আমার মনে হয়) অন্যথায় সংকলকটি অপ্টিমাইজ হবে d/=a
  • কমপক্ষে -৪-বিট long

ব্যাখ্যা:

  • দিন =এন!,একটি=এইচএন
  • গোলাকার a*dকাস্ট করে নিকটতম পূর্ণসংখ্যা থেকে a*d+.5থেকে long, এবং বরাদ্দ n। এখন n/dআউটপুট।
  • এর সাথে ভগ্নাংশটি সরল করুন std::__gcd

আপনি (1 চর কম) এর auto a=0.পরিবর্তে ব্যবহার করতে পারবেন না double a=0?
ড্যান এম

হ্যা সে পারে. এবং লুপ থেকে আরও একটি বাইট: 106 বাইট
মোভাটিকা


2

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

:tptb/sht&Zd/

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

@ ডেনিসের জেলি উত্তর হিসাবে একই পদ্ধতি ।

:t    % Range from 1 to n, duplicate. 
pt    % Take the product of that (= factorial), duplicate that too.     
b/    % Bring the range to top of stack, divide factorial by each element    
sh    % Sum those. Concatenate factorial and this into a single array.     
t&Zd/ % Compute GCD of those and divide the concatenated array elements by the GCD.     

(অন্তর্নির্মিত আউটপুট, প্রথমে ডিনমিনেটর এবং তার পরে অঙ্কটি প্রিন্ট করে))

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

এটির আগে এটির পূর্বে একটি পূর্ণসংখ্যার টাইপ-সংরক্ষণের সংস্করণ (25 বাইট) চেষ্টা করেছি:

25 বাইট, 43 পর্যন্ত ইনপুট

O1i:3Y%"t@*b@*b+wht&Zd/Z}

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

সংখ্যাগুলি uint64চালনা করার আগে তাদেরকে কাস্ট করে, গাণিতিকগুলি একটি লুপে (ব্যবহার না করে prodবা ব্যবহার না করে sum) স্পষ্ট করে দেয় । আরও গুরুত্বপূর্ণভাবে, প্রতিটি পুনরাবৃত্তির শেষে, প্রতিটি জিপিডির মাধ্যমে আংশিক সংখ্যা এবং ডিনোমিনেটরগুলিকে ভাগ করে দেয়। এটি n43 টি পর্যন্ত অনুমতি দেওয়ার জন্য ইনপুট পরিসর বাড়িয়েছে the কোডের কিছু অংশ @ চাস ব্রাউন এর পাইথন উত্তরের উপর ভিত্তি করে।

ফ্যাকটোরিয়ালটির পরিবর্তে এলসিএম ব্যবহার করে বিকল্প (মূল) পদ্ধতি:

16 15 বাইট

:t&Zmtb/sht&Zd/

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


1

এক্সেল ভিবিএ, 141 বাইট

[A1]কনসোল থেকে ইনপুট নেয় এবং আউটপুট নেয় ।

s="=If(Row()>A$1,":[B:B]=s+"1,Row())":l=[LCM(B:B)]:[C:C]=s &"0,"&l &"/B1)":g=[GCD(LCM(B:B),SUM(C:C))]:?Format([Sum(C:C)]/g,0)"/"Format(l/g,0)

অবহেলিত এবং মন্তব্য করা হয়েছে

Sub HarmonicSum(n)
    [A1] = n                            ''  Pipe input
    s = "=IF(ROW()>A$1,"                ''  Hold the start of formulas
    [B1:B40] = s + "1,ROW())"           ''  Get series of numbers 1 to N, trailing 1s
    l = [LCM(B1:B40)]                   ''  Get LCM
    [C1:C40] = s & "0," & l & "/B1)"    ''  Get LCM/M for M in 1 to N
    g = [GCD(LCM(B1:B40),SUM(C1:C40))]  ''  Get GCD
                                        ''  Format and print output
    Debug.Print Format([Sum(C1:C40)] / g, 0); "\"; Format(l / g, 0)
End Sub

1

ডিসি , 87 বাইট

?sn1dsNsD[lndlDdlNln*+sN*sD1-dsn1<M]sMln1<MlDsAlNsB[lAlB%sTlBsAlTsBlB0<G]dsGxlDlA/lNlA/

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

এই আউটপুট ডিফল্ট দ্বারা অনুমোদিত হিসাবে এটি এই ক্রমে স্ট্যাকের শীর্ষে অংকের এবং ডিনোমিনিটরটি রেখে দেয় । যেহেতু dcনেই একটি gcdবিল্ট-ইন, এই সদ্ব্যবহার ইউক্লিডিয় অ্যালগরিদম নিরূপণ করা gcd


1

স্ট্যাক্স , 11 বাইট

ó╢Δ'åç4}ú┌7

এটি চালান এবং এটি ডিবাগ করুন

ব্যাখ্যা:

আমরা গণনা করতে চাই:

Σআমি=1এন1আমি

আমাদের এখন ডিনোমিনেটর দরকার এবং সংখ্যার তালিকা একটিআমি:

Σআমি=1এনএকটিআমি=Σআমি=1এনএকটিআমি

আমরা বানাতে পারি =এন!, তারপর আমাদের আছে:

একটিআমিএন!=1আমি|×এন!একটিআমি=এন!আমি

তাহলে আমাদের আছে:

Σআমি=1এন1এন=Σআমি=1এনএন!আমিএন!
|Fx{[/m|+L:_m Full program
|F            Factorial
  x           Push input again
   {  m       Map over range [1, n]
    [           Copy the factorial
     /          Divide factorial by current value
       |+     Sum
         L    Listify stack, top gets first element
          :_  Divide both values by gcd
            m Print each followed by newline

1

এপিএল (এনএআরএস), 56 টি অক্ষর, 112 বাইট

{⍵=1:⊂1 1⋄{(r s)←⍺⋄(i j)←⍵⋄m÷∨/m←((r×j)+s×i),s×j}/1,¨⍳⍵}

পরীক্ষা:

  f←{⍵=1:⊂1 1⋄{(r s)←⍺⋄(i j)←⍵⋄m÷∨/m←((r×j)+s×i),s×j}/1,¨⍳⍵}
  f 1
1 1 
  f 2
3 2 
  f 3
11 6 
  f 20
55835135 15519504 

কয়েকটি শব্দে "2 ভগ্নাংশের সংখ্যার উপর যোগফল" হ্রাস করুন (একটি ভগ্নাংশের সংখ্যাটি 2 পূর্ণসংখ্যার তালিকা হবে):

1 2, 1 3,..., 1 n

এটি নীচে ভুল বলে মনে হচ্ছে:

 f 56
74359641471727289 16124934538402170

তবে যদি আমি এর চেয়ে ইনপুট ধরণের পরিবর্তন করি:

  f 56x
252476961434436524654789 54749786241679275146400 
  f 226x
31741146384418617995319820836410246588253008380307063166243468230254437801429301078323028997161 529022507845189
  3176693594241665890914638817631063334447389979640757204083936351078274058192000

1

এপিএল (ডায়ালগ ইউনিকোড) , 15 12 বাইট

⌽!(,÷∨)1⊥!÷⍳

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

একক যুক্তি নিয়ে সক্রিয় ফাংশন আমাদের প্রথমে ডিনমিনেটর মুদ্রণের অনুমতি দেওয়া থাকলে তা সরিয়ে একটি বাইট সংরক্ষণ করে ।

@ বাইজাইমার জন্য ধন্যবাদ @ ডিজাইমা।

কিভাবে:

⌽!(,÷∨)1⊥!÷⍳  Tacit function, argument will be called ⍵.
             Range 1..⍵ 
          ÷   Dividing
         !    the factorial of 
       1     Base-1 decode, aka sum;
 !(   )       Using that sum and the factorial of  as arguments, fork:
             (GCD
    ÷         dividing
   ,          the vector with both arguments)
             reversed.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.