【JavaSE】练习题 判断一个数是否为素数

在之前C语言中也做过这种题目,那么现在重温一次就当做巩固和顺便熟悉Java语法


首先我们在百度百科查找一下素数相关的定义 

 可以看到百度百科对于素数的介绍就是:素数又称质数,除了1和它本身,不能被其他自然数整除的数叫质数,规定了数字1不是素数也不是合数,那么我们就可以直接排除1了,for循环直接从2开始


解题思路:

本题一共有三种思路来解答:

1.如果一个数字是素数,那么就只能整除1和自己本身。

2.任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于2/n的。

3.任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于根号n的。


首先来说说第一种思路:

如果一个数字是素数,那么就只能整除1和自己本身。

第一步创建main方法

通过scanner获取用户输入的内容并把内容存到变量n中

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//获取用户输入的内容
        int n = scanner.nextInt();//把用户输入的内容存到变量n中
}

 然后我们使用for循环来进行两个数相除,并加上判断条件:如果n模i等于0说明n能被其他数整除,则不符合素数的条件,所以我们sout一下数字n不是素数并且加上break终止循环结束后面代码


        //for循环,排除了1,直接从i=2开始,循环n次
        for (i = 2;i < n;i++) {
            //判断条件:如果用户输入的n模上i等于0的话说明它能被其他数整除,所以不符合素数的条件
            if(n%i == 0) {
                System.out.println("n不是素数:"+n);//打印结果
                break;//终止循环
            }
        }
      

 不是素数的判断已经有了,现在再在for循环外加上一个是素数的条件,如果上面已经判断出该数字不是素数了那么就会因为break而终止循环并结束后面的代码,但是如果上面的for没有判断出这个数不是素数,那么就可以进行我们是素数的判断了


       //如果上述循环中没有符合素数条件的数就会进行判断i是否大于等于用户输入的数字n,如果条件成立                    
       //则代表该数字为素数
        if(i >= n) {
            System.out.println(n + "是素数");//打印结果
        }

 完整代码:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//获取用户输入的内容
        int n = scanner.nextInt();//把用户输入的内容存到变量n中
        int i;
        //for循环,排除了1,直接从i=2开始,循环n次
        for (i = 2;i < n;i++) {
            //判断条件:如果用户输入的n模上i等于0的话说明它能被其他数整除,所以不符合素数的条件
            if(n%i == 0) {
                System.out.println("n不是素数:"+n);//打印结果
                break;//终止循环
            }
        }
       //如果上述循环中没有符合素数条件的数就会进行判断i是否大于等于用户输入的数字n,如果条件成立                    
       //则代表该数字为素数
        if(i >= n) {
            System.out.println(n + "是素数");//打印结果
        }
}

第二种思路:

任何一个数字n,都可以写成 n = a*b的形式。那么必然会有一个数字是小于等于2/n的。

意思就是说我们通过for循环来生成2到n/2这些数,并进行相除,跟上面的代码总体一样,只是for循环生成的数字数量不同,这个种方法更快,只需循环第一种方法的1/2次就行了

由于代码几乎没什么变化就不分布写了,直接上完整代码

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int i;
    for (i = 2;i <= n/2;i++) {
        if(n%i == 0) {
            System.out.println("n不是素数:"+n);
            break;
        }
    }
    if(i > n/2) {
        System.out.println(n + "是素数");
    }
}

第三种思路:

跟第二种思路一样,任何一个数n可以写成n=a*b这样的形式,那么必然有一个数是小于根号n的

那么我们就需要用开根号了,但是在Java中我们如何去得出根号n呢?

答案很简单,我们的Java中自带了一个方法就是Math里面的sqrt,由于Math这个方法是在java.lang这个包里面的,所以不需要我们去import,直接使用就好了

跟上述思路二一样,只是把n/2换成了根号n,即是Math.sqrt(n);

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int i;
    for (i = 2;i <= Math.sqrt(n);i++) {
        if(n%i == 0) {
            System.out.println("n不是素数:"+n);
            break;
        }
    }
    if(i > Math.sqrt(n)) {
        System.out.println(n + "是素数");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值