java 素数计算方法

               

               今天花了一整天的时间在研究java中素数计算的方法,终于给彻底弄懂了!首先,先看看我上午写的错误代码

	public static void main(String[] args){
		for(int i=101;i<=200;i++){
			for(int j=2;j<i/2;j++){
				if(i%j==0)
					break;
				else
					System.out.println(i);	
			}
		}
	}
}

 

当时真是糊涂了,脑子里的思路就是,素数,就是看这个数除以2一直到这个数的一半(开方更准确,我习惯直接除2了),如果都不能整除,则这个数就是素数,抱着这个思路,就写出了if。。。else。。。其实,错也就错在这了。

if语句判定不是素数,跳出循环,可以!但如果一个数刚开始不能被2 整除,就直接执行else语句判定它是素数,太武断了!(101到200这几个数很巧,我这个程序凑巧判断出来了)而且,我的结果输出一个数好几次,因为else在内层循环里,一直执行。

研究这个错误研究半天,知道错那了,可也不会写这个题了,参考网上的代码 ,结果发现,好多作者犯了和我一样的错误,挑一个典型说一下:

 

import java.io.*;
class sa {
    public static void main(String []args) throws  IOException {
      int i,j;
      String a;
     BufferedReader str=new BufferedReader(new InputStreamReader(System.in));
     System.out.println("请输入一个数");
     a=str.readLine();
     int b=Integer.parseInt(a);
     if (b==2) { 
    	 System.out.println("是质数"); 
    	 return; 
    	 }
        double  sqr=Math.sqrt(b);
        long tt=Math.round(sqr);
        for(i=2;i<=tt;i++) {
            if (b%i==0){
            System.out.println("不是质数");
           break;
              }else {
             System.out.println("是质数");
          break; 
    } 
      }
 }

先不说代码很复杂了,输入105,显示105是质数!犯了和我一样的错误!具体就不说了。看到一位作者的正确的代码,思路很奇妙:    

 

 

public class qisi {
	public static void main(String[] args) {
	int sum = 0;
	for (int i = 101; i <= 200; i++){
	for (int j = 2; j <= i; j++) {
	if (i % j == 0 && i == j) {
	sum++;
	System.out.println(i);
	} else if (i % j == 0 && i != j)
	break;
	}
	}
	System.out.println("101-200 之间有:"+sum+"个素数");
}
}

 


理解了作者的结题思路。感觉自己应该想不到,就又研究了一种思路

 

 

 

public class sushu {
	public static void main(String[] args){
		for(int i = 101;i<200;i++){
			int n=0;
			for(int j=2;j<=i/2;j++){
				if(i%j==0)
				n=n+1;
				}
			if(n==0)
				System.out.println(i);
		}
		}
	}

就是内层for循环与外层for循环之间定义一个变量n,在内层for循环中,如果i%j等于0.n自增,最后判断n的值,如果n等于0,就说明i是素数,相比之下,感觉自己的算法,更简单点。

 

判断素数的方法还有很多,今天我算是学到了,也知道for循环魅力无穷,但稍不留神,就一错千里了!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值