İki güc

Çətinlik səviyyəsi Asan
Tez-tez soruşulur alma
Parça Bit manipulyasiya Bits RiyaziyyatBaxılıb 19

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.

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

İki gücPin

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.

References

Translate »