完全な正方形は2進数で取得され、一部のビットは「?」に置き換えられます。たとえば、1 ??の場合、番号は4になります(または1 ???? 000 ??? 0000)
私はその完璧な正方形を見つける必要があります(そのような可能な数だけがあります)
文字列内の「?」の数はn
その数を見つけるために私がしていることは、2 ** nの数(111,110,101,100)を反復処理し、それが完全な正方形であるかどうかを確認することです。次の関数を使用して、完全な正方形かどうかを確認しています。
bool issqr(int n){
int d=(int)(sqrt(n));
if(d*d==n) return true;
else return false;
}
Pythonでやったのに時間がかかるので、ビット演算だけで2 ** nの数値を入力してC++に移行しました(Pythonバージョンよりもはるかに高速でした)。
ただし、数値が64ビットを超える場合は失敗します
この問題を回避する方法は?数値が120ビットである場合、どうすれば同じことができますか。
(10100110 ??? 1?1?01?1?011000?1100?00101000?1?11001101100110001010111?0?1 ?? 0110?110?01?1100?1?0110?1?10111?01?0111000?10? ?101?01)