求质数--算法--java编程练习

题目:

求1000以内的所有素数。

一、枚举

1、未优化代码

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

        for(int i=2;i<1000;i++)

        {

             boolean b=true;

            for(int j=2;j<=k;j++)

            {

                if(i%j==0)

                {

                    b=false;

                    break;

                }

            }

            if(b)

            {           

                 System.out.print(i+" ");

            }       

        }       

    }

}

2、优化后代码(双层循环使用最少循环次数)

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

        System.out.print(2+" ");

        for(int i=3;i<1000;i+=2)

        {

             boolean b=true;

            int k=(int)java.lang.Math.sqrt(i);

            for(int j=2;j<=k;j++)

            {

                if(i%j==0)

                {

                    b=false;

                    break;

                }

            }

            if(b)

            {           

                System.out.print(i+" ");

            }       

        }       

    }

}

二、筛法

思路:要求1000以内的所有素数,把2-1000这些数都列出来,2是素数,所有2的倍数都不是素数,划掉;取出下一个幸存的数,划掉它的所有倍数;直到所有幸存的数的倍数都被划掉为止。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

    int n=1000;

    boolean[] a=new boolean[n];

    int k=(int)java.lang.Math.sqrt(n);

     for(int i=2;i<=k;i++)

    {

        if(!a[i])

        {

             for(int j=i;j*i<n;j++)

            {

                 a[i*j]=true;

            }

        }

    }

    for(int i=2;i<n;i++)

    {

        if(!a[i])

        {

             System.out.print(i+" ");

        }

    }

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 50道JAVA基础编程练习题 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    微尘_8957阅读 2,210评论 0 2
  • 50道JAVA基础编程练习题 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    清先生阅读 336评论 0 2
  • 2019年8月8日开始编写,等50题做完了希望不会太晚。 本篇纯属本人的练手作业,本人也不是什么大神,仅供参考。 ...
    墨鸢Wesley阅读 905评论 0 0
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 7,179评论 0 9
  • 【程序21】 题目:求1+2!+3!+...+20!的和 程序分析:此程序只是把累加变成了累乘。 public c...
    微尘_8957阅读 407评论 0 2