数论
数论
模运算
\(a\%b = a-b*floor(\frac ab)\)
费马小定理
\(a^{p-1} \% p=1\)
最小公倍数&最大公约数
(a,b)表示最大公约数
[a,b]表示最小公倍数
\((a,b)*[a,b] = ab\)
辗转相除
if (a % b==0) return b;
else return gcd(b, a % b);
质数
筛法
for (int i = 2; i <= n; i++) {
if (is_prime[i])
for (int j = 2*i; j <= n; j+=i) is_prime[j]=false; //筛去当前素数的倍数
}
欧拉函数 \(\phi\)
求互质(公约数只有1的两个整数)个数
快速幂
在幂指数过大的情况下,快速幂运算
分治
将a100化成a50 * a^50,递归处理
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a, b, m;
int getRes(ll a, ll b, ll m) {
if (b == 0) return 1;
if (b % 2 == 1) {
return a * getRes(a, b - 1, m) % m;
} else {
ll mul = getRes(a, b / 2, m);
return mul * mul % m;
}
}
int main() {
cin >> a >> b >> m;
cout << getRes(a, b, m);
return 0;
}
迭代
将幂指数作二进制数位运算
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a, b, m;
int main() {
cin >> a >> b >> m;
ll ans = 1, cur = a;
while (b > 0) {
if (b & 1) ans = ans * cur % m;
cur = cur * cur % m;
b >>= 1;
}
cout << ans;
return 0;
}

浙公网安备 33010602011771号