void era(int n) {
int m = sqrt(n + 0.5);
memset(vis, 0, sizeof(vis));
for (int i = 2; i <= m; i++) if(!vis[i])
for (int j = i * i; j <= n; j += i) vis[j] = 1;
}
OR
void era(int n) {
int m = sqrt(n + 0.5);
memset(vis, 0, sizeof(vis));
for (int i = 2; i <= m; i++) if (!vis[i])
for (int j = i; i * j <= n ; j++) vis[i * j] = 1;
}