Time Limit: 1000 ms Memory Limit: 128 MB
这道题小编第一反应是暴搜,但是我特特特特别害怕TLE,
所以呢这道题用暴搜的可以去试一试,但是我的做法是正解
代码:
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ys[1000001],ans;//ys表示约数,对应每一个数
void plus(int x){
for(int i=1;(i*x)<=n;i++){
ys[i*x]++;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
plus(i);//把i的倍数全部++,就是包含该因数(即是i的倍数)就++
}
for(int i=1;i<=n;i++){
ans+=ys[i];//求和
}
printf("%d",ans);
}
就这么短,关键想到有点难,大部分人都可能想到直接枚举
想不到NOI的难度,想到NOIP的难度。