Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users

Dashboard
Notifications
Mark all as read
Challenges

Are they abundant, deficient or perfect?

+5
−0

Abundant numbers are numbers which are less than their proper divisor sum. For example $18$ is abundant as $1 + 2 + 3 + 6 + 9 = 21 > 18$

Deficient numbers are numbers which are greater than their proper divisor sum. For example, $15$ is deficient as $1 + 3 + 5 = 9 < 15$

Perfect numbers are numbers wich are equal to their proper divisor sum. For example, $6$ is perfect as $1 + 2 + 3 = 6$.

You should take a positive integer $x \ge 12$ and output three lists. The lists should contain, in any order, the abundant numbers less than or equal to $x$, the deficient numbers less than or equal to $x$ and the perfect numbers less than or equal to $x$.

For example, if $x = 15$, the output could look like

[[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]]
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

General comments (6 comments)

8 answers

+4
−0

APL (Dyalog Unicode), 21 bytes

{×⍵-+/∪⍵∨¯1↓⍳⍵}¨∘⍳⊢⌸⍳

Try it online!

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
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+4
−0

Vyxal o, 16 bytes

'∆K=;,'∆K<;,'∆K>

Try it Online!

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
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+4
−0

Husk, 10 bytes

kSo±-ȯΣhḊḣ

Try it online!

keyon is very nice here, but it's still a bit too long, sadly.

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+3
−0

Vyxal, 30 28 25 bytes

Saved 1 4 bytes thanks to Aaron Miller

ƛ∆K-±";£kɽƛ¥D„£_'t¥=;vṪ,£

Try it Online!

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
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+3
−0

Jelly, 6 bytes

_ÆṣṠ)Ġ

Try it online!

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
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+2
−0

BQN, 21 bytesSBCS

(¬·×-+´·/0=↕⊸|)¨⊸⊔1+↕

Run online!

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.

Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+2
−0

Japt, 11 bytes

õ üÈgXnXâ x

Try it

õ üÈ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
Why does this post require moderator attention?
You might want to add some details to your flag.

0 comment threads

+2
−0

Python 3, 235 185 bytes

b=[1];c=[];a=[]
for n in range(2,int(input())+1):
	d=1
	for i in range(2,int(n**.5)+1):
		if n%i<1:
			d+=i;j=n//i
			if j!=i:d+=j
	if d>n:a+=n,
	elif d<n:b+=n,
	else:c+=n,
print(a,c,b)

Try it online!

-50 by caird coinheringaahing

Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

General comments (1 comment)

Sign up to answer this question »

This community is part of the Codidact network. We have other communities too — take a look!

You can also join us in chat!

Want to advertise this community? Use our templates!