CSU 1803

签到题,然而我不会做,天啊,最后队友秒掉了,我还是不会做

赛后看了一哈,因为x*y%2016=0 等价于 x%2016*y%2016=0

那么我们把1-n中间取模后为i的数字有多少个定位cntx[i],1-m中间取模的数字为cnty[i]

那枚举x的余数和y的余数,乘起来是否为2016的倍数就行了

和湘潭那题不同,这题2016=2^5*3^2*7,按质因子考虑容斥很复杂= =

 

#include<cstdio>
#include<cstring>
#define maxl 3000

long long n,m,a,b,c,d,ans;
int cntx[maxl],cnty[maxl];

inline void prework()
{
	long long low,up;
	cntx[0]=n/2016;
	cnty[0]=m/2016;
	for(int i=1;i<2016;i++)
	{
		cntx[i]=n/2016;
		cnty[i]=m/2016;
	}
	for(int i=n/2016*2016+1;i<=n;i++)
		cntx[i%2016]++;
	for(int i=m/2016*2016+1;i<=m;i++)
		cnty[i%2016]++;
}

inline void mainwork()
{
	ans=0;
	for(int i=0;i<2016;i++)
		for(int j=0;j<2016;j++)
		if(i*j%2016==0)
		{
			ans+=1ll*cntx[i]*cnty[j];
		}
}

inline void print()
{
	printf("%lld\n",ans);
}

int main()
{
	while(~scanf("%lld%lld",&n,&m))
	{
		prework();
		mainwork();
		print();
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值