Chúng ta được cho một số nguyên dương N. Mục đích là đếm các số nhỏ hơn hoặc bằng N có tất cả là 1 trong biểu diễn nhị phân của chúng. Ví dụ 1 là 1, 3 là 11, 7 là 111, 15 là 1111 ... cứ tiếp tục như vậy.
Nếu chúng ta thấy các số thì tất cả chúng đều là 2i-1. Nơi tôi bắt đầu từ 1. Để kiểm tra các số như vậy nhỏ hơn n. Chúng tôi sẽ so sánh nếu 2i-1 <=n. Sau đó, số lượng gia tăng.
Hãy cùng hiểu với các ví dụ.
Đầu vào - N =15
Đầu ra - Số có tất cả 1 trong nhị phân:4
Giải thích - Các số là tổng của các số nguyên tố giống nhau - Các số sẽ là 1 3 7 15
Đầu vào - N =50
Đầu ra - Số có tất cả các số 1 trong hệ nhị phân:5
Giải thích - Các số dưới dạng tổng của các số nguyên tố giống nhau -
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Ta lấy một số nguyên dương N ..
-
Hàm allOnes (int n) nhận n làm đầu vào và trả về các số có tất cả là 1 trong biểu diễn nhị phân.
-
Lấy số lượng biến ban đầu là 0 cho những số như vậy ..
-
Di chuyển từ i =1 đến i <=n bằng vòng lặp for.
-
Với mỗi i, nếu pow (2, i) -1 nhỏ hơn hoặc bằng n. Số lượng tăng dần.
-
Trả về kết quả là kết quả ở cuối vòng lặp for.
Ví dụ
#include <bits/stdc++.h> using namespace std; int allOnes(int n){ int count = 0; for(int i=1;i<=n;i++){ if(n>=pow(2,i)-1){ count++; //cout<<" "<<pow(2,i)-1; } } return count; } int main(){ int N=23; cout <<endl<< "Number having all 1's in binary : "<<allOnes(N); return 0; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Number having all 1's in binary : 4