求
其中为数
的约数的个数,
为常数。
结论发现 范围的数全部满足上述公式,
范围的数只有
个不满足上述公式。
时
t | cnt |
---|---|
1 | 24387 |
2 | 6620 |
3 | 2172 |
4 | 699 |
5 | 214 |
6 | 54 |
7 | 11 |
8 | 0 |
时
t | cnt |
---|---|
5 | 6310 |
6 | 2162 |
7 | 1047 |
8 | 353 |
9 | 152 |
10 | 93 |
11 | 19 |
12 | 5 |
13 | 0 |
时
t | cnt |
---|---|
10 | 3391 |
11 | 1766 |
12 | 1009 |
13 | 692 |
14 | 250 |
15 | 137 |
16 | 70 |
17 | 29 |
18 | 5 |
19 | 2 |
20 | 0 |
时
t | cnt |
---|---|
10 | 69268 |
11 | 53934 |
12 | 27657 |
13 | 18302 |
14 | 13410 |
15 | 8455 |
16 | 4953 |
17 | 3695 |
18 | 2413 |
19 | 1679 |
20 | 858 |
21 | 515 |
23 | 260 |
24 | 110 |
25 | 62 |
26 | 27 |
27 | 19 |
28 | 8 |
29 | 6 |
30 | 0 |
代码如下:
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5; const int times=2; int prime[MAXN]; int num[MAXN],d[MAXN]; void get_di() { num[1]=1; for(int i=2;i<MAXN;i++){ if(!prime[i]){ prime[++prime[0]]=i; num[i]=2; d[i]=1; } for(int j=1;j<=prime[0]&&i<MAXN/prime[j];j++){ prime[i*prime[j]]=1; if(i%prime[j]==0){ d[i*prime[j]]=d[i]+1; num[i*prime[j]]=num[i]/(d[i]+1)*(d[i]+2); break; } num[i*prime[j]]=num[i]*2; d[i*prime[j]]=1; } } } int main(void) { for(int i=0;i<MAXN;i++) prime[i]=num[i]=d[i]=0; get_di(); int cnt=0; for(int i=2;i<MAXN;i++){ if(num[i]>=times*(int)(log(i)/log(2))+1){ cnt++; // printf("%d %d\n", num[i],i); } } printf("%d\n", cnt); }