Are they abundant, deficient or perfect?
Abundant numbers are numbers which are less than their proper divisor sum. For example
Deficient numbers are numbers which are greater than their proper divisor sum. For example,
Perfect numbers are numbers wich are equal to their proper divisor sum. For example,
You should take a positive integer
For example, if
[[12], [6], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15]]
This is code golf, so the shortest code in bytes wins
Test cases
49 -> [[12, 18, 20, 24, 30, 36, 40, 42, 48], [6, 28], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 29, 31, 32, 33, 34, 35, 37, 38, 39, 41, 43, 44, 45, 46, 47, 49]]
32 -> [[12, 18, 20, 24, 30], [6, 28], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 29, 31, 32]]
16 -> [[12], [6], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16]]
29 -> [[12, 18, 20, 24], [6, 28], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 29]]
23 -> [[12, 18, 20], [6], [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 21, 22, 23]]
[Husk], 10 bytes kSo±-ȯ …
4y ago
Vyxal `o`, 16 bytes …
4y ago
Vyxal, 30 28 25 bytes Saved …
4y ago
[APL (Dyalog Unicode)], 21 byt …
4y ago
BQN, 21 bytesSBCS ``` (¬·× …
4y ago
[Jelly], 6 bytes ÆṣṠ)Ġ …
4y ago
Japt, 11 bytes Could be 2 b …
4y ago
[Python 3], 235 185 141 118 by …
4y ago
8 answers
You are accessing this answer with a direct link, so it's being shown above all other answers regardless of its score. You can return to the normal view.
Jelly, 6 bytes
_ÆṣṠ)Ġ
In order of abundant, perfect, deficient.
_ÆṣṠ)Ġ Main Link
) For each from 1 to N
_ Subtract
Æṣ The proper divisor sum
Ṡ Sign of the difference
Ġ Group equal elements' indices
0 comment threads
Husk, 10 bytes
kSo±-ȯΣhḊḣ
keyon
is very nice here, but it's still a bit too long, sadly.
0 comment threads
Vyxal, 30 28 25 bytes
Saved 1 4 bytes thanks to Aaron Miller
ƛ∆K-±";£kɽƛ¥D„£_'t¥=;vṪ,£
A rather pitiful answer, but hey, it works. Gives deficient numbers, then perfect numbers, then abundant numbers.
ƛD∆K-±$";£
ƛ ; #For every number in the range [1,n]
D #Triplicate it
∆K #Sum its proper divisors
- #Subtract the original number from that
± #Get the sign of that (-1, 0, or 1)
$" #Make a 2-element list [sign, orig_num]
#Sort it
£ #Store it in the register
For an input of 12, this gives ⟨⟨1|1⟩|⟨1|2⟩|⟨1|3⟩|⟨1|4⟩|⟨1|5⟩|⟨0|6⟩|⟨1|7⟩|⟨1|8⟩|⟨1|9⟩|⟨1|10⟩|⟨1|11⟩|⟨-1|12⟩⟩
(0 means perfect, -1 means deficient, 1 means abundant). The explanation's old.
kɽƛ¥D„£_'h¥=;ƛḢ;,£
kɽ #Push [-1, 0, 1]
ƛ #For every number in that range
¥D #Make three copies of the register (the list above)
„ #Rotate stack so -1, 0, or 1 is on top
£_ #Store to register temporarily
' ; #Filter the list from above
h #Take the head of each
¥= #Keep if it equals the current element from [-1,0,1]
ƛḢ; #Drop the sign from each
, #Print this list of numbers
£ #Store original list to register again
0 comment threads
APL (Dyalog Unicode), 21 bytes
{×⍵-+/∪⍵∨¯1↓⍳⍵}¨∘⍳⊢⌸⍳
Returns a matrix (padded with zeroes) where the first row is deficient numbers, the second is perfect numbers, and the third is abundant numbers.
{×⍵-+/∪⍵∨¯1↓⍳⍵}¨∘⍳⊢⌸⍳
⍳ ⍝ Make a range [1, input]
¨ ⍝ For every ⍵ in that range
⍳⍵ ⍝ Make a range [1, ⍵]
¯1↓ ⍝ Drop the last number (⍵)
⍵∨ ⍝ GCD all numbers in that range with ⍵
∪ ⍝ The previous step gave proper divisors, this removes duplicates
+/ ⍝ Sum proper divisors
⍵- ⍝ Subtract from ⍵
× ⍝ Get the sign
⍳ ⍝ Make another range [1, input]
⌸ ⍝ Group by the signs of the differences we got earlier
0 comment threads
Vyxal o
, 16 bytes
'∆K=;,'∆K<;,'∆K>
Checks all numbers to see if they are perfect, then prints the ones that are, then does the same for abundant and deficient numbers.
Explanation:
# Implicit input 'n'
' ;, # Print any numbers in [1..n] for which the following is true:
∆K= # The number = the sum of its proper divisors
' ;, # Print any numbers in [1..n] for which the following is true:
∆K< # The number < the sum of its proper divisors
' # Push a list of numbers in [1..n] for which the following is true:
∆K> # The number > the sum of its proper divisors
# 'o' flag - Implicit output regardless of having printed
0 comment threads
BQN, 21 bytesSBCS
(¬·×-+´·/0=↕⊸|)¨⊸⊔1+↕
Mostly one big train used to find the appropriate group for each number, to be used with Group (⊔
). The combining functions in a train normally have two arguments, but Nothing (·
) can be used on the left to not pass a left argument. See also Indices (/
), and note that Modulus (|
) is backwards relative to C-like %
.
(¬·×-+´·/0=↕⊸|)¨⊸⊔1+↕
1+↕ # One plus range: 1…𝕩
( )¨ # On each of these (n):
↕ # Range 0…n-1
⊸| # Remainder dividing into n
0= # Equals zero
·/ # Indices where true: proper divisors
-+´ # Sum with initial value -n
·× # Sign
¬ # One minus that
⊸⊔ # Use to group 1+↕
There might be a better solution based on taking the modulus on all pairs instead of one at a time. (¬·×-+˝(⊣×≠>|)⌜˜)⊸⊔1+↕
is close at 22 bytes.
0 comment threads
Japt, 11 bytes
Could be 2 bytes shorter if not for a bug in Japt when trying to get the proper divisors of a number.
õ üÈgXnXâ x
õ üÈgXnXâ x :Implicit input of integer U
õ :Range [0,U]
ü :Group & sort
È :By passing each X through the following function
g : Sign of difference of X and
Xn : Subtract X from
Xâ : All divisors of X
x : Reduced by addition
0 comment threads
Python 3, 235 185 141 118 bytes
a=[[],[],[]]
n=1;exec("d=sum(i for i in range(1,n)if n%i<1)-n;a[[[1,2][d<0],0][d>0]]+=n,;n+=1;"*int(input()))
print(a)
Golfed 50 bytes by @caird coinheringaahing. Golfed 44 bytes by @bastolki. Golfed another 23 bytes by @bastolki.
1 comment thread