11// Author : cyrixninja
22// Perfect Square : Checks if a number is perfect square number or not
33// https://en.wikipedia.org/wiki/Perfect_square
4- fn perfect_square ( num : i32 ) -> bool {
4+ pub fn perfect_square ( num : i32 ) -> bool {
55 if num < 0 {
66 return false ;
77 }
88 let sqrt_num = ( num as f64 ) . sqrt ( ) as i32 ;
99 sqrt_num * sqrt_num == num
1010}
1111
12- fn perfect_square_binary_search ( n : i32 ) -> bool {
12+ pub fn perfect_square_binary_search ( n : i32 ) -> bool {
1313 if n < 0 {
1414 return false ;
1515 }
1616
1717 let mut left = 0 ;
1818 let mut right = n;
19-
19+
2020 while left <= right {
2121 let mid = ( left + right) / 2 ;
2222 let mid_squared = mid * mid;
2323
24- if mid_squared == n {
25- return true ;
26- } else if mid_squared > n {
27- right = mid - 1 ;
28- } else {
29- left = mid + 1 ;
24+ match mid_squared. cmp ( & n) {
25+ std:: cmp:: Ordering :: Equal => return true ,
26+ std:: cmp:: Ordering :: Greater => right = mid - 1 ,
27+ std:: cmp:: Ordering :: Less => left = mid + 1 ,
3028 }
3129 }
3230
@@ -39,21 +37,21 @@ mod tests {
3937
4038 #[ test]
4139 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 ) ;
40+ assert ! ( perfect_square( 9 ) ) ;
41+ assert ! ( perfect_square( 81 ) ) ;
42+ assert ! ( perfect_square( 4 ) ) ;
43+ assert ! ( perfect_square( 0 ) ) ;
44+ assert ! ( ! perfect_square( 3 ) ) ;
45+ assert ! ( ! perfect_square( -19 ) ) ;
4846 }
4947
5048 #[ test]
5149 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 ) ;
50+ assert ! ( perfect_square_binary_search( 9 ) ) ;
51+ assert ! ( perfect_square_binary_search( 81 ) ) ;
52+ assert ! ( perfect_square_binary_search( 4 ) ) ;
53+ assert ! ( perfect_square_binary_search( 0 ) ) ;
54+ assert ! ( ! perfect_square_binary_search( 3 ) ) ;
55+ assert ! ( ! perfect_square_binary_search( -19 ) ) ;
5856 }
5957}
0 commit comments