⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f0622.cpp

📁 《C++程序设计教程(第二版)》源代码 源代码中包括运行所需的数据文件,它的格式是*.txt,还有*.in和*.out的。头文件格式是*.h
💻 CPP
字号:
//==================================
// f0622.cpp
// 求素数个数,比较不同方法
//==================================
#include<iostream>
#include<bitset>
#include<time>
using namespace std;
//-----------------------------------
int sieveSTL();
int sieve();
//-----------------------------------
int main(){
  clock_t start = clock();
  cout<<sieve();
  cout<<" "<<(clock()-start)/CLK_TCK<<" sec\n";
  start = clock();
  cout<<sieveSTL();
  cout<<" "<<(clock()-start)/CLK_TCK<<" sec\n";
}//----------------------------------
int sieveSTL(){
  bitset<100000000>& p = *new bitset<100000000>;
  p.set();
  int num=100000000-2;           // except i=0,1
  for(int i=2; i<=10000; ++i)
    if(p.test(i))
      for(int j=i*i; j<p.size(); j+=i)
        if(p.test(j) && num--) p.reset(j);
  delete[] &p;
  return num;
}//----------------------------------
int sieve(){
  unsigned int* p = (unsigned int*)malloc(12500000);
  memset(p,-1,12500000);
  int num = 100000000-2;           // except i=0,1
  for(int i=2; i<=10000; ++i)
    if(p[i/32]&(1<<i%32))
      for(int j=i*i; j<100000000; j+=i)
        if(p[j/32]&(1<<j%32) && num--)
          p[j/32] &= ~(1<<j%32);
  free(p);
  return num;
}//==================================

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -