Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- #define pb emplace_back
- #define AI(i) begin(i), end(i)
- template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); }
- template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); }
- #ifdef KEV
- #define DE(args...) kout(__LINE__, "[ " + string(#args) + " ] ", args)
- void kout() { cerr << endl; }
- template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); }
- template<class T> void debug(T l, T r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; }
- #else
- #define DE(...) 0
- #define debug(...) 0
- #endif
- const int MAX_N = 300010, p = 998'244'353;
- int n, per[MAX_N], cnt[MAX_N], vis[MAX_N];
- vector<int> pfac[MAX_N];
- int32_t main() {
- ios_base::sync_with_stdio(0), cin.tie(0);
- cin >> n;
- for (int i = 1;i <= n;++i) cin >> per[i];
- for (int i = 2;i <= n;++i) if (pfac[i].empty()) {
- for (int j = i;j <= n;j += i)
- pfac[j].pb(i);
- }
- for (int i = 1;i <= n;++i) {
- if (vis[i]) continue;
- int len = 1;
- while (i != per[i]) {
- vis[ per[i] ] = true;
- swap(per[i], per[ per[i] ]);
- ++len;
- }
- for (int j : pfac[len]) {
- while (len % j == 0) {
- ++cnt[j];
- len /= j;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement