voidjoin(int x, int y){ int a = find(x), b = find(y); fa[a] = b; }
voidinit(){ //线性筛 for (int i = 2; i <= b; ++i) { if (!vis[i]) prim[cnt++] = i; for (int j = 0; j < cnt; ++j) { if (1ll * i * prim[j] > b) continue; vis[i * prim[j]] = true; if (i % prim[j] == 0) break; } } for (int i = 1; i <= b; ++i) fa[i] = i; }
intmain(){ cin >> a >> b >> p; init(); for (int i = 0, x; i < cnt; ++i) { if (prim[i] < p) continue; x = prim[i]; for (int j = 1; j * x <= b; ++j) { if (j * x >= a) join(x, x * j); } } int ans = 0; for (int i = a; i <= b; ++i) { if (fa[i] == i) ++ans; } cout << ans; return0; }