首页 > 其他 > 详细

2014年4月12日星期六-质数问题

时间:2014-04-13 07:58:37      阅读:418      评论:0      收藏:0      [点我收藏+]

   

   再次写了一次质数的程序:


   需求:输入一个整数,要求程序输出2到该整数内的所有质数,并且每行只能有10个质数输出,并最后输出有多少个质数。


   我的分析思路及程序如下:

   思路分析:需要创建Scanner类来输入一个整数num,然后逐个判断每个整数是否是质数,判断质数的方法是看该整数是否能整除1和整数本身的其他整数,若果没有一个能整除,输出该数是质数,最后记录质数个数并输出。


   步骤:

   1、创建一个Scanner类,类名为scan,并输入整数num;

   2、建立外层for循环,逐个判断范围内的所有整数;

   3、建立内层for循环,当外层循环到的一个整数i时,内层for中用该整数和2到i/2内的所有整数进行取余操作,并记录取余!=0的次数,如果次数为i/2-1时,该整数就为质数;

   4、记录每输出质数次数count,输出质数一次,count++;每10次换行。最后输出总次数便是质数个数。


   程序:

   

   import java.util.Scanner;


   //求质数

   public class ZhiShu {

       public static void main(String[] args){

           Scanner scan = new Scanner(System.in);

           System.out.print("请输入要求的质数范围(2-)?");

           int num = scan.nextInt();//输入整数范围

           int count = 0;//定义质数个数


           for(int i=2;i<=num;i++){//逐个判断整数

           int score = 0;//记录取余不等于0

               for(int j=2;j<=i/2;j++){//该整数取2到整数二分之一范围的余

                   if(i%j!=0){//取余

                       score ++;//取余不等于0,score自加一次

                   }

               }


               if(score == i/2 -1){//判断取余结果是否满足要求

                   System.out.print(i+"\t");//输出

                   count ++;//一个质数自加一次

                   if(count%10 == 0){//10个质数换一次行

                   System.out.println();

               }

           }

       }

       //输出质数个数

       System.out.println("\n"+"2到"+num+"范围内的所有质数是"+count+"个!");

       scan.close();

   }

}


   第二种程序代码:


   import java.util.Scanner;


   //求质数-其他代码

   public class PrimeNumber {

       public static void main(String[] args){

           Scanner scan = new Scanner(System.in);

           System.out.print("请输入查找质数的范围:2-");

           int max = scan.nextInt();

           scan.close();

           int numOfPrime = 0;

           for(int n=2;n<=max;n++){

               int m = (int)Math.sqrt(n);

               int i = 2;

               for(;i<=m;i++){

                   if(n%i==0)

                   break;

               }

               if(i>m){

                   System.out.print(n+"\t");

                   if(++numOfPrime%10 == 0)

                       System.out.println();

               }

           }

           System.out.println("\n共有"+numOfPrime+"个质数");

       }

   }

   

   第三种代码:


   

   import java.util.Scanner;


   //求质数-使用boolean

   public class PrimeNum {

       public static void main(String[] args){

           Scanner scan = new Scanner(System.in);

           System.out.println("请输入查找质数的范围:2-");

           int num = scan.nextInt();

           scan.close();


           int count = 0;

           for(int i=2;i<=num;i++){

               boolean flag = true;

               for(int j=2;j<=i/2;j++){

                   if(i%j==0){

                       flag = false;

                       break;

                   }

               }

               if(flag==true){

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

                   count ++;

                   if(count%10==0){

                       System.out.println();

                   }

               }

           }

           System.out.println("\n共有"+count+"个质数");

       }

   }


   对比自己写的程序,感觉对java中使用到的boolean数据类型没有一个合理利用,算法是最为麻烦的,需要每一个都要取余,而不是使用boolean定义一个数据,然后循环时若有一个整除就可以排除了,简单的判定质数;而不是复杂麻烦的记录取余结果个数,然后对比,使用boolean减少了太多的步骤,思维上的模式还很难转换。


   感觉自己在Java基础方面极为薄弱,今日看类中的public private static protected 抽象类 接口等都很不懂,更是无法做出总结,明日需要再次看看视频然后多写代码,最后看看是否理解一二。


                                           2014年4月12日22时26分记录


2014年4月12日星期六-质数问题,布布扣,bubuko.com

2014年4月12日星期六-质数问题

原文:http://8810701.blog.51cto.com/8800701/1394759

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!