首页 > 其他分享 >郑轻工 3097. 筛质数 + 二分 = 小模拟

郑轻工 3097. 筛质数 + 二分 = 小模拟

时间:2023-11-26 14:55:50浏览次数:31  
标签:二分 int 质数 pri System 3097 dx println out

import java.util.Arrays;
import java.util.Scanner;

class Main {
    static int[] pri = new int[100];
    static int idx;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int x = sc.nextInt();
        init();

//        System.out.println(nearprime(x));
//        System.out.println(nearprime(97 - x));

        System.out.println(nearprime(x) * nearprime(97 - x));
    }

    private static void init() {
        for (int i = 2; i <= 100; i ++ ) {
            int now = i;
            boolean f = true;
            for (int j = 2; j <= now / j; j ++ ) {
                if (now % j == 0) f = false;
            }

            if (f) pri[idx ++ ] = now;
        }
    }

    private static int nearprime(int x) {
        int fl = 0, fr = idx - 1;
        while (fl < fr) {
            int mid = fl + fr + 1 >> 1;
            if (pri[mid] <= x) fl = mid;
            else fr = mid - 1;
        }

        int sl = 0, sr = idx - 1;
        while (sl < sr) {
            int mid = sl + sr >> 1;
            if (pri[mid] >= x) sr = mid;
            else sl = mid + 1;
        }

        int dx = 0x3f3f3f3f;
        if (pri[fl] <= x) dx = Math.abs(x - pri[fr]);
        int dy = 0x3f3f3f3f;
        if (pri[sl] >= x) dy = Math.abs(x - pri[sr]);

//        if (x == 15) {
//            System.out.println("debug dx -> " + dx);
//            System.out.println("debug dy -> " + dy);
//        }

        if (dx <= dy) return pri[fl];
        return pri[sr];
    }
}

标签:二分,int,质数,pri,System,3097,dx,println,out
From: https://www.cnblogs.com/llihaotian666/p/17857244.html

相关文章

  • 二分图匹配---Munkres算法(匈牙利算法)
    在任务指派问题(如n项工作由n个人承担,每个人完成不同工作所花时间不同,那如何分配使得花费的时间最少)以及一些多目标检测任务中的数据关联部分(如一个目标有多个特征点,有多个目标时检测到的特征点属于哪一个目标的问题)常常会看到Munkres算法,这里从原理及实现上简单介绍一下Munkres算......
  • 循环嵌套 质数
    7-1循环嵌套计算s=1+(1+2)+(1+2+3)+……+(1+2+……+n)。输入格式:输入在一行中给出n的值。输出格式:在输出行显示计算出的结果。输入样例:在这里给出一组输入。例如:20输出样例:在这里给出相应的输出。例如:sum=1540解题思路:1.观察需要计算的式子可知,需要计算n次......
  • 二分查找知识总结
    整数二分:二分的本质并不是单调性,而是从一半满足一半不满足的区间中找到边界点。模板题:数的范围给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回 -1-1。输入格式第一......
  • 二分查找法
    <script>functionm(num,list){varlow=0;varheight=list.length-1;while(low<=height){varmidder=parseInt((low+height)/2)if(num==list[midder])......
  • Java学习—二分法查找(二)
    BM18 二维数组中的查找描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给......
  • 二分查找图解
    二分查找图解使用二分查找的前提是所给的元素集合必须是单调的。整数二分查找最后一个小于等于q的元素的下标元素存在元素不存在查找第一个大于等于q的元素的下标元素存在元素不存在浮点数二分高效的牛顿法......
  • 二分图最大匹配的必须边和可行边
    以下考虑完备匹配(非完备匹配要用到网络流)给定一张二分图,其最大匹配方案不一定是唯一的。若任何一个最大匹配方案的匹配边都包括\((x,y)\),则称\((x,y)\)为二分图匹配的必须边。若\((x,y)\)至少属于一个最大匹配的方案,则称\((x,y)\)为二分图匹配的可行边以下证明假设我们已经求出......
  • 二分查找
    算法入门第一题   二分查找思路:在一个升序的list中,用中间数(mid)来进行匹配,如果target比中间数大,说明target在list右边,left=mid+1,如果target比中间数小,说明target在list左边,right=mid-1fromtypingimportListclassSolution:defsearch(self,nums:List[int],t......
  • Java学习—二分法查找(一)
    1、二分查找(binarysearch)二分查找(binarysearch),也称折半搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且......
  • 二分查找
    一、二分查找介绍首先使用二分法的前提是这个数组或者序列是排好序的。对于一个排好序的数组(升序),如果要让我们从中找一个指定的数并输出它的下标,我们可以直接暴力枚举,时间复杂度为O(n),当我们使用二分查找的时候它的时间复杂度为O(logn)二分法的核心思想就是:每次都将查询的范围......