您的位置:首页 > 其它

ZOJ Very Simple Counting

2014-07-06 08:43 295 查看
Let f(n) be the number of factors of integer
n.

Your task is to count the number of i(1 <= i <
n) that makes f(i) = f(n).

Input

One n per line (1 < n <= 1000000).

There are 10000 lines at most.

Output

For each n, output counting result in one line.

Sample Input

4
5

Sample Output

0
2

Hint

f(1) = 1, f(2) = f(3) = f(5) = 2, f(4) = 3.

直接枚举肯定超时,用f
保存n的因子个数,s
保存比n小且因子数相同的数个数

#include <stdio.h>
#define MAXN 1000001

int f[MAXN]={0};
int s[MAXN]={0};
int c[MAXN]={0};

int main()
{
//先求出每个数的因子数
for(int i=1; i<MAXN; i++){
for(int j=1; i*j<MAXN; j++){
f[i*j]++;
}
}
//统计比i小且因子数相同的数
for(int i=1; i<MAXN; i++){
s[i]=c[f[i]];
c[f[i]]++;
}
int n;
while( scanf("%d",&n)!=EOF ){
printf("%d\n",s
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: