首页 > 其他分享 >判断101-200之间有多少个素数,并输出所有素数

判断101-200之间有多少个素数,并输出所有素数

时间:2022-12-28 19:44:40浏览次数:43  
标签:200 begin 12 end 素数 整除 101

  问题分析:题目中的关键词是素数,什么是素数?素数就是只能被1和自身整除的数,例如11就是素数,但12就不是,因为12可以被1,2,3,4,6和12整除,故12就不是素数;但11就只能被1和11整除,所以11就是素数。

  解决办法:判断素数的经典方法如下是用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之则是素数

方法一 根据基本概念编码

  这里提供一个最基础版的解题代码,直接根据概念编码。

    /**
     * 素数就是只能被1和自身整除的数
     */
    public static void baseSolution() {
        int i = 0, count = 0;
        for (i = 101; i <= 200; i++) {
            if (isPrime(i)) {
                count++;
            }
        }
        System.out.println("素数的个数是:" + count);
    }

    /**
     * 判断一个数是否为素数
     *
     * @param x 待判定的数
     * @return true 是素数
     */
    public static Boolean isPrime(int x) {
        int s = 0, n;
        for (n = 1; n <= x; n++) {
            if (x % n == 0) {
                s++;
            }
        }
        // s > 2说明被1和本身外的数整除
        if (s == 2) {
            // 打印素数
            System.out.println(x);
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }

方法二 根据平方根求余数

  记end的平方根的上整数为sqrtEnd,根据数学原理,我们知道只要在[begin, sqrtEnd]中不存在可以整除end的数,则end也为素数。故根据此原理编写了如下求解源码:


/**
     * 查找 m和n之间的素数
     *
     * @param begin
     * @param end   小于begin时,提示无素数
     */
    private static void sqrtSolution(Integer begin, Integer end) {

        // 更新步长减少遍历次数
        int len = 1;
        if (begin % 2 == 1) {
            len = 2;
        }
        int i = 0, count = 0;
        for (i = begin; i <= end; i += len) {
            if (isPrimeSqrt(i)) {
                count++;
            }
        }
        System.out.println("sqrtSolution 找到的素数个数是:" + count);
    }

    private static boolean isPrimeSqrt(int x) {
        double max = Math.sqrt(x);
        boolean b = false;
        for (int j = 2; j <= max; j++) {
            if (x % j == 0) {
                b = Boolean.FALSE;
                break;
            } else {
                b = Boolean.TRUE;
            }
        }
        if (b) {
            System.out.println(x);
            return b;
        }
        return Boolean.FALSE;
    }

  测试方法就是一个main 函数:

 public static void main(String[] args) {
    baseSolution();
    sqrtSolution(101, 200);
}

标签:200,begin,12,end,素数,整除,101
From: https://www.cnblogs.com/east7/p/17011132.html

相关文章

  • P1036 [NOIP2002 普及组] 选数(DFS + 不降原则)
    P1036[NOIP2002普及组]选数题意​ 在n个数里选k个数,有多少中选法,使得选出来的数的和为素数。不能重复选。思路​ n很小,直接爆搜,但是如果不使用不降原则的话,就......
  • QT编译报错,LNK2001:无法解析的外部符号
    今天按照以前写过的文件依葫芦画瓢新建了一个类,结果报了3行LNK2001的错误,如下图:QT比较恶心的一个地方就是这种错误不能直接看出来是哪出的问题,而且双击也跳......
  • P1434 [SHOI2002] 滑雪(记忆化搜索 DAG)
    P1434[SHOI2002]滑雪题意给你一个\(n\timesm\)的矩阵\(A\),\(A_{i,j}\)代表\((i,j)\)这个地方的高度,你可以从任意一个地方出发,然后走到一个和这个地方四联通......
  • CF327A 1200 *
    题意解析纯暴力枚举,先计算总1数。第一维枚举左端点,第二维枚举右端点,第三维从左端点跑到右端点计算当前区间如果原来是1则减1,原来是0则加1。前缀和优化。一个翻转是1-a......
  • P1018 [NOIP2000 提高组] 乘积最大
    题目传送门前言事先声明!博主是不会写高精的屑。因此此题只拿到了开\(LL\)的\(\color{orange}{60}\)分。但这并不妨碍我练\(DP\)。思路辨析很容易想到,以前\(i\)......
  • Nginx使用总结解决:NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
     如何控制CDN文件在浏览器的缓存时间?腾讯云CDN默认支持 源站的Cache-Control设置 。目前暂不支持配置Cache-Control头部,因此无法在CDN节点上配置max-age,但CDN节点会......
  • 中国各地级市高质量发展指数数据(2000-2021)
    中国各地级市高质量发展指数数据(2000-2021)中国各地级市高质量发展指数数据(2000-2021)中国各地级市高质量发展指数数据(2000-2021) 最新版数据已整理为Excel格式,数据的时......
  • #2153. 「SCOI2005」互不侵犯(状压DP)
    #2153.「SCOI2005」互不侵犯解题思路令dp[i][j][k]表示第i行的状态为j时,共放置k个国王的方案数。状态j的二进制即表示该行的放置方式,例如j为3时,放置的方式为101,即从右......
  • ASEMI肖特基二极管MBR30100CT和MBR40200PT有什么区别
    编辑-Z别看ASEMI肖特基二极管MBR30100CT和MBR40200PT两种型号从名字上看很像,其实他们的参数和封装都是不一样的,具体MBR30100CT和MBR40200PT有什么区别呢?肖特基二极管MBR3010......
  • ASEMI肖特基二极管MBR30100CT和MBR40200PT有什么区别
    编辑-Z别看ASEMI肖特基二极管MBR30100CT和MBR40200PT两种型号从名字上看很像,其实他们的参数和封装都是不一样的,具体MBR30100CT和MBR40200PT有什么区别呢? 肖特基二极管M......