Challenges

Determine whether an integer is square-free

+5
−0

An integer is called square-free if it is not a multiple of a perfect square other than 1. For example, 42 is square-free, but 44 is not because it is a multiple of the perfect square 4 = 2².

Your task is to write a program or function that takes a positive integer, and returns a truthy value if the integer is square-free and a falsey value otherwise.

This is code golf, the shortest code wins.

The square-free numbers are OEIS sequence A005117 (thanks to Razetime for pointing this out).

Some test cases:

  1  true
2  true
3  true
4  false
5  true
6  true
7  true
8  false
9  false
10  true
12  false
14  true
16  false
18  false
20  false
30  true
40  false
50  false
100  false
110  true
111  true

Why does this post require moderator attention?
Why should this post be closed?

+3
−0

Scala, 41 bytes

x=>2 to x forall(d=>x%d+math.sqrt(d)%1>0)


Try it online!

Pretty straightforward

Why does this post require moderator attention?

+2
−0

Vyxal, 4 bytes

K∆²a


Try it Online!

Outputs 0 for square-free, 1 for not.

K    # Factors
∆²  # Is perfect square
a # Any true?

Why does this post require moderator attention?

+2
−0

Python3, 39 bytes

lambda n:all(n%i**2for i in range(2,n))


Try it online!

Makes a list comprehension from the numbers 2 through n of the remainder of the square, and then checks whether the list contains 0

-8 bytes thanks to celtschk‭
-5 bytes thanks to Moshi

Why does this post require moderator attention?

not 0 in X => all X (2 comments)
+2
−0

Ruby, 27 bytes

->n{(2..n).all?{n%_1**2>0}}


Try it online

Why does this post require moderator attention?

+1
−0

BQN, 13 bytesSBCS

∧´0≠⊢|˜·×˜2+↕


Run online!

A train submission. It's 2 bytes shorter than the lambda version {∧´0≠𝕩|˜×˜2+↕𝕩}, due to omitting curly braces.

The idea is similar to ruby:

• range 2..n+1
• square it, then modulo n
• are all remainders ≠ 0?
Why does this post require moderator attention?

+1
−0

J, 17 bytes

{{*./y|~*:2+i.y}}


Try it online!

A direct definition closest to Razetime's infuriatingly good train solution. Outputs a non-zero number for true and 0 for false.

Why does this post require moderator attention?

+1
−0

MATL, 6 bytes

YftuX=


Try it online!

Same method as Moshi.

YftuX=
Yf      - factor with implicit input
t    - duplicate
u   - unique
X= - isequal

Why does this post require moderator attention?

+1
−0

J, 7 char

*./~:q:


How it works:

'q:' produces prime factors of number on right

'~:' replaces the first instance of unique numbers with a 1, the rest 0

'*./' tests for all ones

Sample runs:

*./~:q: 30

1

*./~:q: 40

0

*./~:q: 50

0

*./~:q: 100

0

*./~:q: 110

1

*./~:q: 111

1

Alternative 10 char solution:

(#=#@~.)q:


How it works:

'q:' of the number on the right produces its prime factors

'#' counts how many there are

'~.' eliminates repeats.

if the counts of factors before and after removing repeats are equal, then the number is square-free.

Sample runs:

(#@q:=#@~.@q:) 30

1

(#@q:=#@~.@q:) 40

0

(#@q:=#@~.@q:) 50

0

(#@q:=#@~.@q:) 100

0

(#@q:=#@~.@q:) 110

1

(#@q:=#@~.@q:) 111

1

Why does this post require moderator attention?

+0
−0

Japt, 7 bytes

k ä!= e


Try it

First time doing Japt so this is probably pretty bad. Just factorizes and checks that there are no duplicate factors.

Why does this post require moderator attention?