题目链接:[[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<<" = "<