二进制插入_牛客题霸_牛客网
目录
二进制插入_牛客题霸_牛客网
给定两个32位整数n和m,同时给定i和j,将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。
测试样例:
1024,19,2,6
返回:1100
理解:拿测试用例画张图来给大家理解一下(主要看红色框框的图)
思路:
其实就是将m左移j位,然后进行相加,题目说明:m覆盖的位置都是0,因此使用或运算就可以解决该问题
代码:
import java.util.*;
public class BinInsert {
public int binInsert(int n, int m, int j, int i) {
//m左移
m <<= j;
//m插入n中
n |= m;
//返回m
return n;
}
}
查找组成一个偶数最接近的两个素数_牛客题霸_牛客网
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
思路:
要找一个偶数最接近的两个素数,那就直接把这个偶数从中间分开(num / 2),此时分开后的两个数字一定是最接近的,接着判断这两个数字是否是素数,如果都是素数,那么就返回,如果不是,那么一个+1,一个-1。
代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt() / 2; //题目说明已经是偶数了
int left = num;
int right = num;
//当left和right都是质数时,则为结果
while( !isPrime(left) || !isPrime(right)){
left--;
right++;
}
System.out.println(left+"\n"+right);
}
//判断是否为质数
public static boolean isPrime(int num){
for(int i = 2; i <= (int)Math.sqrt(num); ++i){
if(num % i == 0){
return false;
}
}
return true;
}
}