————————————————素数的快速判断方法————————————————————

1:   当n>=6   且n-1和n+1是孪生素数的话那么n一定是6的倍数。

证明:因为n-1和n+1为素数----①

所以n-1和n+1为奇数----②

   所以n是偶数是2的倍数--③

   假设n不是3的倍数,得:

n=3x+1或n=3x+2,

如果n=3x+1则n-1=3x这和①违背所以n≠3x+1

如果n=3x+2,zen+1=3(x+1)与①违背

所以假设不成立,既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=3*(2x)-1

所以n一定不是2和三的倍数

素数的出现规律:

当n>=5是,如果n是素数那么n mod 6=1或n mod6=5,即n一定出现在6x(x>=1)的两侧.

证明:

当x>=1是,有如下的表示方法:

~~~~~~~6x,6x+1,6x+2,6x+3,6x+4,6(x+1),6(x+1)+1,~~~~~

所以不再6x两侧的数为6x+2,6x+3,6x+4即2(3x+1),3(x2+1),2(2x+2),他们一定不是素数,所以素数出现6x的两侧。

下面附上  快速判断一个数字是否为素数的方法。

 1 bool isPrime(int num)
 2 {
 3     if (num == 2 || num == 3)
 4     {
 5         return true;
 6     }
 7     if (num % 6 != 1 && num % 6 != 5)
 8     {
 9         return false;
10     }
11     for (int i = 5; i*i <= num; i += 6)
12     {
13         if (num % i == 0 || num % (i+2) == 0)
14         {
15             return false;
16         }
17     }
18     return true;
19 }  
时间: 2024-10-01 02:49:56

————————————————素数的快速判断方法————————————————————的相关文章

Codeforces Round #324 (Div. 2) (快速判断素数模板)

蛋疼的比赛,当天忘了做了,做的模拟,太久没怎么做题了,然后C题这么简单的思路却一直卡到死,期间看了下D然后随便猜了下,暴力了下就过了. A.找一个能被t整除的n位数,那么除了<=10以外,其他都可以用长度为n的10或100,1000 ... 来往上加几个数而得到 #include <iostream> #include <stdio.h> #include <set> #include <algorithm> #include <string.h

判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路

定义:约数只有1和本身的整数称为质数,或称素数. 计算机或者相关专业,基本上大一新生开始学编程都会接触的一个问题就是判断质数,下面分享几个判断方法,从普通到高效. 1)直观判断法 最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可.C++代码如下: bool isPrime_1( int num ) { int tmp =num- 1; for(int i= 2;i <=tmp; i++) if(num %i==

普林斯顿公开课 算法1-10:并查集-优化的快速合并方法

应用 渗透问题 游戏中会用到. 动态连接 最近共同祖先 等价有限状态机 物理学Hoshen-Kopelman算法:就是对网格中的像素进行分块 Hinley-Milner多态类型推断 Kruskai最小生成树 Fortran等价语句编译 形态学开闭属性 Matlab中关于图像处理的bwlabel函数 渗透问题 一个N×N的矩阵,判断顶部和底部是否连通就是渗透问题. 下图中左侧的矩阵能渗透,右侧矩阵不能渗透. 渗透问题在电学.流体力学.社会交际中都有应用. 在游戏中可能需要生成一张地图,但是作为地图

vuex中filter的使用 &amp;&amp; 快速判断一个数是否在一个数组中

vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr) { return index < 5 }) }), 如上所示,对于vuex,我们在使用mapState获取state时, 可以使用filter来过滤其中的元素,在filter的回调函数中接受三个参数,第一个是value,即每一个元素的值: 第二个是index, 即每一个元素所在的index, 第三个

js快速判断IE浏览器(兼容IE10与IE11)

在很多时候,我们一般采用navigator.userAgent和正则表达来判断IE浏览器版本,下面介绍用IE浏览器中不同特性来判断IE浏览器   1 判断IE浏览器与非IE 浏览器 IE浏览器与非IE浏览器的区别是IE浏览器支持ActiveXObject,但是非IE浏览器不支持ActiveXObject.在IE11浏览器还没出现的时候我们判断IE和非IE经常是这么写的 ? 1 2 3 function isIe(){        return window.ActiveXObject ? tr

关于素数的快速查找——素数筛选法

利用素数筛选法进行素数的快速查找.原理很简单,素数一定是奇数,素数的倍数一定不是素数.思路如下: 预定义N表示10000,即表示查找10000以内的素数,首先定义数组prime[]对N以内的数进行标记,奇数存为1,偶数存为0,最终实现结果为素数的prime值为1,因此将prime[2]赋值为1(2是素数).之后利用for循环,对N以内的奇数进行遍历(注意for循环的条件控制),for里用if判断是否为素数(奇数),若是,执行内部嵌套的for循环判断该奇数是否为素数,若是则标记为1,若不是则pri

如何快速判断一个文件是否为病毒

先说一下写这篇文章的背景和目的.现在吾爱的『原创发布区』和『精品软件区』人气很旺,发布的软件非常多.但也有一些小人,在发布的软件里插些小玩具,当灰客.论坛派专人检测也是很困难的,工作量太大,查不过来,因此很大程度上要靠用户自己识别,于是就有了这篇文章.需要说明一下的是,这篇文章主要是快速辨别正常文件与病毒,我自己也不是专业人员,方法是我自己总结出来的,很业余,不过我觉得还是有些用处的.如果你有更好的办法,欢迎跟帖提出.下面正文开始. 分析一个文件是否为病毒有多种方法,比如用OD这样的调试器,用H

快速判断二叉树先序遍历 后序遍历

一.知道二叉树的先序/后序遍历和中序遍历(中序必须要知道,不然无法判断),要快速判断后序/先序遍历,首先要了解二叉树的遍历规律 二.二叉树遍历规律 1.三种遍历都有一个规律,就是:逆时针沿着二叉树外缘移动,即方向相同,如下图1: 图1 2. 3.  不同的是他们出发点不同,下面说明他们的出发点和遍历顺序序列 三.二叉树三种遍历 1.先序遍历 先序遍历先从二叉树的根开始,然后到左子树,再到右子树,,如图2 图2 先序遍历序列是ABDCEF,重点是记住第一个字母“A”是根,出发点是根“A” 2.中序

UVA10006 - Carmichael Numbers(筛选构造素数表+快速幂)

UVA10006 - Carmichael Numbers(筛选构造素数表+快速幂) 题目链接 题目大意:如果有一个合数,然后它满足任意大于1小于n的整数a, 满足a^n%n = a;这样的合数叫做Carmichael Numbers.题目给你n,然你判断是不是Carmichael Numbers. 解题思路:首先用筛选法构造素数表,判断n是否是合数,然后在用快速幂求a^2-a^(n - 1)是否满足上述的式子.快速幂的时候最好用long long ,防止相乘溢出. 代码: #include <