Đếm các ước của một số


26

Giới thiệu

Đây là một thách thức rất đơn giản: chỉ cần đếm các ước của một số. Chúng tôi đã có một thử thách tương tự nhưng phức tạp hơn trước đây, nhưng tôi dự định đây sẽ là một thử thách mới .

Các thách thức

Tạo một chương trình hoặc hàm, với một số nguyên dương hoàn toàn N, xuất hoặc trả về số lượng ước của nó, bao gồm 1 và N.

Dữ liệu vào: Một số nguyên> 0. Bạn có thể giả sử rằng số đó có thể được biểu thị bằng loại số gốc của ngôn ngữ của bạn.

Đầu ra: Số ước số nguyên dương mà nó có, bao gồm 1 và chính số đó.

Đệ trình sẽ được tính bằng byte . Bạn có thể thấy trang web này tiện dụng, mặc dù bạn có thể sử dụng bất kỳ phương pháp hợp lý nào để tạo số byte của mình.

Đây là , vì vậy điểm thấp nhất sẽ thắng!

Chỉnh sửa: Có vẻ như câu trả lời Pyth 5 byte của FryAmTheEggman là người chiến thắng! Hãy gửi câu trả lời mới, mặc dù; nếu bạn có thể nhận được một cái gì đó ngắn hơn, tôi sẽ thay đổi câu trả lời được chấp nhận.

Các trường hợp thử nghiệm

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

Bảng xếp hạng

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

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

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ phiên dịch), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

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

Bạn cũng có thể đặt tên ngôn ngữ thành một liên kết mà sau đó sẽ hiển thị trong đoạn trích bảng xếp hạng:

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

Câu trả lời:


19

Bình thường, 5

l{yPQ

Sử dụng hoạt động tập hợp con trên các yếu tố chính của đầu vào, sau đó chỉ giữ các danh sách duy nhất của các yếu tố và trả về số này.

Phòng thử nghiệm

Giải trình

Sử dụng 25 làm ví dụ, để danh sách tập hợp con không quá dài

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

Hấp dẫn. Cách tiếp cận tốt đẹp
Cyoce

14

C ++ C, 43 57 56 46 43 byte

Về đề xuất của Martin Büttner:

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

1
Đợi đã, thay vào đó, hãy đếm cả hai người xuống, trong 43:i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Martin Ender

@ MartinBüttner Wow người đàn ông wow. Nghiêm túc! _ / \ _
Sahil Arora

1
Đẹp! : ~)!
sweerpotato

11

LabVIEW, 4938 byte

Chà, nó rõ ràng không phù hợp với môn đánh gôn nhưng dù sao đi nữa, vì vậy bài đăng đầu tiên của tôi và lolz ở đây đi. nhập mô tả hình ảnh ở đây


Chào mừng bạn đến với Câu đố lập trình và Code Golf! Làm thế nào bạn ghi được điểm này, nếu bạn không phiền tôi hỏi? Tôi không thể tìm thấy bất kỳ tiền lệ nào trên Meta.
bkul

tôi đã lưu nó và lấy kích thước của nó
Eumel

Và nó là 4.938 byte? Không phải kilobyte chẳng hạn?
bkul

để có độ chính xác, tôi lấy số byte không phải là số kb
Eumel

4
@bkul Tôi nghĩ rằng sự nhầm lẫn là do ., điều mà tôi khá chắc chắn có nghĩa là một dấu phân cách, không phải là dấu thập phân (như thường thấy trong một số ngôn ngữ).
Martin Ender

10

Haskell, 28 byte

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

Mẹo ở đây là kiểm tra xem phần còn lại có đang 0sử dụng chức năng chỉ báo hay không 0^.

0^0 = 1
0^_ = 0

Điều này hoạt động bởi vì bất kỳ công suất dương nào của 0 là 0, trong khi 0 ^ 0 là kết hợp của sản phẩm trống của 1.

So sánh điều này với lọc

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

7

APL Dyalog , 7 6 byte

≢∘∪⊢∨⍳

Đây là một hàm không tên có thể được đặt tên và sau đó được sử dụng lại cho mỗi ¨trường hợp thử nghiệm ( ) như sau:

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

Giải trình:

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

Đếm số duy nhất của GCD của chính nó và từng số nguyên - cho đến khi .

Cảm ơn ngn vì đã tiết kiệm một byte.


Phiên bản cũ: +/0=⍳|⊢

Đây là cách nó hoạt động:

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

⍳|⊢Đối số phân chia 1-qua-đối số
0=Boolean nếu 0 bằng với phần còn lại chia
+/Sum của boolean, tức là đếm các đối số.


6

Python 2, 37 byte

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

Một hàm đệ quy. Các đầu vào tùy chọn itrong ước số đang được thử nghiệm. Biểu thức (n%i<1)kiểm tra tính chia hết, với True(bằng1 ) cho các ước. Kết quả được thêm vào biểu thức recusive cho i+1. Khi i==nđạt được, phân chia số nguyên i/nước tính 1và giá trị đó được trả về làm trường hợp cơ sở, ntự nó là một ước số của n.


38:

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

Một chức năng ẩn danh. Kiểm tra tất cả các ước số có thể 1thông qua n. Điều này được chuyển lên từ 0thông qua n-1trong range(n)việc sử dụng -~, mà thêm 1. Tóm tắt các bool sử dụng thực tế là Python đối xử True/ Falsenhư1 / 0.


6

Võng mạc , 17 byte

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

Đầu vào trong unary , đầu ra ở dạng thập phân.

Hãy thử trực tuyến.

Khi được gọi với một regex duy nhất, Retina chỉ cần đếm các trận đấu. Bản thân regex phù hợp với một vị trí , trong đó số unary ở bên trái của nó là một ước của toàn bộ đầu vào. Tôi cũng đang sử dụng thực tế là các hình ảnh nhìn là nguyên tử, do đó tôi không cần sử dụng ^mỏ neo.

Cái nhìn đầu tiên chỉ đơn giản là nắm bắt toàn bộ tiền tố trong nhóm 1 . Điều này không bao giờ có thể thất bại, vì vậy sau khi nhìn, chúng ta biết đó là những gì trong nhóm 1 và nó sẽ không thay đổi nữa.

Nhìn sau đó kiểm tra xem chúng ta có thể đến cuối chuỗi hay không bằng cách lặp lại chuỗi đã bắt (ước số tiềm năng của chúng ta) 0 lần trở lên.


6

J, 10 byte

[:*/1+_&q:

Đây là một động từ không tên, đơn âm. Nó tính σ 0 (p k α k )∏ (α k + 1) .

Dùng thử trực tuyến với J.js .

Làm thế nào nó hoạt động

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

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

Tôi không nghĩ q:là được phép vì nó giải quyết được một phần thiết yếu của thử thách. Làm thế nào về chỉ[:+/0=]|~1+i.
FUZxxl

Đó sẽ là một bản sao của câu trả lời này . Ngoài ra, mặc định không bị cấm theo mặc định và thách thức dường như không đề cập đến chúng.
Dennis

Các nội dung thực hiện tất cả / gần như tất cả các công việc của một thử thách thường bị cấm nhưng tôi có thể làm theo lý do của bạn q: .
FUZxxl

1
Họ không phải. Tôi ước họ như vậy, nhưng họ thì không.
Dennis

Hrmpf hrmpf mà hút một chút.
FUZxxl

6

Golfscript, 19 18 17 13 byte

Cảm ơn Martin Büttner .

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

Làm thế nào nó hoạt động

~               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

Cũng thế

Từ @Peter Taylor , cũng trong 13 byte.

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

Làm thế nào nó hoạt động

~               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

Với cùng độ dài bạn cũng có thể có~:X,{)X\%!},,
Peter Taylor

4

J, 13 12 11 byte

Golf đầu tiên của tôi ở J. Tôi vẫn đang học nó.

Đã lưu một byte nhờ Dennis.

Đã lưu thêm một byte nhờ Randomra.

1+/@,0=i.|]

Giải trình:

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 byte

Hãy bắt đầu bữa tiệc thôi!

(F(x)(_(d/ x

Điều này sử dụng chức năng tích hợp d/. Đây là phiên bản không có tích hợp (27 byte):

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

Giải trình:

(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 byte

ri_,:)f%0e=

Kiểm tra nó ở đây.

Giải trình

CJam không tích hợp sẵn cho việc này, vì vậy chúng tôi đang thực hiện phân chia thử nghiệm.

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.

Tiền thưởng

Đây là một giải pháp thú vị ở mức 12 byte (mà tôi nghi ngờ có thể là ngắn nhất trong một ngôn ngữ như J):

ri_)2m*::*e=

Kết quả bằng số lần nxuất hiện trong n x nbảng nhân:

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 byte

Thực hiện k mod ncho mọi k = 1,...,n, sau đó thực hiện not(biến mọi giá trị khác thành 0 và từ 0 đến 1) và tổng hợp tất cả các giá trị đó.

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

Đây cũng là cách tiếp cận của tôi!
Luis Mendo

Điều thú vị là đây là cùng chiều dài length(divisors(n)).
Tích lũy

@Acccumulation bạn vẫn cần thêm một @(n)để biến nó thành một bản khai hợp lệ
flawr

3

Julia, 20 byte

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

Đây là một hàm ẩn danh hoạt động như sau: Đối với mỗi số nguyên từ 1 đến đầu vào, hãy kiểm tra xem modulo đầu vào có phải là số nguyên không. Nếu vậy, giá trị sẽ true, nếu không false. Chúng tôi tổng hợp các booleans được đặt ngầm cho các số nguyên, thu được số lượng ước.


Một giải pháp mát hơn (mặc dù cũng lâu hơn nhiều), bao gồm vì mục đích hoàn chỉnh, là

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

Điều này nhận được hệ số chính tắc của n, tức là \prod_{i=1}^k p_i^e_i, và tính toán hàm chia là τ(n) = \prod_{i=1}^k e_i + 1.




2

Ruby, 27 byte

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

Chạy mẫu:

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

2

Octave, 21 20 byte

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

Tôi thích nnz, sử dụng tuyệt vời ở đây =)
flawr

2

Regex (.NET), 33 byte

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

Giả sử đầu vào và đầu ra là đơn nhất, và đầu ra được lấy từ kết quả khớp chính của regex.

Phân tích regex:

  • .*$ Đặt con trỏ đến cuối chuỗi để chúng ta có toàn bộ đầu vào x theo một hướng.
  • (?<=^\2*(.+?(?>\2?))) khớp từ phải sang trái và kiểm tra ước số bằng cách lặp từ x đến 0.
    • (.+?(?>\2?)) là một "biến" bắt đầu từ 1 trong lần lặp đầu tiên và tiếp tục từ số trong lần lặp trước đó và các vòng lặp lên đến x.
    • ^\2* kiểm tra xem x có phải là bội của "biến" không.

Về cơ bản nó có cùng ý tưởng với câu trả lời của tôi Tính Phi (không phải Pi) . Chỉ có kiểm tra là khác nhau.

Kiểm tra regex tại RegexStorm .


2

Mê cung , 33 byte

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

Hãy thử trực tuyến.

Điều này thực hiện phân chia thử nghiệm. Tôi sẽ thêm một lời giải thích đầy đủ sau. Nó có thể không tối ưu, nhưng tôi gặp khó khăn khi nghĩ ra thứ gì đó ngắn hơn.


2

Perl 6 , 17 byte

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

sử dụng:

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 byte

Điều này có thể được chơi golf tốt hơn.

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

Chỉnh sửa 1: Tôi đã đúng. Loại bỏ các dấu ngoặc sau vòng lặp for.

Chỉnh sửa 2: Chơi gôn tới 40 byte nhờ vào thao tácMartin Büttner .

Chỉnh sửa 3: Lưu một byte bằng cách dựa vào hàm C trên câu trả lời.

Chỉnh sửa 4: Cảm ơn ן nɟuɐɯɹɐ oɯNeil , nhưng tôi không thể làm cho eval hoạt động được.

Chỉnh sửa 5: Quên loại bỏ eval.

Kiểm tra

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
Từ bỏ những thói quen tốt. Xóa vartừ khóa. Thêm lời khuyên trong Mẹo chơi gôn trong JavaScriptMẹo chơi gôn trong ECMAScript 6 .
manatwork

2
Đồng thời từ bỏ những thói quen xấu: khi bạn có một sự lựa chọn giữa ++ii++, hãy chọn cái trước (điều này không liên quan gì đến việc chơi golf). Cũng n%i<1nên lưu một byte.
Martin Ender

2
Chỉ được thử nghiệm ngắn gọn: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 Tại sao không 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
  • tạo một danh sách các số từ 1 đến x, đưa chúng vào đường ống |
  • lọc đường ống trên (x% item == 0), bằng cách ngầm định kết quả modulo dưới dạng boolean và sau đó đảo ngược nó bằng cách sử dụng các !ước số trở thành $ true và được phép thông qua; sử dụng bí danh dựng sẵn ?choWhere-Object
  • tập hợp lại ()và có .Countbao nhiêu mục đã qua bộ lọc

Rất độc đáo hack!
bkul


2

Taxi, 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.

Hãy thử trực tuyến!

Ung dung:

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.

Giải trình:

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

Công thức Excel, 42 28 byte

Chỉnh sửa: Tôi chỉ nhận ra rằng tôi không cần sử dụng INDIRECT , tiết kiệm 14 byte!

Sau đây nên được nhập dưới dạng công thức mảng ( Ctrl+ Shift+ Enter):

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

Trong đó N là số cần kiểm tra.

Ví dụ:

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

Giải trình:

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

Toán học, 16 byte

Length@*Divisors

Thành phần chức năng đơn giản của tích hợp.


1

Chồn 0,13 , 16 byte

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

Kiểm tra tất cả các trường hợp ở đây.

Giải trình

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.