RE on #1 #6
查看原帖
RE on #1 #6
324632
Skeleton_Huo楼主2025/1/26 18:17

RE on #1 #6

#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> pii;

int n, ans;
vector<pii> fac;

void dfs(int u, int d, int phi) {
	if (u == (int)fac.size()) {
		ans += n / d * phi;
		return;
	}
	dfs(u + 1, d, phi);
	d *= fac[u].first, phi *= (fac[u].first - 1);
	dfs(u + 1, d, phi);
	for (int i = 2; i <= fac[u].second; i++) {
		d *= fac[u].first, phi *= fac[u].first;
		dfs(u + 1, d, phi);
	}
}

signed main() {
	cin >> n;
	
	int t = n;
	for (int i = 2; i * i <= t; i++) {
		if (t % i == 0) {
			fac.emplace_back(i, 0);
			while (t % i == 0) t /= i, fac.back().second++;
		}
	}
	if (t != 1) {
		if (fac.back().first == t) fac.back().second++;
		else fac.emplace_back(t, 1);
	}
	
	dfs(0, 1, 1);
	
	cout << ans;	
	
	return 0;
}
2025/1/26 18:17
加载中...