--正文
看了题解也想了半天。。
被素数的线性筛带跑偏了
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> using namespace std; #define SIZE 20000005 int f[SIZE]; void init(){ int i,j; memset(f,0,sizeof(f)); for (i=1;i*i<=SIZE;i++){ int i2 = i*i,j = 1; while (i2*j < SIZE && i2*j>0){ f[i2*j] ++; j ++; } } for (i=2;i<SIZE;i++){ f[i] += f[i-1]; } } int main(){ init(); int n; while (scanf("%d",&n) != EOF){ printf("%d ",f[n]); } return 0; }