# Sum $\text{Square}^2$

Let $n=42$ (Input)

Then divisors are : 1, 2, 3, 6, 7, 14, 21, 42

Squaring each divisor : 1, 4, 9, 36, 49, 196, 441, 1764

Since $50\times 50=2500$ therefore we return a truthy value. If it is not a perfect square, return a falsy value.

# Examples :

42  ---> true
1   ---> true
246 ---> true
10  ---> false
16  ---> false


This is so shortest code in bytes for each language wins

Thanks to @Arnauld for pointing out the sequence : A046655

• Can the program output 0 if the result is true, and any other number if the result is false? – JosiahRyanW Sep 11 '18 at 0:25

# R, 39 37 bytes

!sum((y=1:(x=scan()))[!x%%y]^2)^.5%%1


Try it online!

Uses the classic "test if perfect square" approach, taking the non-integral part of the square root S^.5%%1 and taking the logical negation of it, as it maps zero (perfect square) to TRUE and nonzero to FALSE.

Thanks to Robert S for saving a couple of bytes!

• Could you use scan() to save a few bytes? – Robert S. Sep 10 '18 at 18:31
• @RobertS. doh! I've been doing too much "real" R coding lately! – Giuseppe Sep 10 '18 at 18:33

# JavaScript (ES7),  46 44  42 bytes

Saved 1 byte thanks to @Hedi

n=>!((g=d=>d&&d*d*!(n%d)+g(d-1))(n)**.5%1)


Try it online!

## Commented

n =>             // n = input
!(             // we will eventually convert the result to a Boolean
(g = d =>    // g is a recursive function taking the current divisor d
d &&       //   if d is equal to 0, stop recursion
d * d      //   otherwise, compute d²
* !(n % d) //   add it to the result if d is a divisor of n
+ g(d - 1) //   add the result of a recursive call with the next divisor
)(n)         // initial call to g with d = n
** .5 % 1    // test whether the output of g is a perfect square
)              // return true if it is or false otherwise

• You can save one byte with d going from n to 0 instead of 2 to n like this: n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1) – Hedi Sep 11 '18 at 22:17

# 05AB1E, 5 bytes

ÑnOÅ²


Try it online!

### How?

ÑnOÅ²
Ñ     - divisors
n    - square
O   - sum
Å² - is square?


# Shakespeare Programming Language, 434428 415 bytes

,.Ajax,.Ford,.Puck,.Act I:.Scene I:.[Enter Ajax and Ford]Ford:Listen tothy.Scene V:.Ajax:You be the sum ofyou a cat.Ford:Is the remainder of the quotient betweenyou I worse a cat?[Exit Ajax][Enter Puck]Ford:If soyou be the sum ofyou the square ofI.[Exit Puck][Enter Ajax]Ford:Be you nicer I?If solet usScene V.[Exit Ford][Enter Puck]Puck:Is the square ofthe square root ofI worse I?You zero.If notyou cat.Open heart


Try it online!

-13 bytes thanks to Jo King!

Outputs 1 for true result, outputs 0 for false result.

• 415 bytes with a third character – Jo King Sep 11 '18 at 1:39

# Python 2, 55 bytes

lambda n:sum(i*i*(n%i<1)for i in range(1,n+1))**.5%1==0


Try it online!

# Neim, 5 bytes

𝐅ᛦ𝐬q𝕚


Explanation:

𝐅      Factors
ᛦ      Squared
𝐬     Summed
𝕚   is in?
q    infinite list of square numbers


Try it online!

# C (gcc), 676360 59 bytes

-1 bytes thanks to @JonathanFrech

i,s;f(n){for(s=i=0;i++<n;)s+=n%i?0:i*i;n=sqrt(s);n=n*n==s;}


Try it online!

• Can ++i<=n be i++<n? – Jonathan Frech Sep 10 '18 at 22:01
• @JonathanFrech that seems to work, thanks. – cleblanc Sep 11 '18 at 13:36

# Brachylog, 12 8 bytes

f^₂ᵐ+~^₂


-4 bytes thanks to Fatelize cause i didn't realize brachylog has a factors functions

# explanation

f^₂ᵐ+~^₂            #   full code
f                   #       get divisors
^₂ᵐ                #           square each one
~^₂           #       is the result of squaring a number


Try it online!

• f^₂ᵐ is 4 bytes shorter than ḋ{⊇×^₂}ᵘ – Fatalize Sep 12 '18 at 7:14

# MathGolf, 5 4 bytes

─²Σ°


Try it online!

## Explanation

─     Get all divisors as list (implicit input)
²    Square (implicit map)
Σ   Sum
°  Is perfect square?


Very similar to other answers, compared to 05AB1E I gain one byte for my "is perfect square" operator.

• You know, something called "MathGolf" really should have a norm operator... that would have gotten you down to 3 bytes :) – Misha Lavrov Oct 6 '18 at 16:26
• @MishaLavrov that's not a bad idea! Right now I don't have as many vector operations as I'd like, one of these days I'll change that – maxb Oct 6 '18 at 19:55

# MATL, 9 bytes

Z\UsX^tk=


Try it online!

As simple as it gets

Z\ % Divisors of (implicit) input
U  % Square
s  % Sum
X^ % Square root
t  % Duplicate this value
k= % Is it equal to its rounded value?


# PowerShell, 68 56 bytes

param($n)1..$n|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}  Try it online! Seems long ... -12 bytes thanks to mazzy Does exactly what it says on the tin. Takes the range from 1 to input $n and multiplies out the square $_*$_ times whether it's a divisor or not !($n%$_). This makes divisors equal to a nonzero number and non-divisors equal to zero. We then take the sum of them with our accumulator $a. Next, we loop again from 1 up to $a and pull out those numbers where |?{...} it squared is -equal to $a. That is left on the pipeline and output is implicit. Outputs a positive integer for truthy, and nothing for falsey. • the rare case where $args[0] is shorter :) 1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a} – mazzy Sep 10 '18 at 19:00
• @mazzy It's not, because you need $n inside the loop for !($n%$_). But, your rewrite of the sum saved 12 bytes, so thanks! – AdmBorkBork Sep 10 '18 at 19:11 • what a shame. so I would like to find a case where $args[0] is shorter :) – mazzy Sep 10 '18 at 19:18

# Japt, 119 7 bytes

-2 bytes from @Giuseppe and another -2 from @Shaggy

â x²¬v1


â x²¬v1             Full program. Implicity input U
â                   get all integer divisors of U
x²                square each element and sum
¬               square root result
v1           return true if divisible by 1


Try it online!

# APL (Dyalog Unicode), 18 bytes

0=1|.5*⍨2+.*⍨∘∪⍳∨⊢


Try it online!

Anonymous lambda. Returns 1 for truthy and 0 for falsy (test cases in TIO are prettified).

Shoutouts to @H.PWiz for 4 bytes!

### How:

0=1|.5*⍨2+.*⍨∘∪⍳∨⊢   ⍝ Main function, argument ⍵ → 42
∨⊢   ⍝ Greatest common divisor (∨) between ⍵ (⊢)
⍳      ⍝ and the range (⍳) [1..⍵]
∪      ⍝ Get the unique items (all the divisors of 42; 1 2 3 6 7 14 21 42)
∘        ⍝ Then
⍨         ⍝ Swap arguments of
2+.*          ⍝ dot product (.) of sum (+) and power (*) between the list and 2
⍝ (sums the result of each element in the vector squared)
⍨              ⍝ Use the result vector as base
.5*               ⍝ Take the square root
1|                  ⍝ Modulo 1
0=                    ⍝ Equals 0

• Can you do the equivalent of not rather than 0= to save a byte? – streetster Sep 11 '18 at 6:58
• @streetster unfortunately, I cannot for 2 reasons. First, APL's not operator (~), when used monadically, only works with booleans (either 0 or 1). Since any number modulo 1 never equals 1, if I used ~ instead of 0=, I'd get a domain error on any number that's not a perfect square, since decimal values are out of ~'s domain. Furthermore, I cannot simply omit the 0=, since APL's truthy value is 1, not 0, and it wouldn't have a consistent output for falsy values. – J. Sallé Sep 11 '18 at 12:55

# K (oK), 2625 22 bytes

Solution:

{~1!%+/x*x*~1!x%:1+!x}


Try it online!

Explanation:

{~1!%+/x*x*~1!x%:1+!x} / the solution
{                    } / lambda taking x as input
!x  / range 0..x-1                        \
x%:      / x divided by and save result into x |
1!         / modulo 1                            | get divisors
~           / not                                 |
x*            / multiply by x                       /
x*              / multiply by x (aka square)          > square
+/                / sum up                              > sum up
%                  / square root                         \
1!                   / modulo 1                            | check if a square
~                     / not                                 /


Notes:

• -1 bytes taking inspiration from the PowerShell solution
• -3 bytes taking inspiration from the APL solution

# Pari/GP, 23 bytes

n->issquare(sigma(n,2))


Try it online!

## Matlab, 39 37 bytes

@(v)~mod(sqrt(sum(divisors(v).^2)),1)


Unfortunately, it doesn't work on Octave (on tio) so no tio link.

Note As @LuisMendo stated, divisors() belongs to Symbolic Toolbox.

• It looks like divisors belongs to the Symbolic Toolbox. You should state that in the title. Also, you can use ~··· instead of ···==0 – Luis Mendo Sep 10 '18 at 21:39
• You can shorten this by using sum(...)^.5 instead of sqrt(sum(...)) – Sanchises Dec 11 '18 at 14:56

-14 bytes thanks to Ørjan Johansen. -11 bytes thanks to ovs.

f x=sum[i^2|i<-[1..x],xmodi<1]elemmap(^2)[1..x^2]


Try it online!

Hey, it's been a while since I've... written any code, so my Haskell and golfing might a bit rusty. I forgot the troublesome Haskell numeric types. :P

• It's shorter (but slower) to avoid those conversions by searching for the square root with another list comprehension. Try it online! – Ørjan Johansen Sep 11 '18 at 2:36
• Shorter: f x|s<-sum[i^2|i<-[1..x],mod x i<1]=round(sqrt$toEnum s)^2==s – Damien Sep 11 '18 at 9:22 • Building up on Ørjan Johansen's suggestion, this should work for 53 bytes. – ovs Sep 11 '18 at 13:16 # Pyt, 7 bytes ð²ƩĐř²∈  Try it online! ### Explanation  Implicit input ð Get list of divisors ² Square each element Ʃ Sum the list [n] Đ Duplicate the top of the stack ř² Push the first n square numbers ∈ Is n in the list of square numbers? Implicit output  ð²Ʃ√ĐƖ=  Try it online! ### Explanation  Implicit input ð Get list of divisors ² Square each element Ʃ Sum the list [n] √ Take the square root of n Đ Duplicate the top of the stack Ɩ Cast to an integer = Are the top two elements on the stack equal to each other? Implicit output  ð²Ʃ√1%¬  Try it online! ### Explanation  Implicit input ð Get list of divisors ² Square each element Ʃ Sum the list [n] √ Take the square root of n 1% Take the square root of n modulo 1 ¬ Negate [python typecasting ftw :)] Implicit output  # Husk, 6 bytes £İ□ṁ□Ḋ  Try it online! ### Explanation £İ□ṁ□Ḋ -- example input 12 Ḋ -- divisors: [1,2,3,4,6,12] ṁ -- map the following .. □ -- | square: [1,4,9,16,36,144] -- .. and sum: 210 £ -- is it element of (assumes sorted) İ□ -- | list of squares: [1,4,9,16..196,225,..  # Jelly, 6 bytes ÆD²SÆ²  Try it online! Or see the test-suite. ### How? ÆD²SÆ² - Main Link: integer ÆD - divisors ² - square S - sum Æ² - is square?  # Proton, 41 bytes a=>sum(q*q for q:1..a+1if a%q<1)**.5%1==0  Try it online! Similar approach to the Python answer. # Mathematica, 32 bytes IntegerQ@Sqrt[2~DivisorSigma~#]&  Pure function. Takes a number as input and returns True or False as output. Not entirely sure if there's a shorter method for checking perfect squares. # Octave / MATLAB, 43 bytes @(n)~mod(sqrt(sum(find(~mod(n,1:n)).^2)),1)  Try it online! # Red, 67 bytes func[n][s: 0 repeat d n[if n % d = 0[s: d * d + s]](sqrt s)% 1 = 0]  Try it online! # Scala, 68 67 bytes def j(s:Int)=Math.sqrt((1 to s).filter(s%_<1).map(a=>a*a).sum)%1==0  Try it online! # Perl 6, 34 bytes -1 byte thanks to nwellnhof {grep($_%%*,1..$_)>>².sum**.5%%1}  Try it online! • **.5 is one byte shorter than .sqrt. – nwellnhof Sep 11 '18 at 14:42 ## F#, 111 bytes let d n=Seq.where(fun v->n%v=0){1..n} let u n= let m=d n|>Seq.sumBy(fun x->x*x) d m|>Seq.exists(fun x->x*x=m)  Try it online! So d gets the divisors for all numbers between 1 and n inclusive. In the main function u, the first line assigns the sum of all squared divisors to m. The second line gets the divisors for m and determines if any of them squared equals m. # Perl 5, 47 bytes $a+=$_*$_*!($n%$_)for 1..$n;$a=!($a**.5=~/\D/);  Returns 1 for true and nothing for false. ### Explanation: $a+=              for 1..$n; sum over i=1 to n$_*$_ square each component of the sum *!($n%$_) multiply by 1 if i divides n.$a=                   a equals
(\$a**.5           whether the square root of a
!       =~/\D/);   does not contain a non-digit.


# Groovy, 47 bytes

A lambda accepting a numeric argument.

n->s=(1..n).sum{i->n%i?0:i*i}
!(s%Math.sqrt(s))


Explanation

(1..n) creates an array of the values 1 to n

n%i is false (as 0 is falsy) if i divides n without remainder

n%i ? 0 : i*i is the sum of the square of the value i if it divides n without remainder, otherwise is 0

sum{ i-> n%i ? 0 : i*i } sums the previous result across all i in the array.

s%Math.sqrt(s) is false (as 0 is falsy) if the sqrt of s divides s without remainder

!(s%Math.sqrt(s)) returns from the lambda (return implicit on last statement) !false when the sqrt of s divides s without remainder

Try it online!

# Java 8, 75 70 bytes

n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}


-5 bytes thanks to @archangel.mjj.

Try it online.

Explanation:

n->{             // Method with integer parameter and boolean return-type
int s=0,       //  Sum-integer, starting at 0
i=0;       //  Divisor integer, starting at 0
for(;++i<=n;)  //  Loop i in the range [1, n]
s+=n%i<1?    //   If n is divisible by i:
i*i      //    Increase the sum by the square of i
:         //   Else:
0;       //    Leave the sum the same by adding 0
return Math.sqrt(s)%1==0;}
//  Return whether the sum s is a perfect square

• Hi, you can cut 5 bytes by removing the t variable (do the eval and assignment within the body of the for loop), like so: n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;} – archangel.mjj Sep 13 '18 at 8:26
• @archangel.mjj Ah, of course. Not sure how I missed that. Thanks! :) – Kevin Cruijssen Sep 13 '18 at 8:36