Hitung pembagi angka

26

pengantar

Ini adalah tantangan yang sangat sederhana: cukup hitung pembagi angka. Kami pernah menghadapi tantangan yang serupa tetapi lebih rumit sebelumnya, tapi saya bermaksud yang ini menjadi entry-level.

Tantangan

Buat program atau fungsi yang, dengan satu bilangan bulat positif N, menghasilkan atau mengembalikan berapa banyak pembagi yang dimilikinya, termasuk 1 dan N.

Input: Satu bilangan bulat> 0. Anda dapat menganggap bahwa angka tersebut dapat direpresentasikan dalam tipe numerik asli bahasa Anda.

Output: Jumlah pembagi integer positif yang dimilikinya, termasuk 1 dan nomor itu sendiri.

Pengajuan akan dicetak dalam byte . Anda mungkin menemukan situs web ini berguna, meskipun Anda dapat menggunakan metode yang masuk akal untuk menghasilkan jumlah byte Anda.

Ini , jadi skor terendah menang!

Sunting: Sepertinya jawaban Pyth 5-byte FryAmTheEggman adalah pemenangnya! Namun, jangan ragu untuk mengirimkan jawaban baru; jika Anda bisa mendapatkan sesuatu yang lebih pendek, saya akan mengubah jawaban yang diterima.

Uji Kasus

ndiv(1) -> 1
ndiv(2) -> 2
ndiv(12) -> 6
ndiv(30) -> 8
ndiv(60) -> 12
ndiv(97) -> 2
ndiv(100) -> 9

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

# Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

bkul
sumber

Jawaban:

19

Pyth, 5

l{yPQ

Menggunakan operasi himpunan bagian pada faktor utama input, kemudian hanya menyimpan daftar faktor unik dan mengembalikan jumlah ini.

Test Suite

Penjelasan

Menggunakan 25 sebagai contoh, sehingga daftar subset tidak terlalu panjang

l{yPQ     ## implicit:  Q = eval(input()) so Q == 25
   PQ     ## Prime factors of Q, giving [5, 5]
  y       ## All subsets, giving [[], [5], [5], [5, 5]]
 {        ## Unique-fiy, giving [[], [5], [5, 5]]
l         ## Length, print implicity
FryAmTheEggman
sumber
Menarik. Pendekatan yang bagus
Cyoce
14

C ++ C, 43 57 56 46 43 byte

Atas saran Martin Büttner:

i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Sahil Arora
sumber
1
Tunggu, mari kita hitung keduanya, untuk 43:i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Martin Ender
@ MartinBüttner Wow, wow. Serius! _ / \ _
Sahil Arora
1
Indah! : ~)!
sweerpotato
11

LabVIEW, 4938 Bytes

Yah itu jelas tidak cocok untuk golf kode tetapi apa pun, jadi untuk posting pertama saya dan lolz begini. masukkan deskripsi gambar di sini

Eumel
sumber
Selamat Datang di Programming Puzzles dan Code Golf! Bagaimana Anda menilai ini, jika Anda tidak keberatan saya bertanya? Saya tidak dapat menemukan preseden di Meta.
bkul
saya menyimpannya dan mengambil ukurannya
Eumel
Dan itu 4,938 byte? Bukan kilobyte, misalnya?
bkul
untuk akurasi saya mengambil jumlah byte bukan jumlah kb
Eumel
4
@ Bkul Saya pikir kebingungan ini disebabkan oleh ., yang saya cukup yakin dimaksudkan sebagai pemisah seribu, bukan titik desimal (seperti yang umum dalam beberapa bahasa).
Martin Ender
10

Haskell, 28 byte

f n=sum[0^mod n i|i<-[1..n]]

Kuncinya di sini adalah untuk menguji apakah sisanya 0menggunakan fungsi indikator 0^.

0^0 = 1
0^_ = 0

Ini berfungsi karena setiap kekuatan positif 0 adalah 0, sedangkan 0 ^ 0 secara kombinatorial adalah produk kosong dari 1.

Bandingkan ini dengan pemfilteran

f n=sum[1|i<-[1..n],mod n i<1]
Tidak
sumber
7

Dyalog APL , 7 6 byte

≢∘∪⊢∨⍳

Ini adalah fungsi tanpa nama yang dapat dinamai dan kemudian digunakan kembali untuk setiap ( ¨) kasus uji sebagai berikut:

      f ← ≢∘∪⊢∨⍳
      f¨ 1 2 12 30 60 97 100
1 2 6 8 12 2 9

Penjelasan:

 ┌─┴──┐  
 ∪  ┌─┼─┐
 ∘  │ ∨ │
 ̸≡  ⊢   ⍳

Menghitung yang unik dari GCD sendiri dan masing-masing bilangan bulat-sampai .

Terima kasih kepada ngn untuk menyimpan byte.


Versi lama: +/0=⍳|⊢

Begini Cara kerjanya:

  ┌─┴─┐      
  / ┌─┼───┐  
┌─┘ 0 = ┌─┼─┐
+       ⍳ | ⊢

⍳|⊢1-through-argumen pembagian-sisa argumen
0=Boolean jika 0 sama dengan sisa pembagian
+/Jumlah boolean, yaitu jumlah yang.

Adám
sumber
6

Python 2, 37 byte

f=lambda n,i=1:i/n or(n%i<1)+f(n,i+1)

Fungsi rekursif. Input opsional ipada pembagi yang diuji. Ekspresi (n%i<1)menguji pembagian, dengan True(yang sama dengan 1) untuk pembagi. Hasilnya ditambahkan ke ekspresi recusive untuk i+1. Ketika i==ntercapai, lantai-bilangan bulat i/ndievaluasi untuk 1, dan nilai itu dikembalikan sebagai kasus dasar, yang dengan nsendirinya menjadi pembagi n.


38:

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

Fungsi anonim. Tes semua kemungkinan pembagi 1melalui n. Ini digeser naik dari 0melalui n-1di range(n)menggunakan -~, yang menambahkan 1. Menjumlahkan bools menggunakan fakta bahwa Python memperlakukan True/ Falsesebagai 1/ 0.

Tidak
sumber
6

Retina , 17 byte

(?<=(.+))(?=\1*$)

Input dalam unary , output dalam desimal.

Cobalah online.

Ketika dipanggil dengan regex tunggal, Retina hanya menghitung pertandingan. Regex itu sendiri cocok dengan posisi , di mana angka unary di sebelah kiri itu adalah pembagi dari seluruh input. Saya juga memanfaatkan fakta bahwa lookaround adalah atom, sehingga saya tidak perlu menggunakan ^jangkar.

Tampilan pertama hanya menangkap seluruh awalan dalam grup 1. Ini tidak akan pernah gagal, jadi setelah melihat ke belakang kita tahu apa yang ada di grup 1 dan itu tidak akan berubah lagi.

Lookahead kemudian memeriksa apakah kita dapat mencapai ujung string dengan mengulangi string yang ditangkap (pembagi potensial kita) 0 kali atau lebih.

Martin Ender
sumber
6

J, 10 byte

[:*/1+_&q:

Ini adalah kata kerja monadik tanpa nama. Ini menghitung σ 0 (∏p k α k ) sebagai ∏ (α k + 1) .

Cobalah online dengan J.js .

Bagaimana itu bekerja

[:*/1+_&q:    Right argument: y

      _&q:    Compute all exponents of the prime factorization of y.
    1+        Add 1 to each exponent.
[:*/          Reduce by mutiplication.
Dennis
sumber
Saya tidak berpikir q:diperbolehkan karena itu memecahkan bagian penting dari tantangan. Bagaimana kalau[:+/0=]|~1+i.
FUZxxl
Itu akan menjadi duplikat dari jawaban ini . Selain itu, bawaan tidak dilarang secara default, dan tantangannya sepertinya tidak menyebutkannya.
Dennis
Orang bawaan yang melakukan semua / hampir semua pekerjaan tantangan biasanya dilarang tetapi saya dapat mengikuti alasan Anda q: .
FUZxxl
1
Mereka tidak. Saya berharap mereka, tetapi mereka tidak.
Dennis
Hrmpf hrmpf yang sedikit menyebalkan.
FUZxxl
6

Golfscript, 19 18 17 13 byte

Dengan terima kasih kepada Martin Büttner .

~.,\{\)%!}+,,

Bagaimana itu bekerja

~               Evaluate the input, n
 .,             Duplicate the input, create array [0..n-1]
   \            Swap array and n
    {    }+     Add n to block == {n block}
     \          Swap n with i in array
      )         Increment i
       %        n mod i
        !       Logical not so that 1 if divisible by n else 0
           ,    Filter array using block for all i divisible by n
            ,   Get length of the filtered array, the answer

Juga

Dari @Peter Taylor , juga dalam 13 byte.

~:X,{)X\%!},,

Bagaimana itu bekerja

~               Evaluate the input
 :X             Store input in variable X
   ,            Create array [0..X-1]
    {     },    Filter array using the following block
     )          Increment i in array
      X\        Add X to stack, swap with i
        %       X mod i,
         !      Logical not so that 1 if divisible by n else 0
            ,   Get length of the filtered array, the answer
Sherlock9
sumber
Untuk panjang yang sama Anda juga bisa memiliki~:X,{)X\%!},,
Peter Taylor
4

J, 13 12 11 byte

Golf pertamaku di J. Aku masih mempelajarinya.

Menyimpan satu byte berkat Dennis.

Disimpan satu byte lagi berkat randomra.

1+/@,0=i.|]

Penjelasan:

1+/@,0=i.|]
       i.        the array 0 .. n-1
         |]      mod n
     0=          replace 0 by 1, and nonzero entries by 0
1   ,            prepend 1 to the array
 +/@             take the sum
alephalpha
sumber
3

Arcyóu , 12 byte

Ayo mulai pestanya!

(F(x)(_(d/ x

Ini menggunakan fungsi bawaan d/. Berikut adalah versi tanpa built-in (27 byte):

(F(x)(](+(f i(_ 1 x)(‰ x i

Penjelasan:

(F(x)              ; Anonymous function with one parameter x
  (]               ; Increment
    (+             ; Sum
      (f i(_ 1 x)  ; For i in range from 1 to x-1 inclusive:
        (‰ x i     ; x divisible by i
bkul
sumber
3

CJam, 11 byte

ri_,:)f%0e=

Uji di sini.

Penjelasan

CJam tidak memiliki bawaan untuk ini, jadi kami melakukan pembagian percobaan.

ri  e# Read input and convert to integer N.
_,  e# Duplicate and turn into range [0 1 ... N-1]
:)  e# Increment each element in the range to get [1 2 ... N]
f%  e# Take N modulo each of the list elements.
0e= e# Count the zeroes.

Bonus

Berikut adalah solusi yang menarik pada 12 byte (yang saya duga mungkin paling pendek dalam bahasa seperti J):

ri_)2m*::*e=

Hasilnya sama dengan berapa kali nmuncul dalam n x ntabel perkalian:

ri  e# Read input and convert to integer N.
_)  e# Duplicate and increment.
2m* e# Take Cartesian product of [0 1 ... N] with itself.
::* e# Compute the product of each pair.
e=  e# Count the occurrences of N.
Martin Ender
sumber
3

Matlab, 20 byte

Lakukan k mod nuntuk setiap k = 1,...,n, kemudian lakukan not(yang mengubah setiap nonzer menjadi nol dan setiap nol menjadi 1) dan jumlahkan semua nilai tersebut.

@(n)sum(~mod(n,1:n))
cacat
sumber
Ini akan menjadi pendekatan saya juga!
Luis Mendo
Menarik bahwa panjangnya sama dengan length(divisors(n)).
Akumulasi
@Accumulation Anda masih perlu menambahkan @(n)untuk menjadikannya submision yang valid
flawr
3

Julia, 20 byte

n->sum(i->n%i<1,1:n)

Ini adalah fungsi anonim yang berfungsi sebagai berikut: Untuk setiap bilangan bulat dari 1 ke input, uji apakah input modulo bilangan bulat adalah nol. Jika demikian, nilainya akan menjadi truesebaliknya false. Kami menjumlahkan boolean yang secara implisit dilemparkan ke bilangan bulat, menghasilkan jumlah pembagi.


Solusi yang lebih keren (meskipun juga lebih lama), termasuk untuk kelengkapan, adalah

n->prod(collect(values(factor(n))).+1)

Ini mendapatkan faktorisasi kanonik n, yaitu \prod_{i=1}^k p_i^e_i, dan menghitung fungsi pembagi sebagai τ(n) = \prod_{i=1}^k e_i + 1.

Alex A.
sumber
2

PARI / GP, 6 byte

PARI / GP memiliki built-in untuk ini.

numdiv
alephalpha
sumber
Saya tidak yakin, tapi saya pikir menurut meta, untuk builtin, Anda tidak bisa hanya menyatakannya kembali.
Maltysen
3
@Maltysen, saya pikir itu diizinkan. meta.codegolf.stackexchange.com/a/7206/9288
alephalpha
2

Pyth, 8 byte

Divisi uji coba sederhana.

lf!%QTSQ

Cobalah online di sini .

Maltysen
sumber
2

Ruby, 27 byte

->n{(1..n).count{|i|n%i<1}}

Contoh dijalankan:

2.1.5 :001 > ->n{(1..n).count{|i|n%i<1}}[100]
 => 9 
manatwork
sumber
2

Oktaf, 21 20 byte

@(n)nnz(~mod(n,1:n))
alephalpha
sumber
Saya suka nnz, penggunaan yang bagus di sini =)
flawr
2

Regex (.NET), 33 byte

^((?=.*$(?<=^\2*(.+?(?>\2?)))).)+

Dengan asumsi input dan output dalam kondisi unary, dan output diambil dari pertandingan utama regex.

Hancurkan regex:

  • .*$ ets pointer ke ujung string sehingga kita memiliki seluruh input x dalam satu arah.
  • (?<=^\2*(.+?(?>\2?))) cocok dari kanan ke kiri dan memeriksa pembagi dengan menggeser dari x ke 0.
    • (.+?(?>\2?)) adalah "variabel" yang dimulai dari 1 pada iterasi pertama dan berlanjut dari angka pada iterasi sebelumnya dan loop hingga x.
    • ^\2* memeriksa apakah x adalah kelipatan "variabel".

Ini pada dasarnya memiliki ide yang sama dengan jawaban saya untuk Menghitung Phi (bukan Pi) . Hanya ceknya yang berbeda.

Uji regex di RegexStorm .

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
sumber
2

Labirin , 33 byte

?:}
  :{:}%{{
@ }   " )
!{("{;"}}

Cobalah online.

Ini mengimplementasikan pembagian percobaan. Saya akan menambahkan penjelasan lengkap nanti. Ini mungkin tidak optimal, tetapi saya kesulitan menemukan sesuatu yang lebih pendek.

Martin Ender
sumber
2

Perl 6 , 17 byte

{[+] $_ X%%1..$_} # 17

pemakaian:

say {[+] $_ X%%1..$_}(60); # 12␤

my $code = {[+] $_ X%%1..$_};

say $code(97); # 2␤

my &code = $code;
say code 92; # 6
Brad Gilbert b2gills
sumber
2

Javascript (ES6), 60 57 42 40 39 37 byte

Ini mungkin bisa bermain golf lebih baik.

n=>{for(d=i=n;i;n%i--&&d--);return d}

Sunting 1: Saya benar. Menghapus kawat gigi setelah for loop.

Sunting 2: Golf hingga 40 byte dengan terima kasih kepada manatwork dan Martin Büttner .

Sunting 3: Menyimpan byte dengan mendasarkan fungsi pada jawaban C di atas.

Sunting 4: Terima kasih ן nɟuɐɯɹɐ ן oɯ dan Neil , tapi saya tidak bisa membuat eval bekerja.

Sunting 5: Lupa untuk menghapus eval.

Uji

n = <input type="number" oninput='result.innerHTML=(

n=>{for(d=i=n;i;n%i--&&d--);return d}

)(+this.value)' /><pre id="result"></pre>

Sherlock9
sumber
2
Hentikan kebiasaan baik. Hapus varkata kunci. Kiat lainnya dalam Kiat untuk bermain golf di JavaScript dan Kiat untuk bermain golf di ECMAScript 6 .
manatwork
2
Berikan juga kebiasaan buruk: ketika Anda punya pilihan di antara ++idan i++, pilih yang pertama (ini tidak ada hubungannya dengan golf). Juga n%i<1harus menyimpan byte.
Martin Ender
2
Hanya diuji sebentar:n=>{for(d=i=0;i<n;)n%++i<1&&d++;return d}
manatwork
1
38: n => eval ('for (d = 0, i = n; i; d + = n% i - <1); d')
Mama Fun Roll
1
@manatwork Kenapa tidak n%++i||++d?
Neil
2

PowerShell, 34 byte

param($x)(1..$x|?{!($x%$_)}).Count

e.g. 

PS C:\temp> .\divisors-of-x.ps1 97
2
  • buat daftar angka dari 1 hingga x, masukkan ke dalam pipa |
  • filter pipeline on (x% item == 0), dengan secara implisit casting hasil modulo sebagai boolean dan kemudian membalikkannya menggunakan !sehingga pembagi menjadi $ true dan diizinkan melalui; menggunakan alias builtin ?untukWhere-Object
  • kumpulkan ()dan .Countberapa banyak item yang melewati filter
TessellatingHeckler
sumber
Diretas dengan sangat baik!
bkul
2

Jelly , 2 byte (tidak bersaing (lagi))

Æd

Cobalah online!

Saya pikir ini menggunakan fitur yang diimplementasikan setelah jawaban Jelly lainnya. Komentar jika saya salah (saya tidak bisa melihat setiap komit di baris, Anda tahu :))

Erik the Outgolfer
sumber
2

Taksi, 2143 byte

Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l 2 r.Pickup a passenger going to Cyclone.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 r.Go to Cyclone:n 1 l.Pickup a passenger going to Firemouth Grill.Pickup a passenger going to Joyless Park.Go to Firemouth Grill:s 1 l 2 l 1 r.Go to Joyless Park:e 1 l 3 r.[i][Check next value n-i]Go to Zoom Zoom:w 1 r 2 l 2 r.Go to Sunny Skies Park:w 2 l.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l.Pickup a passenger going to Divide and Conquer.Pickup a passenger going to Sunny Skies Park.Go to Joyless Park:n 2 r 2 r 2 l.Pickup a passenger going to Cyclone.Go to Sunny Skies Park:w 1 r 2 l 2 l 1 l.Go to Cyclone:n 1 l.Pickup a passenger going to Joyless Park.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:n 2 r 2 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 1 l 2 l.Pickup a passenger going to Trunkers.Pickup a passenger going to Equal's Corner.Go to Trunkers:s 1 l.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan "F" if no one is waiting.Pickup a passenger going to Knots Landing.Go to Firemouth Grill:n 3 r 1 l 1 r.Pickup a passenger going to The Underground.Go to The Underground:e 1 l.Pickup a passenger going to Firemouth Grill.Go to Knots Landing:n 2 r.Go to Firemouth Grill:w 1 l 2 r.Go to Joyless Park:e 1 l 3 r.Switch to plan "N".[F][Value not a divisor]Go to Joyless Park:n 3 r 1 r 2 l 4 r.[N]Pickup a passenger going to The Underground.Go to The Underground:w 1 l.Switch to plan "E" if no one is waiting.Pickup a passenger going to Joyless Park.Go to Joyless Park:n 1 r.Switch to plan "i".[E]Go to Sunny Skies Park:n 3 l 2 l 1 l.Pickup a passenger going to What's The Difference.Go to Firemouth Grill:s 1 l 1 l 1 r.Pickup a passenger going to What's The Difference.Go to What's The Difference:w 1 l 1 r 2 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 3 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

Cobalah online!

Tidak Disatukan:

Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: south 1st left 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left 1st left 2nd right.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 1st right.
Go to Cyclone: north 1st left.
Pickup a passenger going to Firemouth Grill.
Pickup a passenger going to Joyless Park.
Go to Firemouth Grill: south 1st left 2nd left 1st right.
Go to Joyless Park: east 1st left 3rd right.
[i]
[Check next value n-i]
Go to Zoom Zoom: west 1st right 2nd left 2nd right.
Go to Sunny Skies Park: west 2nd left.
Pickup a passenger going to Cyclone.
Go to Cyclone: north 1st left.
Pickup a passenger going to Divide and Conquer.
Pickup a passenger going to Sunny Skies Park.
Go to Joyless Park: north 2nd right 2nd right 2nd left.
Pickup a passenger going to Cyclone.
Go to Sunny Skies Park: west 1st right 2nd left 2nd left 1st left.
Go to Cyclone: north 1st left.
Pickup a passenger going to Joyless Park.
Pickup a passenger going to Divide and Conquer.
Go to Divide and Conquer: north 2nd right 2nd right 1st right.
Pickup a passenger going to Cyclone.
Go to Cyclone: east 1st left 1st left 2nd left.
Pickup a passenger going to Trunkers.
Pickup a passenger going to Equal's Corner.
Go to Trunkers: south 1st left.
Pickup a passenger going to Equal's Corner.
Go to Equal's Corner: west 1st left.
Switch to plan "F" if no one is waiting.
Pickup a passenger going to Knots Landing.
Go to Firemouth Grill: north 3rd right 1st left 1st right.
Pickup a passenger going to The Underground.
Go to The Underground: east 1st left.
Pickup a passenger going to Firemouth Grill.
Go to Knots Landing: north 2nd right.
Go to Firemouth Grill: west 1st left 2nd right.
Go to Joyless Park: east 1st left 3rd right.
Switch to plan "N".
[F]
[Value not a divisor]
Go to Joyless Park: north 3rd right 1st right 2nd left 4th right.
[N]
Pickup a passenger going to The Underground.
Go to The Underground: west 1st left.
Switch to plan "E" if no one is waiting.
Pickup a passenger going to Joyless Park.
Go to Joyless Park: north 1st right.
Switch to plan "i".
[E]
Go to Sunny Skies Park: north 3rd left 2nd left 1st left.
Pickup a passenger going to What's The Difference.
Go to Firemouth Grill: south 1st left 1st left 1st right.
Pickup a passenger going to What's The Difference.
Go to What's The Difference: west 1st left 1st right 2nd right 1st left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: east 3rd right.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st left 1st right.

Penjelasan:

Convert stdin to a number and store it in three locations for three purposes:
   Original (Sunny Skies Park)
   Counter for tested values (Joyless Park)
   Counter for divisors found (Firemouth Grill)
Divide the original by each Joyless Park value in turn.
If the division result equals the truncated division result, then it's a divisor.
When a divisor is found, subtract one from Firemouth Grill.
Repeat until Joyless Park hits zero.
Pickup the original from Sunny Skies Park and subtract the value from Firemouth Grill.
Convert the result to a string and print to stdout.
Toast insinyur
sumber
2

Japt , 3 byte

â l

-m flag untuk menjalankan semua test case.

Cobalah

Perwujudan Ketidaktahuan
sumber
2

Formula Excel, 42 28 byte

Sunting: Saya baru sadar saya tidak perlu menggunakan INDIRECT, menghemat 14 byte!

Berikut ini harus dimasukkan sebagai rumus array ( Ctrl+ Shift+ Enter):

=SUM(--NOT(MOD(N,ROW(1:N))))

Di mana N adalah angka untuk diuji.

Contoh:

{SUM(--NOT(MOD(32,ROW(1:32))))}
Result: 6
{SUM(--NOT(MOD(144,ROW(1:144))))}
Result: 15

Penjelasan:

SUM(--NOT(MOD(N,ROW(1:N))))       Full formula

                ROW(1:N)          Generates an array of row numbers e.g {1;2;3;4;...N}
          MOD(N,ROW(1:N))         Does N MOD {1;2;3;4;,...N}
      NOT(MOD(N,ROW(1:N)))        Coerces zeros to ones, so that they may be counted, but actually returns an array of TRUE;FALSE;FALSE;...
    --NOT(MOD(N,ROW(1:N)))        Coerces the TRUEs to 1s and FALSEs to 0s.
SUM(--NOT(MOD(N,ROW(1:N))))       Sum the ones for the result.
i_saw_drones
sumber
2

05AB1E , 2 byte

Ñg

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

Cukup mudah, tetapi ini dia:

Ñ   # Push a list of divisors of the (implicit) input-integer
    #  i.e. 100 → [1,2,4,5,10,20,25,50,100]
 g  # Pop and push the length of this list
    #  i.e. [1,2,4,5,10,20,25,50,100] → 9
    # (which is output implicitly as result)
Kevin Cruijssen
sumber
1

Mathematica, 16 byte

Length@*Divisors

Komposisi fungsi sederhana dari built-in.

Martin Ender
sumber
1

Minkolang 0,13 , 16 byte

ndd[0ci1+%,-]-N.

Periksa semua kasing di sini.

Penjelasan

ndd           Takes number from input and duplicates it twice (n)
[             Opens for loop that runs n times
 0c           Copies bottom of stack to top (n)
   i1+        Loop counter + 1 (d)
      %       Modulo - pops d,n, then pushes n%d
       ,      Not - 1 if equal to 0, 0 otherwise
        -     Subtract
         ]    Close for loop
-             Subtract (n - 1 for each non-divisor)
N.            Output as number and stop.
El'endia Starman
sumber