质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。
刚学习编程时,拿到这个题目时我都是直接写一个带参数的方法,然后调用这个方法,经老师指导告知这是一种面向过程式的思维方式,我们应该用面向对象的思维方式考虑到全局性,假如我有很多地方都要用到这个方法来判断一个数是否是质数,我们可不可以把这个方法看出一个类对象,参数看成这个对象的属性。再到类中定义一个判断质数的方法。在需要用到的地方直接调用这个类中的方法就可以了;这样减少代码的冗余性。
首先定义一个类对象
//封装一个类,计算一个数是否是质数(素数) public class Calc { private int value;//一个属性(其实就是参数) public int getValue() { return value; } public void setValue(int value) { this.value = value; } //封装一个方法,判断这个数是否是质数 public boolean isPirme(){ boolean flag=true;//标识,默认为真 if(value<=1){ // 1既不是质数也不是合数 flag=false; }else{ for(int i=2;i<value;i++){ System.out.println(value+"%"+i+"的余数是:"+(value%i)); if(value%i==0){ //没有余数,说明可以整除 flag=false; //标识这个数不是一个质数 //break; //跳出循环,没有必要再循环下去了 } } } return flag; } }
再定义一个测试类:
public class MainCalc { public static void main(String[] args) { // TODO Auto-generated method stub Calc calc=new Calc();//实例化方法类 int num=72; calc.setValue(num);//写入属性 if(calc.isPirme()){ //调用方法,if()条件判断默认为真 System.out.print(num+"是质数");//如果为真 }else{ System.out.print(num+"不是质数");//如果为假 } } }
测试结果:
那加入我现在要输出1000以内所有的质数呢?其实也很简单,你只需要定义一个参数,给定范围,让后循环调用上面已经写好的方法去判断。
注意,这里得把前面对象类用来测试的几行代码给注释掉:
源码:
public class MainCalc { public static void main(String[] args) { // TODO Auto-generated method stub //求 1000以内所有的质数 Calc calc=new Calc();//实例化方法类 int row=0;//计入个数 for(int i=1;i<=1000;i++){ //遍历1000以内所有的数 calc.setValue(i); //写入 i if(calc.isPirme()){ //调用方法判断 ,默认为真 System.out.print(i+" "); row++; //如果为真那么就 +1; } if(row%20==0){ //每20个一行 System.out.print("\n"); } } System.out.println("1000以内质数的个数:"+row); } }
结果:
勤于思考,多元思维。