JAVA判断是不是质数

曾阳升 发布于 2014/08/03 20:08
阅读 12K+
收藏 0

我想写一个判断是不是质数的代码,但是不知道怎么处理数字2和数字3,请大家帮我看看代码,帮我改一下。

package training;


import java.util.Scanner;


/**
 * 判断质数
 * @author zengy_000
 *
 */
public class Primes {
 public static void main(String[] args){
 Scanner scan=new Scanner(System.in);//获取键盘输入
 int a=scan.nextInt();//赋值
 if (a <= 1) {  //质数不能小于1
            System.out.println("不是质数");  
        }else if(a==2 ||a==3){	//单独判断,想不到怎么弄
        	System.out.println("是质数");
        }
        int k = (int) Math.sqrt(a);  //取判断数的平方根的整数
        for (int i = 2; i <= k; i++) {  
            if(a % i == 0) {  	//判断
                System.out.println("不是质数"); 
            }else{
            	System.out.println("是质数");
            }
        }  
 }
}
	
 
 
 

 

 
 



加载中
0
pcxsvl
pcxsvl
import java.util.Scanner; 
/**
 * 判断质数
 * @author zengy_000
 *
 */
public class Primes {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);//获取键盘输入
int a=scan.nextInt();//赋值
if (a < 1) {  //质数不能小于1
    System.out.println("不是质数");  
}else if(a==1 || a==2 ||a==3){
    System.out.println("是质数");
    return;
}else{
    int k = (int) Math.sqrt(a);  //取判断数的平方根的整数
for (int i = 2; i <= k; i++) {  
    if(a % i == 0) {     //判断
       System.out.println("不是质数");
       return;
    }
}
System.out.println("是质数");
}
}
}
曾阳升
曾阳升
回复 @pcxsvl : 恩啊恩啊,这个看出来了。
pcxsvl
pcxsvl
不好意思! 把"a<1"改成"a<=1"; "a==1||a==2||a==3"改成"a==2||a==3"即可。
Ryan-瑞恩
Ryan-瑞恩
1是质数?
0
烟头
烟头

for循环的  a % i ==0 应该 break了

另外 是质数的判断应该在循环结束后呀

唉。。。

曾阳升
曾阳升
我加break和不加break好像没啥子区别啊?
0
mingshun
mingshun

引用来自“pcxsvl”的评论

import java.util.Scanner; 
/**
 * 判断质数
 * @author zengy_000
 *
 */
public class Primes {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);//获取键盘输入
int a=scan.nextInt();//赋值
if (a < 1) {  //质数不能小于1
    System.out.println("不是质数");  
}else if(a==1 || a==2 ||a==3){
    System.out.println("是质数");
    return;
}else{
    int k = (int) Math.sqrt(a);  //取判断数的平方根的整数
for (int i = 2; i <= k; i++) {  
    if(a % i == 0) {     //判断
       System.out.println("不是质数");
       return;
    }
}
System.out.println("是质数");
}
}
}
1是质数?
0
Shazi199
Shazi199

int k=a;

if(k>3){

    k=(int)Math.sqrt(k);

}

0
frank_wang
frank_wang
    public static final boolean isPrimaryNum(int num)
    {
        //质数大于1
        if (num <= 1)
            return false;
        
        int sqrt = (int)Math.sqrt(num);
        int i = 2;
        for (; i <= sqrt; i++)
        {
            if (num % i == 0)
                return false;
        }
        return true;
    }
frank_wang
frank_wang
回复 @sxgkwei : 好策略!!!赞
sxgkwei
sxgkwei
回复 @frank_wang : 我的意思是,,,让i一直跳在奇数上。因为2以后的所有偶数,已经确定不会是质数了啊
frank_wang
frank_wang
回复 @sxgkwei : 中间可能会漏掉吧 如 i=10, num=121 ,i+2=12,跳过了11
sxgkwei
sxgkwei
其实,我觉得i在过了3之后,可以一次加2,来进行迭代,这样如果数字特大的话,相当于省下了一半时间呢。
0
0
frank_wang
frank_wang

引用来自“frank_wang”的评论

    public static final boolean isPrimaryNum(int num)
    {
        //质数大于1
        if (num <= 1)
            return false;
        
        int sqrt = (int)Math.sqrt(num);
        int i = 2;
        for (; i <= sqrt; i++)
        {
            if (num % i == 0)
                return false;
        }
        return true;
    }
改进代码如下:
    public static final boolean isPrimaryNum(int num)
    {
        if(num <= 1)
        {
            return false;
        }

        if(num == 2 || num == 3)
        {
            return true;
        }

        int sqrt = (int)Math.sqrt(num);

        if(num % 2 == 0)
            return false;

        for(int i = 3; i <= sqrt; i += 2)
        {
            if(num % i == 0)
                return false;
        }
        return true;
    }
返回顶部
顶部