Warning: session_start(): open(/tmp/sess_7c421b67ad679c5166c1b9deaed821e8, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239
Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
题目链接:[[https://projecteuler.net/problem=207]]
=== 题意 ===
定义$4^t=2^t+k$是$k$的一个**拆分**,当且仅当$4^t,2^t,k$都是正整数,且$t$是实数。特别的当,$t$也是正整数时,称为**完美拆分**。定义函数$P(m)$为$1\lt k \le m$中完美拆分占所有拆分的比例
=== 题解 ===
拆分的式子可以化简为$2^t(2^t-1)=k$,不妨设$u=2^t$其中$u$是正整数,那么完美拆分显然就是$u$是$2$的整数次幂的情况,所以二分一下即可(应该是有单调性的吧
另外,直接枚举$2^t$中的$t$也是可以的
=== 代码 ===
#include
#define ll long long
#define pii_ pair
#define mp_ make_pair
#define pb push_back
#define fi first
#define se second
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define show1(a) cout<<#a<<" = "<>1;
if(mid*(mid-1)<=k) l=mid+1,t=mid;
else r=mid-1;
}
ll w = log2(t);
return w*12345>1;
if(check(mid)) ans=mid,R=mid-1;
else L=mid+1;
}
cout<