自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (10)
  • 收藏
  • 关注

原创 大范围素数筛法性能测试(2^64)

目前网上能找到有源代码的最快素数筛法是ecprime和primesieve(n  算法是高度优化的(the classical segmented sieve of Eratosthenes),自己实现素数筛法程序primenumber性能与primesieve相当. 两个程序性能与机器cpu的缓存L1/L2/L3大小密切相关.        下面给出两程序单线程benchmark:

2011-03-10 14:25:00 2733 9

原创 素数筛法系列之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 910 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 971 1

原创 素数筛法系列之4 预先删除小素数

    做区间筛法的时候, 我们总是从因子2, 3, 7 , .... 开始直到最后一个平方根因子的筛。 有没有办法介绍不必要的计算, 比如每个区间都从19往后筛, 一定程度上较少的筛法, 提高性能。   下面给出一个实现方案。

2011-05-29 17:30:00 808 1

原创 素数筛法系列之3 减少筛次数

<br />//筛法加速<br />  接上一节, 筛某个素数的倍数的时候只需筛掉奇数倍数, 这样计算量可<br />可减少一般, 再进一步优化, 不筛3的倍数, 只筛6k+1, 6k+5 之类素数,<br />计算量只有原来2/3.<br /><br />static void crossOutFactorMod6(uchar bitarray[], const uint64 start,<br />            const int leng, int factor)<br

2011-03-25 12:03:00 979 1

原创 素数筛法系列之2 分段筛法思想

素数分段筛法指的是 the segmented sieve of EratoSieve, 将计算区间划分成若干个区间,分别计算出每一个区间的素数,  一种分治算法的实现.    与传统筛法相比, 能更好的利用cpu的缓存, 大幅提升内存访问的性能( >3 倍),还能减小对内存的需求.    举个例子, 计算100亿以内的素数, 我们把100亿均分成100100等分, 每个区间长度为1亿,  然后计算每个长度为1亿的区间素数.   问题是区间长度取多少整体筛法性能最好? 按我前面描

2011-03-22 19:40:00 2231

原创 素数筛法系列之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 1051 1

原创 基于数组的位运算4 位数组按bit位整体移动

    对于memmove, memcpy等c语言内存操作函数你一定很熟悉吧, 如果不知道, just go -> search 废话少说直接进入话题. 给你一个函数 bitmemmove(char bitarray[], uint bitleng, uint bitmove);目标是 将内存bitarray整体向低位移动bitmove 个bit 位, 新进来的内存都设置为bit 1,暂且假设( bitmove //move bit from [leftbitshift, leftbitshift + bi

2011-03-18 14:06:00 1390

原创 基于数组的位运算3 按bit位反转数组

  对于给定的数组uchar a[], 以及bit位长度n(不是数组长度) , 如何实现反转算法, 效率一定要高哦大多数人首先想到的是首尾测试每个bit是否为0,1(本博客有关于如何测试,设置bit的). 然后在交换bit位这种算法的复杂度为n, 有没有办法进一步减小复杂度, 哪怕是常数因子也行,  答案是有的, 请看下面详细代码描述, 基本思路是先构造一个16位整数反转表 WordReverse//WordReverse[i] is equal to the bit reverse of

2011-03-18 09:48:00 1418

原创 基于数组的位运算2 计算二进制1的个数

//count bit data array type#if 0    typedef unsigned int stype;    # define SMOVE 5#else    typedef uint64_t stype;    # define SMOVE

2011-03-17 13:19:00 1609 1

原创 基于数组的位运算1 数组位的基本运算

typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint; //vc ++ 6.0 不支持long long//linux gcc  不支持__int64#ifdef _MSC_VER    typedef __int64 int64;     typedef unsigned __int64 uint64;    typedef int64 ltype;#else 

2011-03-17 12:34:00 2517

超快素数筛法程序

64位整数内素数筛法世界最快,如果有更快全面超越我的,请通知我领取500RMB奖励。 MINGW: gcc 4.7.3 CXXFLAG:g++ -march=native [-DW210,-DSAFE=1] -funroll-loops -O3 -s -pipe; Windows 7 x64, AMD X4 641 2.8G / Intel i3 350M 2.26G pi(1e11, 1e11+1e10) = 394050419 4.54 / 5.25 pi(1e12, 1e12+1e10) = 361840208 5.56 / 6.31 pi(1e13, 1e13+1e10) = 334067230 7.03 / 7.66 pi(1e14, 1e14+1e10) = 310208140 8.74 / 9.49 pi(1e15, 1e15+1e10) = 289531946 10.42/11.41 pi(1e16, 1e16+1e10) = 271425366 12.15/13.35 pi(1e17, 1e17+1e10) = 255481287 14.28/15.58 pi(1e18, 1e18+1e10) = 241272176 17.50/18.95 pi(1e19, 1e19+1e10) = 228568014 24.20/25.60 pi(1e18, 1e18+1e6) = 24280 1.16/0.72 pi(1e18, 1e18+1e8) = 2414886 1.80/1.54 pi(1e18, 1e18+1e9) = 24217085 3.81/3.80 pi(1e18, 1e18+1e12)= 24127637783 1546/1640 pi(1e16, 1e16+1e12)= 27143405794 1166/1310 pi(1e14, 1e14+1e12)= 31016203073 880 /

2014-01-23

一亿亿内最快素数筛法

计算10^18素数筛法, 目前这个是国内最快的筛法程序(如果你有比我还快的, 个人给你500元奖励 * 快的倍数),比国外primesieve略慢20%, , 使用非常方便, 输入两个数得到素数个数, 共计3000行C++代码。采用10多个优化点。 [command or number] : 1 e10 s8 PI[1E0, 1E0+9999999999]= 455052511, time use 2750 ms [command or number] : 1e16 1e16+1e9 s10 PI[1E16, 1E16+1000000000]= 27153205, time use 1556 ms [command or number] : 1e18 1e9 PI[1E18, 1E18+1000000000]= 24127085, time use 3351 ms [command or number] : 1e18 1e9 PI[1E18, 1E18+1000000000]= 24127085, time use 3577 ms

2011-09-17

超级快速素数筛法程序

能在非常短的时间内计算出给定区间素数个数 最大计算范围达到10^18 测试结果(输入b)机器为windows 7 2.26G i3 350M 笔记本上的运行 测试结果 I[10000000000000000, 10000001000000000] = 27153205, time use 3589.64 ms I[1000000000000000, 1000001000000000] = 28946421, time use 2699.64 ms I[100000000000000, 100001000000000] = 31019409, time use 2180.62 ms I[10000000000000, 10001000000000] = 33405006, time use 2331.90 ms I[1000000000000, 1001000000000] = 36190991, time use 1837.54 ms

2010-11-22

2秒内 计算10亿内素数筛法

最快的素数筛法, 2秒初始化后在奔腾4上能算出2^31 以内素数个数,之后10ms内算出任意 0-2^31之间素数个数,可快速的计算第k个素数, 枚举区间[n, m](m - n < 10^5)以内素数等 还可以计算第k个数,分因素分解 Prime[78499] = 1000003 b ---------------------start benchmark------------------------ PI(2147483647) = 105097565, time use 232.64 ms k e8 -------------------start find kth prime--------------------- Prime[100000000] = 2038074743, time use 2.94 ms 10^7+100 e5-100 PI[10000100, 10100000] = 6239, time use 0.53 ms o 2^31+1 -------------------start factor prime---------------------- 2147483649 : 3 * 715827883 e9 PI(1000000000) = 50847534, time use 3.25 ms e10 e9 PI[10000000000, 11000000000] = 43336106, time use 1322.91 ms s e10 10 -------------------start print prime------------------------ PI[10000000000] = 455052511 0 prime number in range[10000000000, 10000000010] : s e10 100 -------------------start print prime------------------------ PI[10000000000] = 455052511 5 prime number in range[10000000000, 10000000100] : 10000000019 10000000033 10000000061 10000000069 10000000097

2010-08-18

非常高效的素数筛法程序

最快的素数筛法, 2秒初始化后在奔腾4上能算出2^31 以内素数个数,之后10ms内算出任意 0-2^31之间素数个数,可快速的计算第k个素数, 枚举区间[n, m](m - n < 10^5)以内素数等 k e8 ----------------------start find kth prime--------------------- Prime[100000000] = 2038074743, time use 3262.60 ms e8 e9 PI[100000000, 1000000000] = 45086079, time use 2.01 ms s e9 100 ----------------------start print prime------------------------ PI[1000000000] = 50847534 7 prime number in range[1000000000, 1000000100] : 1000000007 1000000009 1000000021 1000000033 1000000087 1000000093 1000000097

2010-06-18

一次方程求解以及计算器

能够作为计算器。求解一次方程, 并判别各种非法输入。

2009-11-09

哥德巴赫数R(n)计算

超快的R(n)计算程序,2秒能算出从e9开连续 100个偶数的分解为两素数和的对数的个数 R/G(1000000000) = 2274205

2009-08-31

计算 G(10^15)

计算G(10^15) 分拆为两奇素数和的对数个数 耗时100小时在PD with 2M L2

2008-12-25

计算2^31以内孪生素数

2秒钟初始化[0-2147483647]的孪生素数 之后几毫秒内能算出任意0 < n < m < 2^31 间的孪生素数P2[n, m], 内存占用1M多

2008-12-16

PrimeNumber

最快的素数筛法, 3秒初始化后在P4上能算出2^31 以内素数个数,之后10ms内算出任意 0-2^31之间素数个数 (为节省99%的存贮时间而不存贮).

2008-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除