摘要:
看题之前异或是啥呢? 异或就是: 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数- 阅读全文
摘要:
刚开始以为就是一个前缀和加双指针,遍历一下就好了 刚开始的思路就搞一个S数组然后把输入进去的数组前i位相乘的到S[i]数组,然后当i>=k了的时候S[i]/a[i-k],然后代码写完提交发现我没有考虑0的情况。 然后等题解出来发现原来还有逆元这种骚东西。不愧是我,小菜鸡。还是太菜了啥都不知道。 具体 阅读全文
摘要:
乘法逆元是用来: 定义: 若a*x≡1(mod b),且a与b互质,我们定义x是a的逆元,记为a^(-1),所以也可以说x是a在mod b意义下的倒数 所以对于a/b(mod p),我们可以先求出b在mod p下的逆元,然后乘a再mod p就是这个分数的值了 1.拓展欧几里得求逆元 #include 阅读全文
摘要:
前提:知道普通欧几里得算法(辗转相除法)。 #include<bits/stdc++.h> using namespace std; long long x, y;//目前方程真正的解 void exgcd(long long a, long long b) { //当前目的:求解 ax + by 阅读全文
摘要:
辗转相除法是用来计算两个整数的最大公约数。假设两个整数为a和b,他们的公约数可以表示为gcd(a,b)。如果gcd(a,b) = c,则必然a = mc和b = nc。a除以b得商和余数,余数r可以表示为r = a - bk,k这里是系数。因为c为 a和b的最大公约数,所以c也一定是r的最大公约数, 阅读全文