[模板] hash

优点:快(没有取模操作),不容易被卡。

const ll P=(1ll<<61)-1;//模数取2^61-1
inline ll add(ll x,ll y){return x+y>=P?x+y-P:x+y;}//避免取模
inline ll sub(ll x,ll y){return x<y?x+P-y:x-y;}
inline ll mod(__int128 x){return sub((x&p)+(x>>61),P);}//将2^61的位置作为分界点分为两部分,对于比它小的部分取模后不变,比它大的部分设为 x ,因为 x*2^61%(2^61-1)=x%(2^61-1) ,所以将两部分相加在做一次就是结果。
inline ll mul(__int128 x,ll y){return mod(x*y);}
posted @ 2025-05-25 21:09  exCat  阅读(44)  评论(4)    收藏  举报