【Java版oj】day12二进制插入、查找组成一个偶数最接近的两个素数

目录

 一、二进制插入

(1)原题再现

(2)问题分析

(3)完整代码

 二、查找组成一个偶数最接近的两个素数

(1)原题再现

(2)问题分析

(3)完整代码


 一、二进制插入

(1)原题再现

二进制插入__牛客网
        给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。

测试样例:

1024,19,2,6

返回:1100

(2)问题分析

        本题很简单,跟i都没有任何关系,只要读懂题目就可以了。因为他保证n的第i位到第j位都是0,并且m的二进制位数不会超过(i-j),将n的第i位到第j位替换成m的二进制位,其实就是n加上m扩大(2^j)倍后的结果。

1024 :1000  0000  0000

19     :0000  0001  0011

第2位到第6位,就是将高亮红色替换成高亮绿色。

故而将m<<j+n

   

(3)完整代码

import java.util.*;

public class BinInsert {
    public int binInsert(int n, int m, int j, int i) {
        // write code here
        return (n+(m<<j));
    }
}

 二、查找组成一个偶数最接近的两个素数

(1)原题再现

查找组成一个偶数最接近的两个素数__牛客网

        任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

输入描述:

输入一个大于2的偶数

输出描述:

从小到大输出两个素数

示例1

输入

20

输出

7

13

示例2

输入

4

输出

2

2

(2)问题分析

        本题也是一道简单题,首先定一个判断是否为素数的方法(isPrime()),用for循环,从2到给定的数字本身n遍历,如果在这范围内还有数能被n除尽,就范围false,如果一直循环完毕都没有就返回true。

        因为题目要求返回差值最小的素数对,这两个数和为n,将n/2,从n一半的位置开始遍历。判断i和n-i是否同时为素数,如果是则打印,结束循环。

(3)完整代码

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for (int i = num / 2; i >= 2; i--) {
            if (isPrime(i) & isPrime(num - i)) {
                System.out.println(i);
                System.out.println(num - i);
                break;
            }
        }

    }
    public static boolean isPrime(int n) {
        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}


猜你喜欢

转载自blog.csdn.net/m0_63372226/article/details/129630445