Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
Đề bài: Cho một số nguyên dương, hãy viết một hàm để xác định xem nó có phải là lũy thừa của 2 hay không.
Ví dụ:
Input : n = 4
Output : Yes
22 = 4
Input : n = 7
Output : No
Input : n = 32
Output : Yes
25 = 32
Trong bài viết này, Quản Trị Mạng sẽ hướng dẫn bạn cách viết chương trình kiểm tra xem một số có phải là lũy thừa của 2 hay không bằng Python.
Phương thức đơn giản nhất cho vấn đề này là chỉ cần lấy logarit (log) của số đó trên cơ số 2 và nếu kết quả trả về một số nguyên thì số đó là lũy thừa của 2.
Code cụ thể như sau:
# Python3 Program to find # whether a no is # power of two import math # Function to check # Log base 2 def Log2(x): return (math.log10(x) / math.log10(2)); # Function to check # if x is power of 2 def isPowerOfTwo(n): return (math.ceil(Log2(n)) == math.floor(Log2(n))); # Driver Code if(isPowerOfTwo(31)): print("Yes"); else: print("No"); if(isPowerOfTwo(64)): print("Yes"); else: print("No"); # This code is contributed # by mits
Một giải pháp khác là liên tiếp chia số nhập vào cho 2, tức là thực hiện n = n/2 lặp đi lặp lại. Trong bất kỳ phép lặp nào, nếu n%2 khác 0 và n không phải là 1 thì n không phải là lũy thừa của 2. Nếu n trở thành 1 thì đó là lũy thừa của 2.
Code chi tiết như sau:
# Python program to check if given # number is power of 2 or not # Function to check if x is power of 2 def isPowerOfTwo(n): if (n == 0): return False while (n != 1): if (n % 2 != 0): return False n = n // 2 return True # Driver code if(isPowerOfTwo(31)): print('Yes') else: print('No') if(isPowerOfTwo(64)): print('Yes') else: print('No') # This code is contributed by Danish Raza
Tất cả các số lũy thừa của 2 chỉ có một kiểu thiết lập bit duy nhất. Do vậy, hãy đếm số lượng của bit 1 trong biểu diễn dạng nhị phân của số được nhập vào. Nếu chỉ có 1 số 1 thì số đó là lũy thừa của 2.
Code đếm số lượng của bit 1 trong biểu diễn nhị phân của một số:
# Python3 program to Count set # bits in an integer # Function to get no of set bits in binary # representation of positive integer n */ def countSetBits(n): count = 0 while (n): count += n & 1 n >>= 1 return count # Program to test function countSetBits */ i = 9 print(countSetBits(i)) # This code is contributed by # Smitha Dinesh Semwal
Hoặc:
# Python3 implementation of recursive # approach to find the number of set # bits in binary representation of # positive integer n def countSetBits( n): # base case if (n == 0): return 0 else: # if last bit set add 1 else # add 0 return (n & 1) + countSetBits(n >> 1) # Get value from user n = 9 # Function calling print( countSetBits(n)) # This code is contributed by sunnysingh
Nếu chúng ta trừ một số lũy thừa của 2 cho 1 thì tất cả các bit 0 ở đằng sau bit 1 duy nhất sẽ chuyển thành bit 1 còn bit 1 duy nhất đó sẽ chuyển thành bit 0.
Ví dụ: Cho 4 (biểu diễn dạng nhị phân là 100) và 16 (10000) sau khi trừ đi 1 ta được kết quả sau:
Do đó, nếu một số n là lũy thừa của 2 thì toán tử thao tác bit AND (&) của n và n-1 sẽ bằng 0. Chúng ta có thể xác định n có phải là lũy thừa của 2 hay không dựa trên giá trị của n&(n-1). Biểu thức n&(n-1) sẽ không hoạt động khi n = 0. Để xử lý trường hợp này, biểu thức của chúng sẽ phải thay bằng biểu thức n&(!n&(n-1)).
Dưới đây là code chi tiết cho phương pháp này:
# Python program to check if given # number is power of 2 or not # Function to check if x is power of 2 def isPowerOfTwo (x): # First x in the below expression # is for the case when x is 0 return (x and (not(x & (x - 1))) ) # Driver code if(isPowerOfTwo(31)): print('Yes') else: print('No') if(isPowerOfTwo(64)): print('Yes') else: print('No') # This code is contributed by Danish Raza
Hy vọng rằng bài viết này sẽ có ích với bạn!
Nguồn tin: Quantrimang.com
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn