【刷题摘要】6-28 至 7-2 暑假集训前刷题汇总

发布时间 2023-06-29 00:11:20作者: Zwjoey

Day 1:6-28(+3)

第一天,发现从哪里开始学都要纠结一阵......dp?图论?搜索?发现过了许久有点一下子啃不动 qwq

便先从最基础的算法开始学吧。

今天貌似只复习了快速幂......(悲

(1) 快速幂、快速乘、龟速乘

快速幂
ll quickpow(ll a, ll b, ll p)
{
	ll ans = 1 % p;
	while (b)
	{
		if (b & 1) ans = (ans * a) % p;
		a = (a * a) % p;
		b >>= 1;
	}
	return ans;
}
快速乘
ull quicktimes(ull a, ull b, ull p)
{
    ull ans = 0;
    while(b)
    {
        if(b & 1) ans = (ans + a) % p;
        a = (a + a) % p;
        b >>= 1;
    }
    return ans ;
}
龟速乘
ll quick_mul(ll a, ll b, ll p)
{
	ll res = 0;
	while(b)
	{
		if(b & 1) res = (res + a) % p;
		a = (a + a) % p;
		b >>= 1;
	}
	return res;
}
ll quick_pow(ll a, ll b, ll p)
{
	ll ans = 1 % p;
	while(b)
	{
		if(b & 1) ans = quick_mul(ans, a, p) % p;
		a = quick_mul(a, a, p) % p;
		b >>= 1;
	}
	return ans;
}

快速幂随便写了点东西,貌似已经烂熟于心了,便自己写了思路在纸上。

image

快速乘也差不多,就是把两数相乘换成二进制下几个数相加。

没事又证明了一下模运算为什么可以在乘法中随便模 qwq

image

还有模运算也满足『结合律』『交换律』『分配律』,除法部分除外。

还有这个龟速乘,它就是防止某些zz出题人卡 longlong 的。就假如它给两个值都是 \(2^{63}-1\) 让你乘,ull 都救不了(__int128 另说,但貌似不能用

原理就是用加法替换乘法,这样就不会一下子爆了(还有 % 撑着呢

貌似时间复杂度也是 \(\log n\) ๑乛ᴗ乛๑

(2) 异或运算小tips

P1469

做这道题时意外发现两个异或有用的性质:

  • \(x=y\)\(x \bigoplus y=0\)

  • \(x \bigoplus 0=x\)