#include #include #include #include #include #include #include #include #include #include #include using ll = long long; using namespace std; vector divisor(long long n) { vector ret; for (long long i = 1; i * i <= n; i++) { if (n % i == 0) { ret.push_back(i); if (i * i != n) ret.push_back(n / i); } } sort(ret.begin(), ret.end()); return ret; } int main(){ int n; double p; cin >> n >> p; vector prime(n+1, 1), fac; vector yprime(n+1); prime[0] = 0, prime[1] = 0; for (int i = 2; i*i <= n; i++){ if (prime[i]){ for (int j = i*i; j <= n; j += i){ prime[j] = 0; } } } for (ll i = 2; i <= n; i++){ int ex = 0; double tmp = 1.0; fac = divisor(i); if (prime[i]) yprime[i] = yprime[i-1] + 1.0; else { for (auto x : fac){ if ((x != 1) && x < i) ex++; } while (ex){ tmp *= (1-p); ex--; } yprime[i] = yprime[i-1] + tmp; } } cout << yprime[n] << endl; }