最小素数拆分(kn+i法判定素数)

该Java程序用于判断输入的正整数是否符合哥德巴赫猜想,即大于2的偶数是否可以表示为两个质数之和。对于奇数,程序会检查其是否为素数或能否拆分为2加上一个素数。程序使用了自定义的素数判断方法,时间复杂度为O(sqrt(n,3))。
摘要由CSDN通过智能技术生成

在这里插入图片描述
这题一开始以为是搜索,写不出来,后来上网才知道是数学知识,

  1. 任何一个大于2的偶数必定能分解成两个质数相加(哥德巴赫猜想),return 2;
  2. 对于一个奇数n,如果它是素数,return 1;如果它是合数,又分两种情况:1.n拆分成2+(n-2),且n-2是素数,return 2;2.n拆分成2+(n-2),且n-2不是素数,那么return 3;
  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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值