f0622.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:1k
源码类别:

C#编程

开发平台:

Visual C++

  1. //==================================
  2. // f0622.cpp
  3. // 求素数个数,比较不同方法
  4. //==================================
  5. #include<iostream>
  6. #include<bitset>
  7. #include<time>
  8. using namespace std;
  9. //-----------------------------------
  10. int sieveSTL();
  11. int sieve();
  12. //-----------------------------------
  13. int main(){
  14.   clock_t start = clock();
  15.   cout<<sieve();
  16.   cout<<" "<<(clock()-start)/CLK_TCK<<" secn";
  17.   start = clock();
  18.   cout<<sieveSTL();
  19.   cout<<" "<<(clock()-start)/CLK_TCK<<" secn";
  20. }//----------------------------------
  21. int sieveSTL(){
  22.   bitset<100000000>& p = *new bitset<100000000>;
  23.   p.set();
  24.   int num=100000000-2;           // except i=0,1
  25.   for(int i=2; i<=10000; ++i)
  26.     if(p.test(i))
  27.       for(int j=i*i; j<p.size(); j+=i)
  28.         if(p.test(j) && num--) p.reset(j);
  29.   delete[] &p;
  30.   return num;
  31. }//----------------------------------
  32. int sieve(){
  33.   unsigned int* p = (unsigned int*)malloc(12500000);
  34.   memset(p,-1,12500000);
  35.   int num = 100000000-2;           // except i=0,1
  36.   for(int i=2; i<=10000; ++i)
  37.     if(p[i/32]&(1<<i%32))
  38.       for(int j=i*i; j<100000000; j+=i)
  39.         if(p[j/32]&(1<<j%32) && num--)
  40.           p[j/32] &= ~(1<<j%32);
  41.   free(p);
  42.   return num;
  43. }//==================================
  44.