博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高效判断素数方法
阅读量:5841 次
发布时间:2019-06-18

本文共 1239 字,大约阅读时间需要 4 分钟。

孪生素数: 所谓孪生素数指的是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了

若n≥6且n-1和n+1为孪生素数,那么n一定是6的倍数。
证明:
∵ n-1和n+1是素数 ┈ 
∴ n-1和n+1是奇数
∴ n是偶数,即n是2的倍数 ┈┈┈┈┈ ②
假设n不是3的倍数,得:
n=3x+1 或 n=3x+2,
如果n=3x+1,则n-1=3x,与①违背,故n≠3x+1;
如果n=3x+2,则n+1=3(x+1),与①违背,故n≠3x+2;
∴假设不成立,即n是3的倍数,又有②得结论:
n是6的倍数。
由上面的规律可以推出下面结论:
若x≧1且n=6x-1或n=6x+1不是素数,那么n一定不是2和3的倍数。
证明:
∵n=6x-1或n=6x+1,即n=2(3x)-1或n=2(3x)+1或n=3(2x)-1或n=3(2x)+1。
∴n一定不是2和3的倍数。
素数出现规律:
当n≧5时,如果n为素数,那么n mod 6 = 1 或 n mod 6 = 5,即n一定出现在6x(x≥1)两侧。
证明:
当x≥1时,有如下表示方法:
┈┈ 6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1┈┈
不在6x两侧的数为6x+26x+36x+4,即2(3x+1),3(2x+1),2(3x+2),它们一定不是素数,所以素数一定出现在6x的两侧。
 
1 #include
2 #include
3 #include
4 #include
5 #define LL long long 6 using namespace std; 7 int n,m,p; 8 bool judge(int num) 9 {10 if(num==2||num==3)11 return true;12 13 if(num%6!=1&&num%6!=5)14 return false;15 16 for(int i=5;i*i<=num;i+=6)17 if(num%i==0||num%(i+2)==0)18 return false;19 20 return true;21 }22 int main()23 {24 scanf("%d%d",&n,&m);25 for(int i=1;i<=m;i++)26 {27 scanf("%d",&p);28 if(judge(p)&&p!=1)printf("Yes\n");29 else printf("No\n");30 }31 return 0;32 }

 

转载地址:http://zwtcx.baihongyu.com/

你可能感兴趣的文章
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
Java I/O操作
查看>>
灰度图像和彩色图像
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
java只能的round,ceil,floor方法的使用
查看>>
将txt文件转化为json进行操作
查看>>
我的2014-相对奢侈的生活
查看>>
Java设计模式
查看>>
华为OJ 名字美丽度
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
基本概念复习
查看>>
红黑树
查看>>
【数据库】
查看>>
WindowManager.LayoutParams 详解
查看>>
安卓中数据库的搭建与使用
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>