--正文

看了题解也想了半天。。

被素数的线性筛带跑偏了

#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\n",f[n]);
    }    
    return 0;
    
} 

 

posted on 2016-12-05 14:08  Crutain  阅读(155)  评论(0编辑  收藏  举报