Skip to content

Commit 1050cb8

Browse files
authored
Add Perfect Square (#576)
1 parent a44e64c commit 1050cb8

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/math/perfect_square.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Author : cyrixninja
2+
// Perfect Square : Checks if a number is perfect square number or not
3+
// https://en.wikipedia.org/wiki/Perfect_square
4+
fn perfect_square(num: i32) -> bool {
5+
if num < 0 {
6+
return false;
7+
}
8+
let sqrt_num = (num as f64).sqrt() as i32;
9+
sqrt_num * sqrt_num == num
10+
}
11+
12+
fn perfect_square_binary_search(n: i32) -> bool {
13+
if n < 0 {
14+
return false;
15+
}
16+
17+
let mut left = 0;
18+
let mut right = n;
19+
20+
while left <= right {
21+
let mid = (left + right) / 2;
22+
let mid_squared = mid * mid;
23+
24+
if mid_squared == n {
25+
return true;
26+
} else if mid_squared > n {
27+
right = mid - 1;
28+
} else {
29+
left = mid + 1;
30+
}
31+
}
32+
33+
false
34+
}
35+
36+
#[cfg(test)]
37+
mod tests {
38+
use super::*;
39+
40+
#[test]
41+
fn test_perfect_square() {
42+
assert!(perfect_square(9) == true);
43+
assert!(perfect_square(81) == true);
44+
assert!(perfect_square(4) == true);
45+
assert!(perfect_square(0) == true);
46+
assert!(perfect_square(3) == false);
47+
assert!(perfect_square(-19) == false);
48+
}
49+
50+
#[test]
51+
fn test_perfect_square_binary_search() {
52+
assert!(perfect_square_binary_search(9) == true);
53+
assert!(perfect_square_binary_search(81) == true);
54+
assert!(perfect_square_binary_search(4) == true);
55+
assert!(perfect_square_binary_search(0) == true);
56+
assert!(perfect_square_binary_search(3) == false);
57+
assert!(perfect_square_binary_search(-19) == false);
58+
}
59+
}

0 commit comments

Comments
 (0)