//Autor: Mateusz Wasylkiewicz //Zawody: Potyczki Algorytmiczne 2018 //Strona: http://potyczki.mimuw.edu.pl/ //Zadanie: PIN, runda probna zwykla //Czas: O(sqrt(n)*(log2(n))^(1+sqrt(log2(n)))) #include <bits/stdc++.h> using namespace std; typedef long long LL; template <class T> LL rozwiaz(T f, LL n) { LL wynik = 0, d = 1; while (d * d < n) { if (n % d == 0) { wynik += f(n, d); wynik += f(n, n / d); } d++; } if (d * d == n) wynik += f(n, d); return wynik; } inline LL rozwiaz2(LL n, LL d) { return d >= 2 && n / d >= 3 ? 1 : 0; } inline LL rozwiaz1(LL n, LL d) { return rozwiaz(rozwiaz2, n / d - 1); } void zrob_test() { LL n; cin >> n; cout << rozwiaz(rozwiaz1, n) << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); zrob_test(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | //Autor: Mateusz Wasylkiewicz //Zawody: Potyczki Algorytmiczne 2018 //Strona: http://potyczki.mimuw.edu.pl/ //Zadanie: PIN, runda probna zwykla //Czas: O(sqrt(n)*(log2(n))^(1+sqrt(log2(n)))) #include <bits/stdc++.h> using namespace std; typedef long long LL; template <class T> LL rozwiaz(T f, LL n) { LL wynik = 0, d = 1; while (d * d < n) { if (n % d == 0) { wynik += f(n, d); wynik += f(n, n / d); } d++; } if (d * d == n) wynik += f(n, d); return wynik; } inline LL rozwiaz2(LL n, LL d) { return d >= 2 && n / d >= 3 ? 1 : 0; } inline LL rozwiaz1(LL n, LL d) { return rozwiaz(rozwiaz2, n / d - 1); } void zrob_test() { LL n; cin >> n; cout << rozwiaz(rozwiaz1, n) << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); zrob_test(); return 0; } |