Memory-based search method for F (x) Calculation)
# Include <cstdio> # include <cmath> # include <cstring> # include <algorithm> using namespace STD; # define MEM (a) memset (A, 0, sizeof (A) const int maxn = 1000005; int N; int primes [maxn], prime_cnt; int vis [maxn]; int V [maxn]; double F [maxn]; void prime _ () {MEM (V); For (INT I = 2; I <= (INT) SQRT (maxn); I ++) {for (Int J = I * I; j <= maxn; j + = I) if (! V [J]) {v [J] = 1 ;}} prime_cnt = 0; For (INT I = 2; I <maxn-4; I ++) {If (! V [I]) primes [prime_cnt ++] = I ;}} double dp (INT X) {If (x = 1) return 0.0; If (vis [x]) return f [X]; vis [x] = 1; double & Ans = f [X]; int G = 0, P = 0; ans = 0; for (INT I = 0; I <prime_cnt & primes [I] <= x; I ++) {P ++; if (X % primes [I] = 0) {g ++; ans + = dp (x/primes [I]) ;}} ans = (ANS + p) /g; return ans;} int main () {// freopen ("out.txt", "W", stdout); int t; scanf ("% d \ n ", & T); MEM (VIS); MEM (f); prime _ (); int Kase = 0; while (t --) {scanf ("% d ", & N); double ans = dp (n); printf ("case % d: %. 10lf \ n ", ++ Kase, ANS);} return 0 ;}
UV 11762 race to 1