这坨东西凭啥能只跑几毫秒
查看原帖
这坨东西凭啥能只跑几毫秒
879904
WorldMachine楼主2024/6/3 20:21

时间复杂度不应该是 O(n)\mathcal O(n) 的吗?

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m;
ll ans;
int mu(int x) {
	int y = 1;
	for (int i = 2; i * i <= x; i++) {
		if (x % i == 0) {
			if (x % (i * i) == 0) return 0;
			x /= i, y = -y;
		}
	}
	if (x > 1) y = -y;
	return y;
}
ll qpow(ll a, int b) {
	ll c = 1;
	while (b) {
		if (b & 1) c *= a;
		a *= a, b >>= 1;
	}
	return c;
}
int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i * i <= m; i++) {
		if (m % i == 0) {
			ans += mu(i) * qpow(m / i, n);
			if (i * i != m) ans += mu(m / i) * qpow(i, n);
		}
	}
	printf("%lld\n", ans);
}
2024/6/3 20:21
加载中...