`

求质数的优化算法示例

    博客分类:
  • 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  
你管这个叫优化算法?咳咳 ……

相关推荐

    求质数的算法

    在实际编程中,可以结合具体情况选择合适的算法,或者优化算法以适应特定需求,例如,对于非常大的数,可以采用更高级的质数检测方法,如米勒-拉宾素性检验。 为了进一步深入学习,可以查看压缩包内的"求质数算法...

    判断质数的优化算法C代码实现

    以下是一个基于根号优化的C语言实现质数判断的代码示例: ```c #include #include int is_prime(int num) { if (num ) { return 0; } if (num == 2 || num == 3) { return 1; } if (num % 2 == 0 || num ...

    java求素数的经典算法

    ### Java求素数的经典算法 #### 一、引言 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。求解素数是计算机科学中的一个经典问题,特别是在密码学等领域有着重要的应用价值。Java作为一门流行...

    逐步修改素数高效算法

    因此,高效的素数算法应运而生,如埃拉托斯特尼筛法(Sieve of Eratosthenes),米勒-拉宾素性检验(Miller-Rabin Primality Test),和AKS素性检验(Agrawal-Kayal-Saxena Test)等。 "逐步修改素数高效算法"可能...

    素数定义 素数判定证明 素数求解算法

    2. **优化的素性测试算法**: - 使用已知的素数列表进行测试,只检查列表中的素数作为可能的因子。 - 代码示例(C语言): ```c bool IsPrime2(unsigned n) { if (n ) { throw 0; } static unsigned ...

    vb算法,求素数,用程序实现

    在VB(Visual Basic)编程语言中,实现求素数的算法是一项基础且重要的任务。素数是指大于1的自然数,除了1和它自身以外,不能被其他自然数整除的数。例如,2、3、5、7、11等都是素数。下面我们将详细探讨如何使用VB...

    RSA加密算法优化文档及源代码示例

    在本资料中,我们将深入探讨RSA算法的基本原理、优化策略以及C++实现。 首先,RSA的核心在于选择两个大素数p和q,计算它们的乘积n=p*q,然后计算欧拉函数φ(n)=(p-1)*(q-1)。选取一个与φ(n)互质的整数e作为公钥的...

    各种常用算法示例,大家看了就知道啦,都是常用的,算法研究者必备。

    ### 各种常用算法示例解析 #### 一、算法的基本概念 算法是指解决特定问题的一系列明确步骤。并非所有问题都有对应的算法解决方案,有些问题经过深入研究后可以找到有效的解决方法,即存在相应的算法;而有些问题...

    Eratosthenes筛选法求质数.rar

    虽然它不是最高效的质数生成算法,但因其简单易懂,常被用作教学示例。在实际应用中,当n非常大时,可能会考虑使用更复杂的优化算法,如Segmented Sieve或Miller-Rabin素性测试等。 了解Eratosthenes筛选法及其...

    C 语言求素数

    下面是一个简单的C语言实现求素数的代码示例: ```c #include #include int isPrime(int num) { if (num ) return 0; for (int i = 2; i (num); i++) { if (num % i == 0) { return 0; } } return 1; } ...

    openssl rsa 算法示例源码

    本示例是基于openssl库实现RSA算法,并且将其接口封装为Qt版本,便于在Qt应用程序中进行加解密操作。理解RSA算法及其在openssl中的应用,以及如何将这些功能集成到Qt界面中,对于提升开发者在实际项目中的能力...

    visual basic 素数经典算法vb6.0 vb.net关于素数的算法

    以下我们将详细探讨素数的概念、经典的素数算法以及如何用VB实现这些算法。 素数概念: 素数定义为大于1的自然数,除了1和它本身以外没有其他正因数。例如,2、3、5、7、11、13等都是素数,而4、6、8、9等则不是,...

    vc++算法示例10个饿

    素数的求法 素数是指只能被1和自身整除的大于1的自然数。 - **小范围内判断一个数是否为质数** 这里提供了一种简单的方法,通过遍历2到根号n之间的所有数字来判断一个数是否为素数。 ```cpp bool isPrime(int ...

    素数算法素数代码

    ### 知识点一:素数算法基本概念 **素数**是指只能被1和自身整除的大于1的自然数。素数在数学与计算机科学中占有重要地位。素数算法主要用于生成素数或者判断一个给定的数字是否为素数。 ### 知识点二:C语言中的...

    算法:N百万内质数之和

    该算法的关键在于只对质数的倍数进行标记,因此可以显著减少计算量,尤其是当N较大时,这种优化效果更加明显。 **混合策略** 对于较大的范围(如\(10^9\)到\(10^{10}\)之间的数),采用混合策略更有效。首先使用...

    求素数 PrimeNumber

    在给定的文件【素数】PrimeNumber中,可能包含了使用C#实现的各种求素数算法,包括上述的埃拉托斯特尼筛法或其他优化算法。通过分析和学习这些代码,我们可以更好地理解素数算法的实现细节,并提升我们的编程能力。

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

    这个代码示例对于学习JavaScript和算法优化具有一定的教育价值,可以帮助开发者了解如何在JavaScript中有效地查找和处理质数。同时,它也提示我们在编写算法时应考虑效率问题,特别是在处理大量数据时。

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

    在JavaScript编程中,计算小于非负整数n的素数数量是一个常见的算法问题。素数是大于1且除了1和它本身之外没有其他正因数的自然数。本篇文章将详细解析如何使用JavaScript来实现这一算法。 首先,我们来看给出的`...

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

    **Delphi中的经典RSA算法...通过学习和使用这个Delphi RSA算法示例,开发者可以更好地理解和运用非对称加密技术,提高软件的安全性。同时,了解如何在不同Delphi版本中实现兼容性,有助于提升代码的可移植性和维护性。

Global site tag (gtag.js) - Google Analytics