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
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Challenges

Comments on Determine whether an integer is square-free

Parent

Determine whether an integer is square-free

+7
−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
History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

2 comment threads

Testcases? (2 comments)
[relevant oeis](http://oeis.org/A005117) (2 comments)
Post
+3
−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

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

2 comment threads

not 0 in X => all X (2 comments)
Possible improvements (5 comments)
Possible improvements
dino‭ wrote almost 3 years ago

I /could/ remove some bytes by changing int(sqrt(n)+1) to n, but some part of me really doesn't like sacrificing time complexity like that…

celtschk‭ wrote almost 3 years ago

Well, it is a code golf challenge, not a run time challenge.

BTW, I suspect that dividing by all the single factors (your re-assignment of n) does not make your code faster, but slower. Anyway, it definitely makes it longer.

dino‭ wrote almost 3 years ago

That's... a very fair point

celtschk‭ wrote almost 3 years ago

The straightforward n%(i*i)==0 would be shorter than your double equality. Moreover, you then could remove the ==0 by replacing 1in with 0in, saving another 3 bytes.

dino‭ wrote almost 3 years ago

Excellent suggestions, thank you!