栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【算法刷题日记之本手篇】二进制插入与查找组成一个偶数最接近的两个素数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【算法刷题日记之本手篇】二进制插入与查找组成一个偶数最接近的两个素数

⭐️前面的话⭐️

本篇文章介绍来自牛客试题广场的两道题题解,分别为【二进制插入】和【查找组成一个偶数最接近的两个素数】,展示语言java。

博客主页:未见花闻的博客主页
欢迎关注点赞收藏⭐️留言
本文由未见花闻原创,CSDN首发!
首发时间:2022年7月23日
✉️坚持和努力一定能换来诗与远方!
推荐书籍:《算法导论》,《算法》
参考在线编程网站:牛客网力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


导航小助手
  • ⭐️二进制插入⭐️
    • 题目详情
    • 解题思路
    • 源代码
  • 总结
  • ⭐️查找组成一个偶数最接近的两个素数⭐️
    • 题目详情
    • 解题思路
    • 源代码
  • 总结



⭐️二进制插入⭐️ 题目详情

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

测试样例:

1024,19,2,6
返回:1100

题目链接:二进制插入

解题思路

基本思路: 位运算

解题思路:
需要将数字m的二进制数位插入到n的第j位到第i位,并且已知n的第j位到第i位都为0,并且m的有效二进制位数小于等于i-j+1,其中二进制的位数从0开始由低到高。


我们可以先让m左移j位,然后再与n按位或运算,就能实现插入操作了。

源代码
import java.util.*;

public class BinInsert {
    public int binInsert(int n, int m, int j, int i) {
        // write code here
        m <<= j;
        return n | m;
    }
}
总结

本题为位运算运用题,只要读懂题,问题不大。

⭐️查找组成一个偶数最接近的两个素数⭐️ 题目详情

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

数据范围:输入的数据满足 4≤n≤1000

输入描述:

输入一个大于2的偶数

输出描述:

从小到大输出两个素数

示例1

输入:

20

输出:

7
13

示例2

输入:

4

输出:

2
2

题目链接:查找组成一个偶数最接近的两个素数

解题思路

基本思路: 判断素数+数学

解题思路:
题目会给我们一个大于2的偶数,并且告诉我们偶数可以拆分成两个素数,让我们输出差值最小的素数对。
那肯定的先有一个判断素数的方法,素数就是大于1和只能被本身和1整除的整数,最简单的判断素数的方式是枚举从2到根号n的数,如果n能够整除任意一个数,就不是素数,否则就是一个素数。

我们可以先将这个n除以2得到half,然后以half为中心,向两端逐个枚举,不妨记左端的数为left,右端的数为right,如果枚举的两个数都是素数那么就是一个素数对,由于素数大于1,因此left>1 right

源代码
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //将偶数除以2,得到的一定是一个整数,从这个整数向两周扩散,判断这两个数是否是素数,如果都是素数,则就是答案
        int half = n / 2;
        int left = half;
        int right = half;
        while (left > 1 && right < n - 1) {
            if (isPrime(left) && isPrime(right)) {
                System.out.println(left);
                System.out.println(right);
                break;
            }
            left--;
            right++;
        }
    }
    //判断是否是素数
    private static boolean isPrime(int n) {
        if (n <= 1) return false;
        
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}
总结

本题为简单数学运用题,如果你知道怎么判断素数,这道题其实很简单。


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号