7
回答
JAVA判断是不是质数
极速云服务器,低至1.04元/天>>>   

我想写一个判断是不是质数的代码,但是不知道怎么处理数字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("是质数");
            }
        }  
 }
}
	
 
 
 

 

 
 



举报
曾阳升
发帖于3年前 7回/12K+阅
共有7个答案 最后回答: 3年前
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("是质数");
}
}
}
--- 共有 3 条评论 ---
曾阳升回复 @pcxsvl : 恩啊恩啊,这个看出来了。 3年前 回复
pcxsvl不好意思! 把"a<1"改成"a<=1"; "a==1||a==2||a==3"改成"a==2||a==3"即可。 3年前 回复
Ryan-瑞恩1是质数? 3年前 回复

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

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

唉。。。

--- 共有 1 条评论 ---
曾阳升我加break和不加break好像没啥子区别啊? 3年前 回复

引用来自“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是质数?
    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;
    }
--- 共有 4 条评论 ---
frank_wang回复 @sxgkwei : 好策略!!!赞 3年前 回复
sxgkwei回复 @frank_wang : 我的意思是,,,让i一直跳在奇数上。因为2以后的所有偶数,已经确定不会是质数了啊 3年前 回复
frank_wang回复 @sxgkwei : 中间可能会漏掉吧 如 i=10, num=121 ,i+2=12,跳过了11 3年前 回复
sxgkwei其实,我觉得i在过了3之后,可以一次加2,来进行迭代,这样如果数字特大的话,相当于省下了一半时间呢。 3年前 回复

引用来自“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;
    }
顶部