关于素数的思考
假如给你一个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; } }
浙公网安备 33010602011771号