关于素数的思考

假如给你一个32bit的数,要你判断它是不是素数,只需要计算出16bit包含的素数能否被它整除就可以了,能整除的绝对不是素数。

素数分布的猜想:1——n,n趋向于无穷大,素数分布从稠密到稀疏。

模板如下:

#include<cstdio>

template <int MAX> class PrimeTable {
    bool isp[MAX+1];
public:
    PrimeTable() {
        int i,j,k;
        for (int i = 0; i <= MAX; ++i) isp[i] = true;
        isp[0] = isp[1] = false;
        for (i = 2, k = 4;k <= MAX; ++i, k += i + i - 1)
            if ((isp[i]) && (k <= MAX)) {
                for (j = k; j <= MAX; j += i)
                    isp[j] = false;
            } else continue;
    }
    inline bool operator[](int i) { return isp[i]; }
};
PrimeTable<1000005> isp;
int primes = 0,primesto[1000005],prime[1000005];
void Init()
{
    for (int i = 2; i < 1000005; ++i)
    {
        primesto[i] = primesto[i-1] + isp[i];
        if (isp[i]) prime[++primes] = i;
    }
    primesto[0] = primesto[1] = 1;
}
inline int abs(int a) {return a > 0 ? a : -a;}
int main()
{
    int i,t,l,r,re,c;
    scanf("%d",&t);
    Init();
    while(t--)
    {
        scanf("%d",&c);
        re=0;
        i=0,l=c,r=c;
        while(i<1)
        {
            if(l&&isp[l])
            {re=l;i++;}
            if(i<1&&isp[r])
            {re=r;i++;}
            l--;
            r++;
        }
        printf("%d %d\n",re,abs(re-c));
    }
    return 0;
}

 

#define Maxn 1000005
#define Max 1003
for(i=2;i<Max;++i)
     if(!isp[i])
     {
         //primes[num++]=i;
         for(j=i*i;j<Maxn;j+=i)
         {     
             isp[j]=1;
         }
     }

 

posted @ 2013-04-14 20:47  小仪在努力~  阅读(139)  评论(0)    收藏  举报