数论

数论

模运算

\(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;
}
posted @ 2023-09-03 19:02  Codaaaa  阅读(25)  评论(0)    收藏  举报