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

C#编程

开发平台:

Visual C++

  1. //==================================
  2. // f0621.cpp
  3. // 求素数个数低级编程版
  4. //==================================
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7. #include<string.h>
  8. #include<time.h>
  9. //----------------------------------
  10. int count(unsigned int a){
  11.   int sum=0;
  12.   for(unsigned int x=a; x; x>>=1)
  13.     if(x & 1)  sum++;
  14.   return sum;
  15. }//---------------------------------
  16. void sieve(unsigned int* p){
  17.   for(int i=2; i<=10000; ++i)
  18.     if(p[i/32]&(1<<i%32))
  19.       for(int j=i*i; j<100000000; j+=i)
  20.         p[j/32] &= ~(1<<j%32);
  21. }//---------------------------------
  22. int main(){
  23.   clock_t start=clock();
  24.   unsigned int* p = (unsigned int*)malloc(12500000);
  25.   if(!p){
  26.     printf("no enough memory.n");
  27.     return 1;
  28.   }
  29.   memset(p,255,12500000);
  30.   sieve(p);
  31.   int num=-2;
  32.   for(int i=0; i<12500000/4; ++i)
  33.     num += count(p[i]);
  34.   free(p);
  35.   printf("%d,%7.3fn",num,(clock()-start)/CLK_TCK);
  36. }//=================================
  37.