📜个人简介 |
⭐️个人主页:摸鱼の文酱博客主页🙋♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
<font color=>📃查找组成一个偶数最接近的两个素数
🎯1.原题链接
🎯2.题目要求
任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对
输入描述:输入一个大于2的偶数
输出描述:从小到大输出两个素数
样例输入: 20
样例输出: 7 13
🎯3.基础框架
java版本的基础框架代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
}
🎯4.解题思路
1.组成偶数的情况有多种,20=3+17,20=7+13,要求输出的是素数差值最小的素数对。可以先找20以内的第一个素数,再判断另一个数(20 - 第一个素数)是否为素数就可以得到一个素数对。
2. 要求素数对差值最小,如果从2开始往后寻找素数找到的第一对素数不一定符合要求,需要再往后找,效率较低。可以用另一种方法,即假设n为输入的偶数,从n/2处开始向两端判断,由于两个素数之和等于n,那么这两个素数中只能是一个大于n/2,一个小于n/2,这样从一开始找到的素数对就符合素数差值最小的要求了。
🎯5.完整代码
import java.util.Scanner;
public class Main {
//即假设n为输入的偶数,从n/2处开始向两端判断,由于两个素数之和等于n,那么这两个素数中只能是一个大于n/2,一个小于n/2,
// 这样从一开始找到的素数对就符合素数差值最小的要求了。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
for (int i = x/2; i < x-1; i++) {
if(PrimeNum(i) && PrimeNum(x-i)){//判断是否为素数对
System.out.println(x-i);
System.out.println(i);
break;
}
}
}
private static boolean PrimeNum(int x) {//判断素数
for (int i = 2; i < x/2; i++) {
if(x%i == 0){
return false;
}
}
return true;
}
}