这题一开始以为是搜索,写不出来,后来上网才知道是数学知识,
- 任何一个大于2的偶数必定能分解成两个质数相加(哥德巴赫猜想),return 2;
- 对于一个奇数n,如果它是素数,return 1;如果它是合数,又分两种情况:1.n拆分成2+(n-2),且n-2是素数,return 2;2.n拆分成2+(n-2),且n-2不是素数,那么return 3;
- n<2 return 0;
import java.util.Scanner;
public class 最小素数和 {
static Scanner sc=new Scanner(System.in);
public static void main(String[]args)
{
while(sc.hasNext())
{
int n=sc.nextInt();
if(n==1)System.out.println(0);
else if(is_pr(n))System.out.println(1);
else if(n%2==0||is_pr(n-2))System.out.println(2);
else System.out.println(3);
}
}
//kn+i法判定素数,时间复杂度O(sqrt(n,3))
public static boolean is_pr(int n){
if(n == 2 || n == 3 || n == 5)return true;
if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n == 1) return false;
long c = 7; int a[] = {4,2,4,2,4,6,2,6};
while(c * c <= n) for(int i : a){if(n % c == 0)return false; c += i;}
return true;
}
}