求助,关于向上取整
查看原帖
求助,关于向上取整
762588
Edgebright楼主2023/7/22 00:01

我自己推出来的柿子是向上取整,写成代码是这样:

	L = ceil(L, k);//
	H = H / k;
	ll ans = 0;
	for(int l = 1, r; l <= H; l = r + 1)
	{
		r = H / (H / l);
		if(L / l) r = min(r, L / (L / l));
		ll sMy = My(r) - My(l - 1);
		ll pow = (H / l) - ceil(L, l) + 1;//
		pow = qp(pow, n);
		ans += (sMy + Md) % Md * pow % Md;
		ans %= Md;
	}

其中ceil函数是

inline int ceil(int a, int b)
{
	if(a % b) return (a / b) + 1;
	return a / b;
}

但是这样只有80分,这是为什么啊?

题解给出的是这样:

	L = (L - 1) / k;//
	H = H / k;
	ll ans = 0;
	for(int l = 1, r; l <= H; l = r + 1)
	{
		r = H / (H / l);
		if(L / l) r = min(r, L / (L / l));
		ll sMy = My(r) - My(l - 1);
		ll pow = (H / l) - (L / l);//
		pow = qp(pow, n);
		ans += (sMy + Md) % Md * pow % Md;
		ans %= Md;
	}

为什么这样就能AC

不同之处用//标出了。

2023/7/22 00:01
加载中...