?个人简介 |
⭐️个人主页:摸鱼の文酱博客主页?♂️
?博客领域: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;
}
}
?6.涉及算法&总结
版权声明:本文为qq_53947552原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。