您的位置:首页 > 其它

CSU 1109 FIbonacci-prime

2012-03-26 00:57 253 查看
实际上就是求第(<=)600000个素数,但是。。要优化内存,要优化速度。。

最重要的要估计第600000个素数有多大,直接打印当然行,但是。。

总之学了素数定理:1/ln(n)的分布。。

# include <stdio.h>

# define MAXN 600005
# define LN 15
# define INDEX(i) ((i) >> 5)
# define OFFSET(i) ((i) % 32)
# define GET_BIT(i) ((ptable[INDEX(i)]>>OFFSET(i)) & 0x1)
# define SET_BIT(i) (ptable[INDEX(i)] |= (0x1<<OFFSET(i)))

int ptable[MAXN];           // int占4个字节32位,因此这里实际上只用MAXN/2大小足够了。。。
int ans[MAXN+1];

int main()
{
int i, j, cnt, k;

for (cnt = 0, i = 3; cnt < MAXN; ++i)
if (!GET_BIT(i)) for (ans[++cnt] = i, j = 2*i; j < LN*MAXN; j += i)
SET_BIT(j);

while (~scanf("%d", &k))
printf("%d\n", ans[k]);

return 0;
}


熬夜等AC,伤不起啊!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: