Dut oj1041 打表筛选素数 + log2函数使用

来源:互联网 发布:apache 去掉index.php 编辑:程序博客网 时间:2024/06/08 00:45
想着把很久以前做的题目再回顾一下啊
这个题目就是给两个整数 ab 先求出ab之间非素数的整数个数 包括ab
然后再求这个数的log+1
改进了两个地方 一个是log用cmath的库函数 log2
另一个是 这次素数打表了
bool型的 100w的一个数组正好是1mb

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;const int maxn=1000001;bool arr[maxn];void init(){    int i,j;    memset(arr,0,sizeof(arr));    arr[1]=0;    arr[2]=1;    for(i=3;i<maxn;i+=2)    arr[i]=1;    for(i=3;i<maxn;++i)    {        if(arr[i])        {            for(j=i+i;j<maxn;j+=i)            arr[j]=0;        }    }}/*int log(int a){    int ca=1;    for(int i=0;i<1000;i++)    {        if(ca>a)        {            return i;            break;        }        else            ca*=2;    }}*/int main(){    init();    int a,b,i,counter=0;    scanf("%d %d",&a,&b);    for(int i=a;i<=b;++i)    {        if(!arr[i])        counter++;    }    int res=(int)log2(counter)+1;    printf("%d\n",res);   // printf("%d\n",log(counter));    return 0;}