您的位置:首页 > 其它

关于素数的思考

2013-04-14 20:47 176 查看
假如给你一个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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: