นับตัวหารของตัวเลข


26

บทนำ

นี่เป็นความท้าทายที่ง่ายมากเพียงนับตัวหารของตัวเลข เราเคยมีความท้าทายที่คล้ายกัน แต่มีความซับซ้อนมากขึ้นก่อนหน้านี้ แต่ฉันตั้งใจที่จะเป็นระดับเริ่มต้น

ความท้าทาย

สร้างโปรแกรมหรือฟังก์ชั่นที่ได้รับหนึ่งจำนวนเต็มบวกอย่างเคร่งครัดNผลผลิตหรือผลตอบแทนหลายวิธีหารก็มีรวมทั้งที่ 1 Nและ

อินพุต: หนึ่งจำนวนเต็ม> 0 คุณอาจคิดว่าตัวเลขสามารถแสดงในรูปแบบของตัวเลขในภาษาของคุณ

เอาท์พุท: จำนวนตัวหารจำนวนเต็มบวกที่มีรวมถึง 1 และจำนวนตัวเอง

ส่งจะได้รับคะแนนในไบต์ คุณอาจพบว่าเว็บไซต์นี้มีประโยชน์ แต่คุณอาจใช้วิธีการที่เหมาะสมในการสร้างจำนวนไบต์ของคุณ

นี่คือดังนั้นคะแนนต่ำสุดชนะ!

แก้ไข:ดูเหมือนคำตอบ Pyth แบบ 5 ไบต์ของ FryAmTheEggman คือผู้ชนะ! แต่อย่าลังเลที่จะส่งคำตอบใหม่ หากคุณทำให้บางสิ่งสั้นลงฉันจะเปลี่ยนคำตอบที่ยอมรับ

กรณีทดสอบ

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

ลีดเดอร์

นี่คือ Stack Snippet เพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:

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

คำตอบ:


19

Pyth, 5

l{yPQ

ใช้การดำเนินการชุดย่อยบนปัจจัยหลักของอินพุตจากนั้นเก็บเฉพาะรายการปัจจัยเฉพาะและส่งกลับจำนวนนี้

ชุดทดสอบ

คำอธิบาย

ใช้ 25 เป็นตัวอย่างเพื่อให้รายการชุดย่อยไม่ยาวมาก

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

มโนหร วิธีการที่ดี
Cyoce

14

C ++ C, 43 57 56 46 43 ไบต์

ตามคำแนะนำของ Martin Büttner:

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

1
เดี๋ยวก่อนลองมานับทั้งคู่กันแทนสำหรับ 43:i,c;f(n){for(i=c=n;i;n%i--&&--c);return c;}
Martin Ender

@ MartinBüttnerชายว้าวว้าว อย่างจริงจัง! _ / \ _
Sahil Arora

1
สวย! : ~)!
sweerpotato

11

LabVIEW, 4938 ไบต์

เห็นได้ชัดว่ามันไม่เหมาะสำหรับรหัสกอล์ฟ แต่อย่างใดดังนั้นสำหรับโพสต์แรกของฉันและ lolz ที่นี่ไป enter image description here


ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ! คุณให้คะแนนสิ่งนี้ได้อย่างไรถ้าคุณไม่รังเกียจที่จะถามฉัน ฉันไม่พบแบบอย่างบน Meta
bkul

ฉันบันทึกแล้วใช้ขนาดของมัน
Eumel

และมันคือ 4.938 ไบต์? ไม่ใช่กิโลไบต์ใช่ไหม
bkul

เพื่อความถูกต้องผมเอานับไบต์ไม่นับกิโล
Eumel

4
@bul ฉันคิดว่าความสับสนนั้นเกิดจากการ.ที่ฉันค่อนข้างแน่ใจว่ามีความหมายว่าเป็นตัวคั่นหลักพันไม่ใช่จุดทศนิยม (ตามปกติในบางภาษา)
Martin Ender

10

Haskell, 28 ไบต์

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

เคล็ดลับที่นี่คือการทดสอบว่าที่เหลือจะใช้ฟังก์ชั่นตัวบ่งชี้00^

0^0 = 1
0^_ = 0

ใช้งานได้เพราะพลังบวกใด ๆ ของ 0 คือ 0 ในขณะที่ 0 ^ 0 เป็นผลรวมเชิงลบของ 1

เปรียบเทียบสิ่งนี้กับการกรอง

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

7

Dyalog APL , 7 6 ไบต์

≢∘∪⊢∨⍳

มันเป็นฟังก์ชั่นที่ไม่มีชื่อที่สามารถตั้งชื่อแล้วนำกลับมาใช้ใหม่สำหรับแต่ละ¨กรณีทดสอบ( ) ดังนี้:

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

คำอธิบาย:

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

นับที่ไม่ซ้ำกันของ GCDของตัวเองและแต่ละจำนวนเต็มจนกว่าและแต่ละจำนวนเต็มจนกว่า

ขอบคุณ ngn สำหรับการบันทึกไบต์


เวอร์ชั่นเก่า: +/0=⍳|⊢

นี่คือวิธีการทำงาน:

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

⍳|⊢1-through-argument อาร์กิวเมนต์
0=บูลีนส่วนที่เหลือถ้า 0 เท่ากับส่วนที่เหลือ
+/ผลรวมของบูลีนเช่นจำนวนของคน


6

Python 2, 37 ไบต์

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

ฟังก์ชั่นวนซ้ำ อินพุตเพิ่มเติมiในตัวหารที่กำลังถูกทดสอบ นิพจน์(n%i<1)ทดสอบการหารด้วยTrue(ซึ่งเท่ากับ1) สำหรับตัวหาร ผลที่ได้จะถูกเพิ่มในการแสดงออก recusive i+1สำหรับ เมื่อi==nถึงจำนวนเต็มพื้นส่วนi/nประเมิน1และความคุ้มค่าที่ถูกส่งกลับเป็นกรณีฐานการบัญชีสำหรับตัวเองเป็นตัวหารของnn


38:

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

ฟังก์ชั่นที่ไม่ระบุชื่อ การทดสอบตัวหารเป็นไปได้ทั้งหมดผ่าน1 nนี้จะเลื่อนขึ้นมาจากการ0ผ่านn-1ในrange(n)การใช้ซึ่งจะเพิ่ม-~ 1ข้อสรุป bools ใช้ความจริงที่ว่างูหลามถือว่าTrue/ Falseเป็น/10


6

เรติน่า 17 ไบต์

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

อินพุตเป็น unaryเอาต์พุตเป็นทศนิยม

ลองออนไลน์

เมื่อเรียกใช้ด้วย regex เพียงครั้งเดียว Retina ก็นับการแข่งขัน regex นั้นจับคู่ตำแหน่งโดยที่หมายเลขยูนารีทางด้านซ้ายของมันเป็นตัวหารของอินพุตทั้งหมด ฉันใช้ประโยชน์จากความจริงที่ว่า lookarounds เป็นอะตอมดังนั้นฉันจึงไม่จำเป็นต้องใช้^สมอ

lookbehinds แรกเพียงแค่จับคำนำหน้าทั้งหมดในกลุ่ม 1แรกเพียงแค่จับคำนำหน้าทั้งหมดในกลุ่ม สิ่งนี้ไม่เคยล้มเหลวดังนั้นหลังจากที่เรารู้ว่านั่นคือสิ่งที่อยู่ในกลุ่ม 1 และจะไม่เปลี่ยนแปลงอีกต่อไป

จากนั้น lookahead จะตรวจสอบว่าเราสามารถไปถึงจุดสิ้นสุดของสตริงโดยการทำซ้ำสตริงที่ถูกจับ (ตัวหารที่เป็นไปได้ของเรา) 0 หรือมากกว่านั้น


6

J, 10 ไบต์

[:*/1+_&q:

นี่เป็นคำกริยาที่ไม่มีชื่อ มันจะคำนวณσ 0 (Πp k α k )เป็นΠ (α k + 1)

ลองมันออนไลน์กับJ.js

มันทำงานอย่างไร

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

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

ฉันไม่คิดว่าq:จะได้รับอนุญาตเพราะมันเป็นส่วนสำคัญของความท้าทาย วิธีการเกี่ยวกับเพียง[:+/0=]|~1+i.
FUZxxl

ที่จะเป็นซ้ำของคำตอบนี้ นอกจากนี้บิวด์อินจะไม่ถูกห้ามตามค่าเริ่มต้นและความท้าทายก็ไม่ได้พูดถึง
เดนนิส

Buildins ที่ทำงานทั้งหมด / เกือบทั้งหมดของการท้าทายนั้นเป็นสิ่งต้องห้าม แต่ฉันสามารถติดตามเหตุผลของคุณq: ได้
FUZxxl

1
พวกเขาจะไม่. ฉันหวังว่าพวกเขาเป็น แต่พวกเขาไม่ได้
Dennis

Hrmpf hrmpf ที่ดูดนิดหน่อย
FUZxxl

6

Golfscript, 19 18 17 13 ไบต์

ด้วยความขอบคุณให้กับมาร์ตินBüttner

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

มันทำงานอย่างไร

~               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

ด้วย

จาก@Peter Taylorยังมีขนาด 13 ไบต์

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

มันทำงานอย่างไร

~               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

สำหรับความยาวเท่ากันคุณอาจมี~:X,{)X\%!},,
Peter Taylor

4

J, 13 12 11 ไบต์

กอล์ฟครั้งแรกของฉันใน J. ฉันยังคงเรียนรู้มัน

บันทึกเป็นไบต์ขอบคุณ Dennis

บันทึกอีกหนึ่งไบต์ต้องขอบคุณ randomra

1+/@,0=i.|]

คำอธิบาย:

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 ไบต์

มาเริ่มปาร์ตี้กันเถอะ!

(F(x)(_(d/ x

ใช้ฟังก์ชันในd/ตัว นี่คือรุ่นที่ไม่มีในตัว (27 ไบต์):

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

คำอธิบาย:

(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 ไบต์

ri_,:)f%0e=

ทดสอบที่นี่

คำอธิบาย

CJam ไม่มีการติดตั้งภายในเครื่องดังนั้นเราจึงทำการทดลองใช้งาน

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.

โบนัส

นี่เป็นวิธีแก้ปัญหาที่น่าสนใจที่ 12 ไบต์ (ซึ่งฉันคิดว่าอาจสั้นที่สุดในภาษาอย่าง J):

ri_)2m*::*e=

ผลลัพธ์จะเท่ากับจำนวนครั้งที่nปรากฏในn x 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 ไบต์

ดำเนินการk mod nสำหรับทุก ๆk = 1,...,nจากนั้นดำเนินการnot(ซึ่งจะเปลี่ยนทุกค่าที่ไม่ใช่ศูนย์และทุกศูนย์ถึง 1) และสรุปค่าทั้งหมดเหล่านั้น

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

นี่จะเป็นแนวทางของฉันเช่นกัน!
Luis Mendo

น่าสนใจว่ามันมีความยาวเท่าlength(divisors(n))กัน
สะสม

@ การคำนวณคุณจะต้องเพิ่ม a @(n)เพื่อให้เป็น submisison ที่ถูกต้อง
flawr

3

จูเลีย 20 ไบต์

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

นี่เป็นฟังก์ชั่นนิรนามที่ทำงานดังต่อไปนี้: สำหรับแต่ละจำนวนเต็มตั้งแต่ 1 ถึงอินพุตให้ทดสอบว่าอินพุตโมดูโลที่เป็นจำนวนเต็มนั้นเป็นศูนย์หรือไม่ ถ้าเป็นเช่นนั้นค่าที่จะเป็นอย่างอื่นtrue falseเราสรุปผลรวมของ booleans ซึ่งถูกส่งไปยังจำนวนเต็มโดยปริยายทำให้จำนวนตัวหาร


วิธีแก้ปัญหาที่เย็นกว่า (แม้ว่าจะนานกว่านั้น) รวมอยู่ในนั้นก็เพื่อความสมบูรณ์

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

นี้ได้รับตีนเป็ดยอมรับnเช่นและฟังก์ชั่นคำนวณตัวหารเป็น\prod_{i=1}^k p_i^e_iτ(n) = \prod_{i=1}^k e_i + 1






2

Regex (.NET) 33 ไบต์

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

สมมติว่าอินพุตและเอาต์พุตอยู่ในสภาวะเดียวกันและเอาต์พุตถูกนำมาจากการจับคู่หลักของ regex

แยกย่อย Regex:

  • .*$ ส่งตัวชี้ไปยังจุดสิ้นสุดของสตริงเพื่อให้เรามีอินพุตทั้งหมด x ในทิศทางเดียว
  • (?<=^\2*(.+?(?>\2?))) จับคู่จากขวาไปซ้ายและตรวจสอบตัวหารโดยการวนซ้ำจาก x เป็น 0
    • (.+?(?>\2?)) is a "variable" which starts from 1 in the first iteration and continues from the number in previous iteration and loops up to x.
    • ^\2* checks whether x is a multiple of "variable".

It basically has the same idea as my answer to Calculate Phi (not Pi). Only the check is different.

Test the regex at RegexStorm.




2

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

This can probably be golfed better.

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

Edit 1: I was right. Removed the braces after the for loop.

Edit 2: Golfed to 40 bytes with thanks to manatwork and Martin Büttner.

Edit 3: Saving a byte by basing the function on the C answer above.

Edit 4: Thanks to ןnɟuɐɯɹɐןoɯ and Neil, but I can't get the eval to work.

Edit 5: Forgot to remove the eval.

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
Give up the good habits. Remove var keywords. More tips in Tips for golfing in JavaScript and Tips for Golfing in ECMAScript 6.
manatwork

2
Also give up the bad habits: when you've got a choice between ++i and i++, choose the former (this has nothing to do with golfing). Also n%i<1 should save a byte.
Martin Ender

2
Only briefly tested: 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 Why not n%++i||++d?
Neil

2

PowerShell, 34 bytes

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

e.g. 

PS C:\temp> .\divisors-of-x.ps1 97
2
  • create a list of numbers from 1 to x, feed them into the pipeline |
  • filter the pipeline on (x % item == 0), by implicitly casting the modulo result as a boolean and then inverting it using ! so divisors become $true and are allowed through; using the builtin alias ? for Where-Object
  • gather up () and .Count how many items got through the filter

Very nicely hacked!
bkul


2

Taxi, 2143 bytes

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.

Try it online!

Ungolfed:

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.

Explanation:

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

Excel Formula, 42 28 bytes

Edit: I just realised I do not need to use INDIRECT, saving 14 bytes!

The following should be entered as an array formula (Ctrl+Shift+Enter):

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

Where N is the number to test.

Examples:

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

Explanation:

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 bytes

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

Check all cases here.

Explanation

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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.