#include using namespace std; using lint = long long; const int MAX_N = 1e6+10; int prime[MAX_N], dataset[MAX_N]; bool is_prime[MAX_N]; int p = 0; void sieve(int n){ for(int i = 0; i <= n; i++) is_prime[i] = true; is_prime[0] = false; is_prime[1] = false; for(int i = 2; i <= n; i++){ if(is_prime[i]){ prime[p++] = i; for(int j = 2 * i; j <= n; j += i) is_prime[j] = false; } for(int j = 2 * i; j <= n; j += i) dataset[j]++; } } signed main(){ int n; cin >> n; double P; cin >> P; sieve(n); double ans; ans += double(p); for(int i = 2; i <= n; i++){ if(dataset[i]){ double ans1 = 1; for(int j = 0; j < dataset[i]; j++) ans1 *= (1.0 - P); ans += ans1; } } cout << setprecision(10) << ans << endl; }