再次写了一次质数的程序:
需求:输入一个整数,要求程序输出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
原文:http://8810701.blog.51cto.com/8800701/1394759