质数——6N±1法

6N±1法求素数

  任何一个自然数,总可以表示成为如下的形式之一:

  6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)

  显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然数有可能是素数。所以,除了2和3之外,所有的素数都可以表示成6N±1的形式(N为自然数)。

  根据上述分析,我们只对形如6 N±1的自然数进行筛选,这样就可以大大减少筛选的次数,从而进一步提高程序的运行效率和速度。

  以下代码需要自然数大于10 。

  public int[] getPrimes(int n){

  int []a = new int[200];

  int k=0;

  int num = 5;

  a[0]=1;a[1]=2;a[2]=3;a[3]=5;a[4]=7;

  for(int i=3;i< p>

  for(int j=0;j<2;j++){

  k = 2*(i+j)-1;

  if((k<n)&&k%5==0?false:k%7==0?false:true){< p>

  a[num] = k;

  num++;

  }

  }

  }

  return a;

  }

时间: 2024-08-03 03:37:03

质数——6N±1法的相关文章

质数及其判法

目录 目录地址 什么是质数 数学家们希望用乘法表示所有的正整数 这时候,他们发现,有一些数字(假定为 \(p\) ),它们只能用 \(1\times p\) 的形式表示(不考虑负因数),其它不能写成任何别的形式 对于这种数字,他们称呼为 质数 ,或称呼为 素数 而换句话说,它们只能分解为 \(1\) 乘上它本身:也就是说,它的因数只有 \(1\) 与它本身 这就是质数最重要的性质,也是它的定义 而对于其它的数字,我们称呼为 合数 合数的一些性质我们将会在后面的贴子中提到 质数的判法 对于一个数字

求10000以内质数(以前都是直接打表,现在问到怎么求,瞬间词穷了,还是应该搞懂)

对于求10000以内质数,首先先考虑这个确定性范围的问题,后面再考虑复杂的. 前言摘抄:素数是除了1和它本身之外再不能被其他数整除的自然数.由于找不到一个通项公式来表示所有的素数,所以对于数学家来说, 素数一直是一个未解之谜.像著名的 哥德巴赫猜想.孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家.尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓. 自从有了计算机之后,人们借助于计算机的威力,已经找到了2216091以内的所有素数. 求素数的方法有很多种,最简单的方法是根据素数的定义来求.对

Java打印素数(质数)

要求:打印 2 - 100000 当中的素数与非素数.(素数定义:在大于1的自然数中,除了1和它本身以外不再有其他因数) 1. 常规方式--对正整数n,如果用2到  之间的所有整数去除,均无法整除,则n为质数: // sqrt 法 public static void printPrime1(int num) { boolean[] isPrimes = new boolean[num + 1]; for (int i = 2; i < isPrimes.length; i++) { isPri

js 正则之检测素数

相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的,我就不啰嗦了.我们来说说 js 如何实现它吧. 先来看看什么是素数,在<质数 - 百度百科>里有详细的说明,而且也说了一些求素数的方法,什么6N+1法等..这些什么算法都不是我们要谈的,我们只说正则. 在那篇文章里给出的正则是 /^1?$|^(11+?)\1+$/其实我觉得完全没必要检测 0 1 之类的,因为根据百度百科里的

素数 专题

素数性质总结: 小于x的素数个数(随着x逐渐增大),与x/lnx近似: 素数测试方法,诶拉托色尼筛法:如果n是一个合数,那么n一定有一个不超过sqrt(n)的素因子:6N±1法:对于任何一个自然数,都可以表示为如下形式之一:6N,6N+1,6N+2,6N+3,6N+4,6N+5(N=0,1,2,3...)显然,当N>=1时,只有形如6N+1,6N+5的自然数有可能是素数(代码后面贴上) n!的素因子分解中的素数p的幂为 n/p+n/p2+n/p3+...... 梅森素数:如果m是一个正整数,且2

进程分配

筛质数进阶 之前筛质数程序创建了201个子进程,由于进程号有限,所以可以采用以下三种方法 1.分块法:将201个子进程分成N等份.eg:N=3,那么201个子进程平均分成3份 2.交叉分配法:将201个子进程依次分配给N个进程 3.进程池:用一个进程取质数,并将其丢给下边的线程或者进程处理质数 ===================================================================== 交叉分配法: #include <stdio.h> #incl

Python 常用查找数据结构及算法

一.基本概念 二.无序表查找 三.有序表查找 3.1 二分查找(Binary Search) 3.2 插值查找 3.3 斐波那契查找 四.线性索引查找 4.1 稠密索引 4.2 分块索引 4.3 倒排索引 五.二叉排序树 六. 平衡二叉树 七.多路查找树(B树) 7.1 2-3树 7.2 2-3-4树 7.3 B树 7.4 B+树 八.散列表(哈希表) 8.1 散列函数的构造方法 8.2 处理散列冲突 8.3 散列表查找实现 8.4 散列表查找性能分析 参考书目<大话数据结构> 一.基本概念

数据结构(C语言版)-第7章 查找

7.1 查找的基本概念 查找表:    由同一类型的数据元素(或记录)构成的集合静态查找表:    查找的同时对查找表不做修改操作(如插入和删除)动态查找表:    查找的同时对查找表具有修改操作关键字    记录中某个数据项的值,可用来识别一个记录主关键字:    唯一标识数据元素次关键字:    可以标识若干个数据元素 查找算法的评价指标 关键字的平均比较次数,也称平均搜索长度ASL(Average Search Length) n:记录的个数pi:查找第i个记录的概率 ( 通常认为pi =

哈希容器

目录 hashtable 开链法 hashtable的桶子(buckets)与节点(nodes) haah table的图示 hashtable实现 hashtable的节点实现 hashtable的迭代器实现 hashfunction的设计 unordered_set hashtable 将一系列数放入容器中,将数除以内存的大小M,得到的余数挂在每个篮子下面.篮子的个数M一般取质数,当篮子所挂的链表长度大于篮子个数M时,就要rehashing,扩充篮子的数量(vector二倍扩充,不过扩充以后