2005: [Noi2010]能量采集

题目链接

题目大意:求 x=1ny=1mgcd(x,y) ∑ x = 1 n ∑ y = 1 m g c d ( x , y )

题解:点(x,y)与(0,0)所连线段上不包含原点有的点为gcd(x,y)
反演或简单容斥都可以

我的收获:2333

#include   
#include   
#include   
#include   
#include   
using namespace std;  
long long f[110000];  
int n,m;  
long long ans;  
int main()  
{  
    scanf("%d%d",&n,&m);  
    if(n>m) swap(n,m);  
    for(int i=n;i;i--)  
    {  
        f[i]=(long long)(n/i)*(m/i);  
        for(int j=2;j*i<=n;j++)  
        {  
            f[i]-=f[j*i];  
        }  
        ans+=f[i]*(2*i-1);  
    }  
    printf("%lld\n",ans);  
    return 0;  
}  

你可能感兴趣的:(2001-2250)