素数计算
文章平均质量分 76
gemenhao
挑战素数筛法, 一秒计算10亿太容易
展开
-
素数筛法系列之1 简单筛法实现
让你写一个程序, 计算10亿(10^9)内素数(写入内存, 不必输出), 你能在2G的主流cpu上10秒做到?.看看这个作者的实现, 其实0.5秒就够了. http://code.google.com/p/primesieve/ 如何快速枚举n以内的素数, 目前最快的算法还是 sieve of Eratosthenes要高效的实现起来并不那么容易, 一定程度上可考察你的基本功, 尤其是如何去优化程序方面的功底.下面是我写的一端小程序, 看看有什么问题./* 为原创 2011-03-21 20:11:00 · 1062 阅读 · 1 评论 -
素数筛法系列之4 预先删除小素数
做区间筛法的时候, 我们总是从因子2, 3, 7 , .... 开始直到最后一个平方根因子的筛。 有没有办法介绍不必要的计算, 比如每个区间都从19往后筛, 一定程度上较少的筛法, 提高性能。 下面给出一个实现方案。原创 2011-05-29 17:30:00 · 825 阅读 · 1 评论 -
素数筛法系列之5 完整实现
#include #include #include #include #define FACT (255255 * 1) // 3 * 5 * 7 * 11 * 13 * 17 = 255255#define ST 7#define MAXN ((1u #define MASKN(n) (1 > 1) & 7))#define MOVE 4#define BLOCKSIZE (FACT #d原创 2011-05-30 21:04:00 · 988 阅读 · 1 评论 -
素数筛法系列之5 完整实现2
// http://acm.nudt.edu.cn/~twcourse/PrimeNumberGeneration.html#a3#include #include #include #include #define ST 7#define MOVE 4#define BLOCKSIZE (510510 * 4) // 2 * 3 * 5 *原创 2011-06-21 11:56:00 · 927 阅读 · 1 评论 -
大范围素数筛法性能测试(2^64)
目前网上能找到有源代码的最快素数筛法是ecprime和primesieve(n 算法是高度优化的(the classical segmented sieve of Eratosthenes),自己实现素数筛法程序primenumber性能与primesieve相当. 两个程序性能与机器cpu的缓存L1/L2/L3大小密切相关. 下面给出两程序单线程benchmark:原创 2011-03-10 14:25:00 · 2759 阅读 · 9 评论 -
素数筛法系列之2 分段筛法思想
素数分段筛法指的是 the segmented sieve of EratoSieve, 将计算区间划分成若干个区间,分别计算出每一个区间的素数, 一种分治算法的实现. 与传统筛法相比, 能更好的利用cpu的缓存, 大幅提升内存访问的性能( >3 倍),还能减小对内存的需求. 举个例子, 计算100亿以内的素数, 我们把100亿均分成100100等分, 每个区间长度为1亿, 然后计算每个长度为1亿的区间素数. 问题是区间长度取多少整体筛法性能最好? 按我前面描原创 2011-03-22 19:40:00 · 2270 阅读 · 0 评论