> 文章列表 > 强训之【查找组成一个偶数最接近的两个素数和二进制插入】

强训之【查找组成一个偶数最接近的两个素数和二进制插入】

强训之【查找组成一个偶数最接近的两个素数和二进制插入】

目录

  • 1.查找组成一个偶数最接近的两个素数
    • 1.1题目
    • 1.2思路
      • 1.2.1 暴力解法
      • 1.2.2 取中判断
    • 1.3代码
      • 1.3.1暴力求解代码
      • 1.3.2 取中判断代码
  • 2.二进制插入
    • 2.1题目
    • 2.2思路
    • 2.3代码
  • 3.选择题

1.查找组成一个偶数最接近的两个素数

1.1题目

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

数据范围:输入的数据满足 4 \\le n \\le 1000 \\4≤n≤1000
输入描述:
输入一个大于2的偶数

输出描述:
从小到大输出两个素数

示例1 输入: 20 输出: 7 13

示例2 输入: 4 输出: 2 2

1.2思路

1.2.1 暴力解法

暴力求解,定义b1和b2存放差值最小的素数对,min是差值初始值为n,依次判断 i 和 n-i 是否都是素数,如果是就判断差值,注意这里需要使用绝对值,防止i的值比 N-i 大,五个绝对值比min小,就将绝对值赋值给min,另 b1=i; b2=n-i;

1.2.2 取中判断

差值最小的两个素数,一并是在中间部分,所以我们从中间开始遍历,i–,知道i和n-i都是素数的时候,这个时候的i和n-i就是差值最小的。

1.3代码

1.3.1暴力求解代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int b1=0;int b2=0;int min=n;for(int i=2;i<=n;i++){if(isPrime(i)&&isPrime(n-i)){if(Math.abs((n-i)-i)<min){min=Math.abs((n-i)-i);b1=i;b2=n-i;}}}System.out.println(b1);System.out.println(b2);}public static boolean isPrime(int a){for(int i=2;i<a;i++){if(a%i==0){return false;}}return true;}
}

1.3.2 取中判断代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n=in.nextInt();int half=n/2;for(int i=half;i>0;i--) {if (isPrime(i) && isPrime(n - i)) {System.out.println(i);System.out.println(n - i);break;}}}public static boolean isPrime(int a){for(int i=2;i<a;i++){if(a%i==0){return false;}}return true;}
}

2.二进制插入

2.1题目

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

测试样例:
1024,19,2,6
返回:1100

2.2思路

我们要将19的二进制位10011插入到i-j中,我们可以将m左移j位,让m后面补充上0和n对其,然后我们在让 n|m,就可以了,因为“或”的话,只有有1,就为1
强训之【查找组成一个偶数最接近的两个素数和二进制插入】

2.3代码

import java.util.*;public class BinInsert {public int binInsert(int n, int m, int j, int i) {// write code herem=m<<j;return m|n;}
}

3.选择题

以下方法,哪个不是对add方法的重载?(B
public class Test
{
public void add( int x,int y,int z){}
}
A public int add(int x,int y,float z){return 0;}
B public int add(int x,int y,int z){return 0;}
C public void add(int x,int y){}
D 所有选项都不是

重载要求,参数类型不同,数量不同,返回值可以一样也可以不同

  1. 在Java中,关于HashMap类的描述,以下错误的是(B
    A HashMap使用键/值得形式保存数据
    B HashMap 能够保证其中元素的顺序
    C HashMap允许将null用作键
    D HashMap允许将null用作值

HashMap 不能够保证其中元素的顺序,键是唯一的,值可以不同

  1. 在Java中,( )类提供定位本地文件系统,对文件或目录及其属性进行基本操作(D

  2. A FileInputStream
    B FileReader
    C FileWriter
    D File

  3. 下面程序的运行结果是(B
    String str1 = “hello”;
    String str2 = “he” + new String(“llo”);
    System.err.println(str1 == str2);
    A true
    B false
    C exception
    D 无输出

str2是新建的一个字符串,所以地址不一样

  1. 下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?(B
    A private
    B 无修饰符
    C public
    D protected

private是私有类,只能在本类中使用
procected是可以在本类的子类中使用

  1. java接口的方法修饰符可以为?(忽略内部接口)(D)
    A private
    B protected
    C final
    D abstract

接口的修饰符是 public astract

  1. 下列程序的运行结果(A)
    public void getCustomerInfo() {
    try {
    // do something that may cause an Exception
    } catch (java.io.FileNotFoundException ex) {
    System.out.print(“FileNotFoundException!”);
    } catch (java.io.IOException ex) {
    System.out.print(“IOException!”);
    } catch (java.lang.Exception ex) {
    System.out.print(“Exception!”);
    }
    }

A IOException!
B IOException!Exception!
C FileNotFoundException!IOException!
D FileNotFoundException!IOException!Exception!

抛出异常,一次只能执行一个catch语句,所以只能抛出一个异常

  1. 下列哪种异常是检查型异常,需要在编写程序时声明?(C
    A NullPointerException
    B ClassCastException
    C FileNotFoundException
    D IndexOutOfBoundsException

NullPointerException
ClassCastException
IndexOutOfBoundsException都是运行异常

  1. 选项中哪一行代码可以添加 到题目中而不产生编译错误?(A
    public abstract class MyClass {
    public int constInt = 5;
    //add code here
    public void method() {
    }
    }
    A public abstract void method(int a);
    B constInt = constInt + 5;
    C public int method();
    D public abstract void anotherMethod() {}

  2. 如下代码,执行test()函数后,屏幕打印结果为()
    public class Test2
    {
    public void add(Byte b)
    {
    b = b++;
    }
    public void test()
    {
    Byte a = 127;
    Byte b = 127;
    add(++a);
    System.out.print(a + " ");
    add(b);
    System.out.print(b + “”);
    }
    }
    A 127 127
    B 128 127
    C 129 128
    D 其他选项都不对

a=127,先++再进入到add方法内,此时传过去的值是128 byte范围是-128- 127,因此当数值为128的时候二进制位10000000,第一位就表示符号位,所以值为-0,在二进制中 ,-0 表示-128所以a=-128
b传进入,先赋值,在++,因此b还是等于127
所以最后 a=-128 b=127;