var QUESTION_ID=82815,OVERRIDE_USER=48934;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Jawaban:
M ,
96 byteTerima kasih kepada FryAmTheEggman karena telah menghemat 3 byte! Kode:
M memiliki keuntungan besar di sini, karena ia bekerja dengan pecahan daripada mengapung. Penjelasan:
Menggunakan pengodean Jelly . Cobalah online! .
Juga, ada solusi 4-byte , yang kadang-kadang menghasilkan nol terkemuka (misalnya
280 -> 0280
). Saya tidak yakin apakah ini diizinkan atau tidak:Cobalah online! .
sumber
g¹
menghitung pembagi umum fraksi dan n . Menggunakang1
mungkin akan lebih jelas. 2.V
melemparkan fraksi ke string dan mengevolasinya secara niladis.<num>/
adalah (non-kumulatif) dikurangi oleh operator niladik. Ini omong kosong, tetapi karena hanya ada satu angka (argumen implisit 0 ), itu tidak melakukan apa-apa. Tautan berikutnya, penyebutnya, adalah niladic, sehingga nilai pengembalian sebelumnya dicetak secara implisit dan diganti dengan nilad itu.Julia, 22 byte
Fungsi anonim.
sumber
n->sum(inv,1//1:n).den
Mathematica, 27 byte
Fungsi anonim.
Sebagai contoh:
sumber
Python 2,
6967 byteUji di Ideone .
Bagaimana itu bekerja
Misalkan H (n) adalah jumlah dari inversi multiplikatif dari bilangan bulat n positif pertama . Setiap saat, kita memiliki bahwa a / b = 1 + H (k - 1) . Faktanya, a , b , dan k semuanya diinisialisasi ke 1 , dan 1/1 = 1 = 1 + H (0) .
Kami ulangi cuplikan kode
(sebagai string) n (input) kali dan jalankan hasilnya. Di setiap langkah, kami memperbarui a , b , dan k menggunakan identitas a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
Setelah semua salinan dieksekusi, a / b = 1 + H (n) , yang memiliki penyebut yang sama dengan H (n) .
Bentuk a / b yang tereduksi sepenuhnya adalah (a cd gcd (a, b)) / (b ÷ gcd (a, b)) . Alih-alih menghitung pembagi umum terbesar, kita menginisialisasi r sebagai 1 dan terus bertambah r sampai ra adalah kelipatan b .
Jelas, ini membuat ra kelipatan a dan b paling tidak umum . Karena gcd (a, b) · lcm (a, b) = ab , kita memiliki b ÷ gcd (a, b) = lcm (a, b) ÷ a = ra ÷ a = r , membuat r output yang diinginkan.
sumber
Haskell, 52
Jika file dimuat ke GHCI, f dapat digunakan sebagai fungsi.
sumber
import
huruf kecil? Menghemat satu byte untuk menggunakanmap
alih - alih pemahaman:sum$map(1%)[1..n]
Jelly, 9 byte
Coba di sini.
sumber
MATL ,
1413 byteCobalah online!
Penjelasan
Untuk input N , output dibatasi oleh N ! (faktorial N ). Kode menghitung n / k untuk n = 1, ..., N ! dan untuk k = 1, ..., N . Kemudian jumlah dari k , yang memberikan bilangan harmonik dikalikan dengan masing-masing n . Hasil yang diinginkan adalah indeks n dari nilai-nilai pertama yang merupakan bilangan bulat.
sumber
Ruby,
5747 byteTerima kasih kepada Kevin Lau untuk mempersingkat ini dengan sepuluh byte.
sumber
1.to_r
agar Anda tidak perlu melakukan injeksi string dan konversi. Juga, karena default Rubyreduce
adalah untuk menggunakan elemen pertama sebagai inisial, dan1/1=1
, Anda tidak perlu menetapkan secara spesifik0
sebagai nilai awal.Mathematica, 26 byte
Fungsi tanpa nama mengambil
n
sebagai input dan mengembalikan penyebut. Menggunakan trik standar penyalahgunaanTr
(trace) untuk menjumlahkan daftar timbal balik.sumber
JavaScript (ES6), 88 byte
Hanya bekerja hingga m = 20 karena batas ketepatan numerik JavaScript.
sumber
05AB1E , 8 byte
Kode:
Penjelasan:
Mungkin ada beberapa masalah akurasi untuk n> 19 karena divisi Python ... Menggunakan pengkodean CP-1252 .
Cobalah online! .
sumber
Pari / GP , 30 byte
Cobalah online!
sumber
J, 20 byte
Berdasarkan pendekatan yang digunakan oleh solusi @ Lynn .
Jika presisi tidak diperlukan untuk nilai n yang besar atau jika kita dapat mengasumsikan n akan diteruskan sebagai bilangan bulat yang diperluas, diakhiri dengan
x
, solusi yang lebih pendek dapat digunakan untuk 15 byte .Pemakaian
Penjelasan
sumber
Perl 6 ,
3632 bytePenjelasan:
Uji:
sumber
Hoon , 95 byte
Buat daftar
[1...n]
, lipat dengan++mul
untuk faktorial, buat daftar[n!/1, n!/2, ... n!/n]
dan jumlah, temukan GCD darin!
dan daftar, dan bagi faktorial dengan angka itu.Mungkin ada cara yang jauh lebih mudah untuk menghitung penyebutnya, tapi saya tidak bisa mengetahuinya: /
sumber
Python 3,
153 150 146142 byteSaya yakin ini bisa bermain golf lebih lanjut. Tapi saya baru di sini
sumber
Aksioma, 34 byte
uji
sumber
PHP, 81 Bytes
Cobalah online!
sumber