(k+1)|(n+k) 就是 (k+1)|(n−1)
这个函数就是最大的 k 使得
随便容斥下咯
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
inline ll Gcd(ll a,ll b){
return !b?a:Gcd(b,a%b);
}
inline ll Sum(ll n,ll x){
n/=x;
return n*(n+1)/2*x+n;
}
inline ll Cnt(ll n,ll x){
return n/x;
}
inline int f(int n){
for (int i=0;;i++)
if ((n+i)%(i+1)!=0)
return i;
}
inline int g(int n){
n--;
for (int i=1;;i++)
if (n%i!=0)
return i-1;
}
int main(){
ll Ans=0,ans2=0;
ll lcm=1,nxt;
for (int i=1;i<=31;i++){
ll n=1LL<<(i<<1);
//for (int j=2;j<n;j++)
// if (f(j)==i)
//ans2++;
nxt=lcm*(i+1)/Gcd(lcm,i+1);
Ans+=Cnt(n-2,lcm)-Cnt(n-2,nxt);
lcm=nxt;
}
printf("%lld\n",Ans);
return 0;
}
本文介绍了一个求解特定条件下最大整除数之和的算法实现,通过数学推导和编程技巧,解决了如何找到一系列整数的最大整除数,并使用C++代码实现了算法逻辑。

509

被折叠的 条评论
为什么被折叠?



