Skip to content

Commit

Permalink
Prime Check and Prime Factors (TheAlgorithms#42)
Browse files Browse the repository at this point in the history
* prime check

* prime factors
  • Loading branch information
ashwani-rathee committed Jun 14, 2021
1 parent 75c8b3e commit 50e15b4
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/TheAlgorithms.jl
Expand Up @@ -44,6 +44,8 @@ export line_length
export mean
export median
export mode
export prime_check
export prime_factors
export perfect_cube
export perfect_number
export perfect_square
Expand Down Expand Up @@ -108,6 +110,8 @@ include("math/collatz_sequence.jl")
include("math/euler_method.jl")
include("math/factorial.jl")
include("math/line_length.jl")
include("math/prime_check.jl")
include("math/prime_factors.jl")
include("math/perfect_cube.jl")
include("math/perfect_number.jl")
include("math/perfect_square.jl")
Expand Down
40 changes: 40 additions & 0 deletions src/math/prime_check.jl
@@ -0,0 +1,40 @@
"""
prime_check(number)
Checks to see if a number is a prime or not
A number is prime if it has exactly two factors: 1 and itself.
# Example
```julia
prime_check(2) # returns true
prime_check(3) # returns true
prime_check(5) # returns true
prime_check(7) # returns true
prime_check(11) # returns true
prime_check(13) # returns true
prime_check(17) # returns true
prime_check(19) # returns true
prime_check(23) # returns true
prime_check(29) # returns true
```
Contributed By:- [Ashwani Rathee](https://github.com/ashwani-rathee)
"""
function prime_check(number)
if 1 < number < 4
# 2, 3 are primes
return true
elseif number < 2 || number % 2 == 0
# Negative ,0,1, and even numbers except 2 are not primes
return false
end
odd_numbers = collect(3:2:trunc(sqrt(number) + 1))
for i in odd_numbers
if number % i == 0
return false
end
end
return true
end
36 changes: 36 additions & 0 deletions src/math/prime_factors.jl
@@ -0,0 +1,36 @@
"""
prime_factors(number)
Returns prime factors of `number` as a vector
# Example
```julia
prime_factors(50) # returns [2,5,5]
prime_factors(0) # returns []
prime_factors(100) # returns [2, 2, 5, 5]
prime_factors(2560) # returns [2, 2, 2, 2, 2, 2, 2, 2, 2, 5]
prime_factors(10^-2) # returns []
prime_factors(0.02) # returns []
prime_factors(10^-354) # returns []
prime_factors("hello") # returns error
```
Contributed By:- [Ashwani Rathee](https://github.com/ashwani-rathee)
"""
function prime_factors(number)
i = 2
factors = []
while i^2 <= number
if number % i == 1
i += 1
else
number ÷= i
push!(factors, i)
end
end
if number > 1 == 1
push!(factors, number)
end
return factors
end
29 changes: 29 additions & 0 deletions test/math.jl
Expand Up @@ -146,6 +146,35 @@ end
@test line_length(x -> sin(5 * x) + cos(10 * x) + 0.1 * x^2, 0, 10, 10000) == 69.53493003183544
end

@testset "Math: Prime Check" begin
@test prime_check(2) == true
@test prime_check(3) == true
@test prime_check(5) == true
@test prime_check(7) == true
@test prime_check(11) == true
@test prime_check(13) == true
@test prime_check(17) == true
@test prime_check(19) == true
@test prime_check(23) == true
@test prime_check(29) == true
@test prime_check(112) == false
@test prime_check(172) == false
@test prime_check(1231) == true
@test prime_check(2332) == false
@test prime_check(2932) == false
end

@testset "Math: Prime Factors" begin
@test prime_factors(50) == [2,5,5]
@test prime_factors(0) == []
@test prime_factors(100) == [2, 2, 5, 5]
@test prime_factors(2560) == [2, 2, 2, 2, 2, 2, 2, 2, 2, 5]
@test prime_factors(10^-2) == []
@test prime_factors(0.02) == []
@test prime_factors(10^-354) == []
@test_throws MethodError prime_factors("hello")
end

@testset "Math: Perfect Cube" begin
@test perfect_cube(27) == true
@test perfect_cube(4) == false
Expand Down

0 comments on commit 50e15b4

Please sign in to comment.