BZOJ 2005 能量采集(容斥原理)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2005

题意:给定n和m,求

思路:本题主要是解决对于给定的t,有多少对(i,j)满足x=Gcd(i,j)。有多少对呢?我们先求出有多少对的约数为x,有(n/x)*(m/x)种!那么接着就是减去约数大于x的对数。设a[x]表示Gcd为x的对数,我们现在求出的约数为x的对数,那么显然a[x]=a[x]-a[2*x]-a[3*x]-a[4*x]。。注意这里求的时候要倒着枚举x。





int n,m;
i64 a[N];


int main()
{
    RD(n,m);
    int x=min(n,m),i,j;
    FOR1(i,x) a[i]=(i64)(n/i)*(m/i);
    for(i=x;i>=1;i--) for(j=2;j*i<=x;j++) a[i]-=a[j*i];
    i64 ans=0;
    FOR1(i,x) ans+=(2*(i-1)+1)*a[i];
    PR(ans);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值