[NOI2010]能量采集 Posted on 2019-07-14 | In 题解 鸽子终于更博了 考虑设$F[i]$为$i$是$m$和$n$公因数的方案数,显然$F[i]=(m/i)*(n/i)$ 然后对$i$进行容斥,就能得到$F[i]$为$i$是$m$和$n$最小公因数的方案数 最后套用公式,直接计算答案即可 12345678910111213#include<bits/stdc++.h>using namespace std;long long m,n,k,ans,f[100001];int main () { scanf("%lld%lld",&n,&m); k=min(m,n); for(register int i=k;i;--i) { f[i]=(n/i)*(m/i); for(register int j=i+i;j<=k;j+=i) f[i]-=f[j]; (ans+=(i*2-1)*f[i]); } printf("%lld\n",ans); return 0;}