Policz dzielniki liczby


26

Wprowadzenie

To bardzo proste wyzwanie: po prostu policz dzielniki liczby. Wcześniej mieliśmy podobne, ale bardziej skomplikowane wyzwanie , ale zamierzam, aby to było na poziomie podstawowym.

Wyzwanie

Utwórz program lub funkcję, która przy jednej ściśle dodatniej liczbie całkowitej Nwyprowadza lub zwraca liczbę posiadanych dzielników, w tym 1 i N.

Dane wejściowe: jedna liczba całkowita> 0. Możesz założyć, że liczba może być reprezentowana w rodzimym typie liczbowym twojego języka.

Wynik: liczba posiadanych dodatnich dzielników liczb całkowitych, w tym 1 i sama liczba.

Zgłoszenia będą oceniane w bajtach . Ta witryna może być przydatna, ale możesz użyć dowolnej rozsądnej metody do generowania liczby bajtów.

To jest , więc wygrywa najniższy wynik!

Edycja: Wygląda na to, że FryAmTheEggman 5-bajtowa odpowiedź Pyth jest zwycięzcą! Możesz jednak przesyłać nowe odpowiedzi; jeśli możesz dostać coś krótszego, zmienię przyjętą odpowiedź.

Przypadki testowe

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

Liderów

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.

Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz dołączyć wiele numerów do nagłówka (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

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

Odpowiedzi:


19

Pyth, 5

l{yPQ

Używa operacji podzbiorów na głównych czynnikach wejściowych, a następnie przechowuje tylko unikalne listy czynników i zwraca tę liczbę.

Pakiet testowy

Wyjaśnienie

Na przykładzie 25, aby lista podzbiorów nie była zbyt długa

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

Fascynujący. Niezłe podejście
Cyoce,

14

C ++ C, 43 57 56 46 43 bajty

Zgodnie z sugestiami Martina Büttnera:

i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}

1
Poczekaj, policzmy ich oboje zamiast 43,i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Martin Ender

@ MartinBüttner Wow man wow. Poważnie! _ / \ _
Sahil Arora

1
Piękny! : ~)!
sweerpotato

11

LabVIEW, 4938 bajtów

Cóż, to oczywiście nie nadaje się do golfa kodowego, ale cokolwiek, więc na mój pierwszy post i Lolz tutaj idzie. wprowadź opis zdjęcia tutaj


Witamy w Programowaniu zagadek i Code Golf! Jak to zdobyłeś, jeśli nie masz nic przeciwko, żebym zapytał? Nie mogłem znaleźć żadnego precedensu na Meta.
bkul

Uratowałem i
przyjąłem

A było 4,938 bajtów? Na przykład nie kilobajty?
bkul

dla dokładności wziąłem liczbę bajtów, a nie liczbę kb
Eumel

4
@bkul Myślę, że zamieszanie wynika z tego ., co, jestem pewien, ma oznaczać separator tysiąca, a nie przecinek dziesiętny (jak to często bywa w niektórych językach).
Martin Ender

10

Haskell, 28 bajtów

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

Sztuczka polega na sprawdzeniu, czy reszta 0korzysta z funkcji wskaźnika 0^.

0^0 = 1
0^_ = 0

Działa to, ponieważ każda dodatnia moc 0 wynosi 0, podczas gdy 0 ^ 0 jest kombinatorycznie pustym iloczynem 1.

Porównaj to z filtrowaniem

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

7

Dyalog APL , 7 6 bajtów

≢∘∪⊢∨⍳

Jest to nienazwana funkcja, którą można nazwać, a następnie ponownie wykorzystać dla każdego ¨przypadku testowego w następujący sposób:

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

Wyjaśnienie:

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

Liczyć wyjątkowy z GCD od siebie i każda z liczb całkowitych, aż .

Dzięki ngn za zapisanie bajtu.


Stara wersja: +/0=⍳|⊢

Tak to działa:

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

⍳|⊢Argument 1-przez-argument dzielenia-reszty Wartość
0=logiczna, jeśli 0 jest równe reszcie
+/dzielącej Suma wartości boolowskiej, tj. Liczby jedności.


6

Python 2, 37 bajtów

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

Funkcja rekurencyjna. Opcjonalne wejście iw testowanym dzielniku. Wyrażenie (n%i<1)testuje podzielność, przy Trueczym (która jest równa 1) dla dzielników. Wynik jest dodawany do wyrażenia zwrotnego dla i+1. Kiedy i==nzostanie osiągnięty, całkowity podział na piętra jest i/nobliczany na 1, a ta wartość jest zwracana jako przypadek podstawowy, uznając nsię za dzielnik n.


38:

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

Anonimowa funkcja. Testy wszystkich możliwych dzielników 1przez n. To jest przesunięta w górę z 0pośrednictwem n-1w range(n)użyciu -~, co dodaje 1. Podsumowując boole wykorzystuje fakt, że Python traktuje True/ Falsejak 1/ 0.


6

Siatkówka , 17 bajtów

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

Dane wejściowe są jednoargumentowe , dane wyjściowe dziesiętne.

Wypróbuj online.

Po wywołaniu z jednym wyrażeniem regularnym Retina po prostu liczy dopasowania. Wyrażenie regularne dopasowuje pozycję , w której liczba jednoargumentowa po jego lewej stronie jest dzielnikiem całego wejścia. Korzystam również z faktu, że spojrzenia są atomowe, więc nie muszę używać ^kotwicy.

Pierwsze spojrzenie po prostu przechwytuje cały przedrostek w grupie 1. To nigdy nie może zawieść, więc po obejrzeniu wiemy, że to jest w grupie 1 i już się nie zmieni.

Lookahead sprawdza następnie, czy możemy dotrzeć do końca ciągu, powtarzając przechwycony ciąg (nasz potencjalny dzielnik) 0 lub więcej razy.


6

J, 10 bajtów

[:*/1+_&q:

To jest bezimienny, monadyczny czasownik. Oblicza σ 0 (∏p k α k ) jako ∏ (α k + 1) .

Spróbuj go online z J.js .

Jak to działa

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

      _&q:    Compute all exponents of the prime factorization of y.
    1+        Add 1 to each exponent.
[:*/          Reduce by mutiplication.

Nie sądzę, że q:jest to dozwolone, ponieważ rozwiązuje zasadniczą część wyzwania. A może po prostu[:+/0=]|~1+i.
FUZxxl

To byłby duplikat tej odpowiedzi . Ponadto wbudowane nie są domyślnie zabronione, a wyzwanie nie wydaje się o nich wspominać.
Dennis

Wbudowane, które wykonują całą / prawie całą pracę związaną z wyzwaniem, są zwykle zabronione, ale mogę śledzić twoje rozumowanie q: .
FUZxxl,

1
Oni nie są. Chciałbym, żeby były, ale nie są.
Dennis

Hrmpf hrmpf to trochę do bani.
FUZxxl,

6

Golfscript, 19 18 17 13 bajtów

Z podziękowaniami dla Martina Büttnera .

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

Jak to działa

~               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

Również

Od @Peter Taylor , również w 13 bajtach.

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

Jak to działa

~               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

Przy tej samej długości możesz mieć także~:X,{)X\%!},,
Peter Taylor

4

J, 13 12 11 bajtów

Mój pierwszy golf w J. Wciąż się tego uczę.

Oszczędność bajtu dzięki Dennisowi.

Oszczędność jeszcze jednego bajtu dzięki randomra.

1+/@,0=i.|]

Wyjaśnienie:

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

3

Arcyóu , 12 bajtów

Zacznijmy imprezę!

(F(x)(_(d/ x

Korzysta z wbudowanej funkcji d/. Oto wersja bez wbudowanego (27 bajtów):

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

Wyjaśnienie:

(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

3

CJam, 11 bajtów

ri_,:)f%0e=

Sprawdź to tutaj.

Wyjaśnienie

CJam nie ma do tego wbudowanego, więc przeprowadzamy podział próbny.

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.

Premia

Oto interesujące rozwiązanie na 12 bajtów (które, jak podejrzewam, może być najkrótsze w języku takim jak J):

ri_)2m*::*e=

Wynik jest równy liczbie nwyświetleń w n x ntablicy mnożenia:

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.

3

Matlab, 20 bajtów

Wykonaj k mod ndla każdego k = 1,...,n, a następnie wykonaj not(co zmienia każdy nonzer na zero i każde zero na 1) i zsumuj wszystkie te wartości.

@(n)sum(~mod(n,1:n))

To też byłoby moje podejście!
Luis Mendo

Ciekawe, że jest to ta sama długość co length(divisors(n)).
Akumulacja

@Kumulacja, którą musisz dodać, @(n)aby stała się poprawnym przesłaniem
flawr

3

Julia, 20 bajtów

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

Jest to anonimowa funkcja, która działa w następujący sposób: Dla każdej liczby całkowitej od 1 do wejścia sprawdź, czy moduł wejściowy liczba całkowita wynosi zero. Jeśli tak, wartość będzie true, w przeciwnym razie false. Sumujemy liczby logiczne, które są domyślnie rzutowane na liczby całkowite, dając liczbę dzielników.


Jest o wiele fajniejsze (choć także znacznie dłuższe) rozwiązanie, zawarte ze względu na kompletność

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

Pobiera to kanoniczną faktoryzację n, tj. \prod_{i=1}^k p_i^e_iI oblicza funkcję dzielnika jako τ(n) = \prod_{i=1}^k e_i + 1.




2

Rubinowy, 27 bajtów

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

Przykładowy przebieg:

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


2

Regex (.NET), 33 bajty

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

Zakładając, że dane wejściowe i wyjściowe są jednoargumentowe, a dane wyjściowe są pobierane z głównego dopasowania wyrażenia regularnego.

Podział wyrażenia regularnego:

  • .*$ ustawia wskaźnik na końcu łańcucha, dzięki czemu mamy cały sygnał wejściowy xw jednym kierunku.
  • (?<=^\2*(.+?(?>\2?))) dopasowuje od prawej do lewej i sprawdza dzielnik, zapętlając od x do 0.
    • (.+?(?>\2?)) jest „zmienną”, która zaczyna się od 1 w pierwszej iteracji i kontynuuje od liczby w poprzedniej iteracji i zapętla do x.
    • ^\2* sprawdza, czy x jest wielokrotnością „zmiennej”.

Zasadniczo ma ten sam pomysł, co moja odpowiedź na Calculate Phi (nie Pi) . Tylko czek jest inny.

Przetestuj wyrażenie regularne w RegexStorm .


2

Labirynt , 33 bajty

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

Wypróbuj online.

To wdraża podział próbny. Później dodam pełne wyjaśnienie. Prawdopodobnie nie jest to optymalne, ale trudno mi wymyślić coś krótszego.


2

Perl 6 , 17 bajtów

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

stosowanie:

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

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

say $code(97); # 2␤

my &code = $code;
say code 92; # 6

2

JavaScript (ES6), 60 57 42 40 39 37 bajtów

Prawdopodobnie można to lepiej grać w golfa.

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

Edycja 1: Miałem rację. Usunięto nawiasy klamrowe po pętli for.

Edycja 2: Grał w golfa do 40 bajtów dzięki manatwork i Martinowi Büttnerowi .

Edycja 3: Zapisywanie bajtu przez oparcie funkcji na odpowiedzi C powyżej.

Edycja 4: Dzięki ן nɟuɐɯɹɐ ן oɯ i Neilowi , ale nie mogę sprawić, by eval działał.

Edycja 5: Zapomniałem usunąć ewaluację.

Test

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

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

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


2
Porzuć dobre nawyki. Usuń varsłowa kluczowe. Więcej wskazówek w Poradach dla golfistów w JavaScript i Poradach dla golfistów w ECMAScript 6 .
manatwork

2
Zrezygnuj też ze złych nawyków: kiedy masz wybór między ++ii i++, wybierz pierwszą (to nie ma nic wspólnego z golfem). n%i<1Powinien również zapisać bajt.
Martin Ender

2
Tylko krótko przetestowane: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 Dlaczego nie n%++i||++d?
Neil

2

PowerShell, 34 bajty

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

e.g. 

PS C:\temp> .\divisors-of-x.ps1 97
2
  • utwórz listę liczb od 1 do x, podaj je do potoku |
  • odfiltruj potok (x% item == 0), domyślnie rzutując wynik modulo na wartość logiczną, a następnie odwracając go, !aby dzielniki stały się $ true i zostały dopuszczone; za pomocą wbudowanego aliasu ?dlaWhere-Object
  • zebrać ()i .Countile przedmiotów przeszło przez filtr

Bardzo ładnie zhakowany!
bkul

2

Galaretka , 2 bajty (niekonkurujące (ponownie))

Æd

Wypróbuj online!

Myślę, że wykorzystuje to funkcje zaimplementowane po drugiej odpowiedzi Jelly. Skomentuj, jeśli się mylę (nie mogę sprawdzić każdego zatwierdzenia w wierszu, wiesz :))


2

Taxi, 2143 bajtów

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.

Wypróbuj online!

Nie golfowany:

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.

Wyjaśnienie:

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.


2

Formuła Excel, 42 28 bajtów

Edycja: Właśnie zdałem sobie sprawę, że nie muszę używać INDIRECT, oszczędzając 14 bajtów!

Jako formułę tablicową ( Ctrl+ Shift+ Enter) należy wprowadzić:

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

Gdzie N jest liczbą do przetestowania.

Przykłady:

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

Wyjaśnienie:

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.



1

Minkolang 0,13 , 16 bajtów

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

Sprawdź wszystkie przypadki tutaj.

Wyjaśnienie

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.