File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments