homework 判断素数

判断素数

【习题描述】

定义一个判断素数的方法isPrime。用户输入1-100以内的任意数字n,通过调用isPrime方法判断从0-n的所有素数,并打印输出。


import java.util.Scanner;
/*
 输入1-100以内的任意数字n,通过for循环输出从0-n中的所有素数,素数只能被1和自身整除。
 如:输入:30 输出:2 3 5 7 11 13 17 19 23 29
 */
class Example7_8 {

    public static void main(String[] args) {


        Scanner sc = new Scanner(System.in);
        System.out.println("请输入1-100中的任意数字:");
        int j = sc.nextInt();
        for (int i = 1; i <= j; i++) {
            if (isPrime(i)) {
                System.out.print(i+" ");
            }
        }

    }
    //素数的判断方法
        private static boolean isPrime(int num) {
            if(num==1){
                return false;
            }
            
            //TODO:求出该数值的2次方根,然后判断2到该值之间是否有可以被整除的数,在“- -”处补全代码
            long sqrtNum=(long)Math.sqrt(num); 
            for(- -){
                if(- -){
                    return false;
                }
            }
            return true;
        }



    }

一开始不明白为什么要开方,后来发现这里涉及到算法。

https://blog.csdn.net/lzxlovegyd/article/details/71340090https://blog.csdn.net/lzxlovegyd/article/details/71340090

(10条消息) 求素数为什么到平方根就行了_风泊月的博客-CSDN博客_为什么判断素数走到平方根就可以了https://blog.csdn.net/hello_word2/article/details/51940092

long sqrtNum=(long)Math.sqrt(num);

首先这条代码会返回num的平方根,如果num不能被整除,则会返回num附近较小的可以被整除的平方根。(这里应该做了一个强制类型转换,将double转成long。)

 e.g. 9的平方根是3,输入11输出的也是3。

素数只能被1和本身整除。所以以前我在求素数的时候,大概都是写个for循环,把素数与1到素数本身中间的所有整数都相除,如果余数不为零,就输出这个素数。

为了减少重复量,开平方后面的数就不用相除了,因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于m的二次方根,另一个大于或等于m的二次方根。那么验证素数时就只需要验证到其平方根就可以了。(减少了除数的范围,被除数还是待验证的整数)


import java.util.Scanner;
/*
 输入1-100以内的任意数字n,通过for循环输出从0-n中的所有素数,素数只能被1和自身整除。
 如:输入:30 输出:2 3 5 7 11 13 17 19 23 29
 */
class Example7_8 {

    public static void main(String[] args) {


        Scanner sc = new Scanner(System.in);
        System.out.println("请输入1-100中的任意数字:");
        int j = sc.nextInt();
        for (int i = 1; i <= j; i++) {
            if (isPrime(i)) {
                System.out.print(i+" ");
            }
        }

    }
    //素数的判断方法
        private static boolean isPrime(int num) {
            if(num==1){
                return false;
            }
            
            //TODO:求出该数值的2次方根,然后判断2到该值之间是否有可以被整除的数,在“- -”处补全代码
           long sqrtNum=(long)Math.sqrt(num);
        for(int m=2;m<=sqrtNum;m++){
            if(num%m==0){
                return false;
            }
        }
        return true;
        }



    }
C语言判断素数(求素数)(两种方法) (biancheng.net)http://c.biancheng.net/view/498.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值