In İki güc bir tam ədədi verdiyimiz problem, 2-nin gücü olub olmadığını yoxlayın. Yalnız bir dəsti varsa, ikisinin gücündə bir rəqəm parça ikili nümayəndəlikdə. Yalnız bir çoxlu bit olan ədədin bir nümunəsinə baxaq. Əgər girişimiz 16-dırsa, onu 10000 kimi ikili formatda təmsil edə bilərik. Burada yalnız bitin 1 olduğunu görərik ki, rəqəm 2-nin gücündə təmsil olunur deməkdir. İndi çoxluğun bitinin 1-dən çox olduğu bir nümunəyə baxın. Girişimiz 13-dirsə, onu 1101 kimi ikili formatda təmsil edirik. Budur, 3 dəst bit var. Beləliklə, biz onu y olduğu yerdə 2 ^ y şəklində təmsil edə bilmərik tam 0-dən çoxdur.
Mündəricat
Giriş Formatı
Bir tam dəyər N ehtiva edən birinci sətir.
Çıxış formatı
Müəyyən bir formatda təmsil etsək, "true" yazdırın, əks halda "false" yazdırın.
Məhdudiyyətlər
- 1 <= N <= 10 ^ 18.
Nümunə Giriş
4
Nümunə Çıxış
doğru
Izahat
Onsuz da 4-ün ikili təmsilinin 100 olduğunu bilirik ki, burada yalnız bir set bit deməkdir. Beləliklə biz onu 2 ^ y (2 ^ 2) şəklində təmsil edirik.
Təkrarlanan yanaşma
- Mənfi rəqəmlər və sıfır heç vaxt y tam bir rəqəm olduğu 2 ^ y şəklində ola bilməz.
- n-in 2-yə bölünə biləcəyini yoxlayın, bəli, n-i 2-yə bölün və dəfələrlə yoxlayın.
- nəhayət n 1-ə endirilirsə, n 2 başqa bir gücdür, 2 ^ y forması deyildir, burada y bir tamdır.
Həyata keçirilməsi
İki nəfərin gücü üçün C ++ proqramı
#include <bits/stdc++.h> using namespace std; bool isPowerOfTwo(int n) { if (n <= 0) return false; while (n%2 == 0) n/=2; return n == 1; } int main() { int n=4; int ans=isPowerOfTwo(n); if(ans) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; }
Buraxılış
true
İkinin Gücü üçün Java Proqramı
public boolean isPowerOfTwo(int n) { if (n <= 0) return false; while (n%2 == 0) n/=2; return n == 1; }
Zaman mürəkkəbliyi
O (log n) çünki hər addımda sayını 2-yə bölürük.
Bit əməliyyat yanaşması
- Mənfi rəqəmlər və sıfır heç vaxt 2-nin gücü ola bilməz.
- Bir ədədin gücü 2 olarsa (n & (n-1)) == 0
Həyata keçirilməsi
İki nəfərin gücü üçün C ++ proqramı
#include <bits/stdc++.h> using namespace std; bool isPowerOfTwo(int n) { return (n > 0 && (n & (n-1)) == 0); } int main() { int n=4; int ans=isPowerOfTwo(n); if(ans) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; }
Buraxılış
true
İkinin Gücü üçün Java Proqramı
public boolean isPowerOfTwo(int n) { return (n>0&&(n & (n-1))==0); }
Zamanın mürəkkəbliyi
O (1) çünki yalnız tək istifadə edərək nömrənin şərti təmin edib etmədiyini tapa bilərik.