`

求质数的优化算法示例

    博客分类:
  • java
阅读更多

public static void primeDemo(int N)  {

  List<integer></integer> list = new LinkedList<integer></integer>();
  list.add(2);
  for (int i = 3; i < n; i++) {
   // 偶数,就跳过,它肯定不是质数
      if (i % 2 == 0)
           continue;
   // 判断3,5,7,9……i/2是否有i的因子
       int j = 3;
       while (j <= i / 2 && i % j != 0)
            j += 2; 
   // 若上述数都不是i的因子,则i是质数
      if (j > i / 2) {
           list.add(i);
       }
  }
  for(int prime : list) 
        System.out.println(prime);
}

分享到:
评论
14 楼 topkinghat 2011-09-30  
这个叫优化?哎...忽悠啊!
13 楼 fins 2006-12-27  
给楼主两个建议吧

1 以后不要起这么有"诱惑性"的标题名字
到现在我也没明白你为什么认为你那个算法是"优化"的
那不优化的算法是什么样的?遍历从2到n?
地球上任何一个小学毕业的人都不会那么做的

2 "正在学习datastructure和algorithm中" 看到这句话就不舒服
数据结构 和 算法 真的比 datastructure和 algorithm 难输入吗?
其实我老鄙视那种成天说话夹着英文的人了
一没有国外背景 二不是港澳台胞 大家都是中国人 何必呢
datastructure和algorithm 又不像 spring hibernate这类的东西是专有名词 你就直接写中文呗 
我四级才30多分 专业英语开卷 在文曲星的帮助下我才61分 :'(

以上只是些我个人的看法  没有攻击的意思
只是些建议 别多想哈

12 楼 qiezi 2006-12-26  
这个还可以再优化,只需要求模“2到'M的平方根'之间的质数”就可以了,也就是除你上面的list里面的元素,list初始时需要放入一个2,从2开始找质数,一直找到M的平方根,最后把list里面N以后的元素返回。
11 楼 pro_ygw 2006-12-26  
首先谢谢fins & ddandyy & renyangok 以及各位的热心参与,这是我第一次在JAVAEYE上发布的第一篇article,对比了你们给的建议,最后测试还是遍历2到n的平方根最为捷径(快).代码如下:
[color=violet]
public class PrimeNumberDemo{   
  public static void main(String[] args){   
   	int number = 10;// 初始化number,即[N,M]中N的值
	boolean isPrime = true;
	System.out.println("The First prime numbersare \n");
	List<Integer> list = new LinkedList<Integer>();
	while (true) {
		isPrime = true;
		int tempSqrt = (int) Math.sqrt(number);
		for (int divisor = 2; divisor <= tempSqrt; divisor++) {
			if (number % divisor == 0) {
				isPrime = false;
				break;
			}
		}
		if (isPrime) 
			list.add(number);
		number++;
		if (number >= 100000)  // 100000即代表M的值
			break;
	}
	for (int primenumber : list)
		System.out.println(primenumber);
    }   
}
[/color]
正在学习datastructure和algorithm中
10 楼 renyangok 2006-12-26  
http://www.blogjava.net/renyangok/archive/2006/11/20/82278.html
看看我转的这篇文章吧,好几种权威的方法呢
9 楼 Elminster 2006-12-25  
这个问题,好一些的做法是保存一个当前已经得到的质数列表,这样在做除法判断的时候只需要判断那些质数,而不必从 2 到 sqrt(n) 一个一个去检查。对于较大的 n ,这样做可以节省许多时间。
8 楼 fins 2006-12-25  
楼上这个算法是对的 但是应该再优化一点

for(int divisor=2; divisor<=math.sqrt(number);divisor++){
改成
int tempSqrt =(int)Math.sqrt(number);
for(int divisor=2; divisor<= tempSqrt ;divisor++){ 


这样可以避免每次循环都进行开方运算
7 楼 ddandyy 2006-12-25  
google了一下 LZ这个好像在别的地方也有  不知道是不是LZ贴过去的
另外又看到了这个

public class PrimeNumber{
  public static void main(String[] args){
    int count=1;
    int number=2;
    boolean isPrime=true;
      System.out.println("The First prime numbersare \n");
      while(count<=100){
        isPrime=true;
          for(int divisor=2; divisor<=math.sqrt(number);divisor++){ 
            if(number%divisor==0){
              isPrime=false;
              break;
             }
            }
           if(isPrime){
             if(count%10==0){
             System.out.println(number);
           }
           else
             System.out.print(number+"   ");
             count++;
           }
            number++;
      }
    }
} 

不知道对不对


具体应该问大法师啊
6 楼 fins 2006-12-25  
pro_ygw 写道
算法这个东西我还没去学过,我只是觉得现在比较方便,这个思想还是原来接触C的时候学的,要确实用算法的话,还是fins大哥说得对--遍历2到n的平方根. 请问你们有什么好的学习数据结构和算法的书籍和资料吗?

没有
我学的也不好
只是碰巧知道了求质数的一个简单的算法
5 楼 zhenyu33154 2006-12-25  
算法是什么,还不是解决问题的方法,关键是解决问题所用的方法的好坏,在算法中,对数据结构的使用比较重要,用得好,你的程序质量好效率高,用得不好,那就难说了!
4 楼 pro_ygw 2006-12-25  
算法这个东西我还没去学过,我只是觉得现在比较方便,这个思想还是原来接触C的时候学的,要确实用算法的话,还是fins大哥说得对--遍历2到n的平方根. 请问你们有什么好的学习数据结构和算法的书籍和资料吗?
3 楼 zhenyu33154 2006-12-25  
这个肯定要比那个一直遍历下去要节省资源些,因为在遇到不符合条件的就不去做,直接进入下一轮的判断。
2 楼 fins 2006-12-25  
?? 楼主 这个为什么是优化的算法呢?
我觉得比常用的算法还要慢啊
常用算法是 遍历 2 到 n的平方根
楼主的方法是遍历 2到 n/2
明显慢很多啊


1 楼 Elminster 2006-12-25  
你管这个叫优化算法?咳咳 ……

相关推荐

    JS实现计算小于非负数n的素数的数量算法示例

    JS算法示例: [removed] var countPrimes = function(n) { let flagArray = [], result = 0; for(let i = 2; i &lt; n; i++){ if(flagArray[i] === undefined){ flagArray[i] = 1; result++;

    C/C++常用算法手册.秦姣华(有详细书签).rar

    涵盖广泛 精炼的理论讲述搭配大量经典算法示例,学习查询兼而有之。 阐述到位 算法思想、算法实现和完整示例合理搭配,相辅相成。 示例完善 示例分析精准,代码注释精确,每段代码皆可通过编译执行。 计算机技术的...

    Java 正整数分解质因数算法示例.rar

    Java实现正整数分解质因数的例子。如果数学好,相信这个代码不会难。在本例子中,输入90,打印出90=2*3*3*5。解题思路和方法:对n分解质因数,需要先找到一个最小的质数k,... 后附有本示例完整的源代码下载,请参考。

    javascript实现计算指定范围内的质数示例

    本文实例讲述了javascript实现计算指定...算法来源:《Java求质数的几种常用算法》 javascript计算指定范围内的质数源代码: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or

    跟我学Java面向对象程序设计技术及应用——识别某个自然数是否为质数(素数)的Java程序实现示例.doc

    跟我学Java面向对象程序设计技术及应用——识别某个自然数是否为质数(素数)的Java 程序实现示例 1 什么是质数(素数) 1 什么是质数(素数) 对于什么是质数(Prime Number),读者可以查询百科。在百科中的定义...

    vcmianshi.rar_c++ thread_算法笔试面试_算法面试题_马戏团

    C++程序员面试、笔试经常遇到的一些算法示例集 pdf,相关内容:字符串匹配的KMP算法,括号匹配检测、求一个数组的最长递减字序列、一些数字题求解,输出一个字符串的所有组合,马戏团表演问题、Thread.sleep 与obj....

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    本书介绍了构建更优雅、更有效的软件的更省时技术、算法和技巧。这些方法都非常实用,而且很有趣,有时候会让人觉得意想不到,就像在解好玩的谜题一样。相信任何想要得到提高的程序员都能从本书中受益匪浅。 由在IBM...

    【推荐】Matlab精选学习资料+练习源码大全+算法课件大合集.zip

    推荐,Matlab精选学习资料+练习源码大全+算法课件大合集。 一、Matlab示例源码 经典-matlab经典算法的程序 Matlab时间序列-AR 基于仿射变换的数字图象置乱...最优化计算机原理与算法程序设计 模拟退火算法 常用算法PPT

    Python实现的寻找前5个默尼森数算法示例

    本文实例讲述了Python实现的寻找前5个默尼森数算法。分享给大家供大家参考,具体如下: 找前5个默尼森数。 若P是素数且M也是素数,并且满足等式M=2**P-1,则称M为默尼森数。例如,P=5,M=2**P-1=31,5和31都是素数,...

    Python实现简单求解给定整数的质因数算法示例

    本文实例讲述了Python实现简单求解给定整数的质因数算法。分享给大家供大家参考,具体如下: 接着做题遇到求解质因数分解的问题,思想很简单,就是需要遍历从1到该整数本身,并且判断当数字为质数时加入列表最后输出...

    Delphi中的经典RSA算法源码示例

    内容索引:Delphi源码,算法相关,RSA Delphi中的经典RSA算法源码示例,功能有生成随机数,生成密钥,加密与解密,质数寻找启始点等,可神化界面,相信对大家有用处,源代码是用纯Delphi代码实现,无需任何第三方控件...

    Matlab示例源码30个合集.zip

    Matlab示例源码30个合集: MATLAB DCT水印源程序代码.rar MATLAB GUI实现动态画图曲线的源程序代码.rar MATLAB中colorbar的设置 源程序代码.rar MATLAB中的基本语法和...蒙特卡洛法求椭圆面积的MATLAB源程序代码.rar

    深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表

    PHP冒泡PHP二分法PHP求素数PHP乘法表 PHP冒泡法 示例复制代码 代码如下://PHP冒泡 从小到大function maopao(&$arr){ if(!empty($arr)) { for($i=0;$i$arr[$j]) { //开始交换 $temp = $arr[$i]; $arr[$i] = $...

    Winograd DFT算法

    我们要讨论的第一种精简必要乘法数量的... 下面N=5的示例详细地说明了构造Winograd DFT算法的步骤。  例 N=5的Winograd DFT算法  在由[5]给出的Rader算法的一个表达式中,用X[0]代替x[0]的形式如下:  如

    欧拉公式求圆周率的matlab代码-algorithm:各种算法的实现

    欧拉公式各种算法的实现示例 C ++ 17在从数据结构到数论算法的各个领域中实现算法。预期在基于算法的研究和开发中需要进行计算机实验的情况,或参加编程竞赛的情况时,可以用作“实现示例”或“库”。 分类 内容 ...

    python-algorithms:来自各种来源以及自己创建的算法实现的集合

    拉宾·米勒素数检验 Eratosthenes筛子用于质数 二元搜寻 计算数组中的反转 选择数组中的ith顺序统计量 图形数据结构(有向和无向) 图算法 拓扑排序 最短的啤酒花 DFS BFS 连接的组件 迪克斯特拉的最短道路-O...

    RSA-Algorithm:RSA算法演示程序,仅供了解RSA算法实现原理

    RSA-AlgorithmRSA算法演示程序,仅供了解RSA算法实现原理RSA算法原理找出两个"很大"的质数:P & QN = P * QM = (P - 1) * (Q - 1)找出整数E,E与M互质,即除了1之外,没有其他公约数找出整数D,使得E*D除以M余1,即 ...

    Java开发技术大全(500个源代码).

    showOrder_1.java 演示操作数求值顺序示例1 showOrder_2.java 演示操作数求值顺序示例2 sign.java 用条件运算实现符号函数示例 signByIF.java 用if语句实现符号函数示例 triangleStar.java 输出一个由*组成的...

Global site tag (gtag.js) - Google Analytics