萌新求助 Fastmod
  • 板块学术版
  • 楼主ducati
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/7/24 11:00
  • 上次更新2023/10/27 18:41:12
查看原帖
萌新求助 Fastmod
87064
ducati楼主2022/7/24 11:00

我在网上看到一段加速取模的代码

struct FastMod{
	typedef unsigned long long ULL;
	typedef __uint128_t LLL;
	ULL b,m;
	void init(ULL b){this->b=b,m=ULL((LLL(1)<<64)/b);}
	ULL operator()(ULL a)const{
		ULL q=(ULL)((LLL(m)*a)>>64);
		ULL r=a-q*b;
		return r>=b?r-b:r;
	}
}mod;

这里是来源

请问,以上快速取模代码是如何保证 0r<2b0 \le r < 2*b 的呢?

百思不得其解。

2022/7/24 11:00
加载中...