关于素数的思考
2013-04-14 20:47
176 查看
假如给你一个32bit的数,要你判断它是不是素数,只需要计算出16bit包含的素数能否被它整除就可以了,能整除的绝对不是素数。
素数分布的猜想:1——n,n趋向于无穷大,素数分布从稠密到稀疏。
模板如下:
素数分布的猜想: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; } }
相关文章推荐
- 关于一个素数的c++程序的思考
- 关于acm素数题解的思考
- [体感游戏]关于体感游戏的一些思考(三) --- 射击
- 关于约瑟夫环的思考(一) c++
- 关于中文编程是解决中国程序员效率的秘密武器的问题思考
- 《游戏编程入门》学习笔记9——关于规则的进一步思考(策划)
- (思考)关于舒适区/学习区/恐慌区
- 移动端关于使用字体的思考
- 如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理(附大幅思维导图)
- 关于 sizeof() 的一些思考
- 思考,关于 学习 和 任务
- 关于项目管理的一点思考!
- 关于程序员如何自我修炼的若干思考
- 关于重复造轮子的一些延续思考
- 关于tomcat的思考
- 关于泛型类和扩展方法的一点思考
- 数据库设计---关于建表的时候选择横表和竖表(纵表)的一点思考
- 关于自我的一些成长思考
- 关于Hash分区的思考
- 关于素数的线性筛法