JAVA程序设计(自主模式)-偶数分解

版权声明:文章都是原创,转载请注明~~~~ https://blog.csdn.net/SourDumplings/article/details/88934206

偶数分解

歌德巴赫猜想:任何一个大于六的偶数可以拆分成两个质数的和,打印出所有的可能
输入n为偶数,输出n的所有分界可能
如输入
100
输出:
100=3+97
100=11+89
100=17+83
100=29+71
100=41+59
100=47+53

Java:

import java.util.Scanner;

public class Main
{

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		int n;
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		sc.close();

		Prime p = new Prime(n);
		for (int firstNum = p.nextPrime(); firstNum != -1 && firstNum <= n / 2; firstNum = p.nextPrime())
		{
			if (p.isPrime(n - firstNum))
				System.out.println(n + "=" + firstNum + "+" + (n - firstNum));
		}
	}

}

class Prime
{
	boolean[] PrimeNum;
	int thisNum, upperLimit;
	public Prime(int n)
	{
		upperLimit = n;
		PrimeNum = new boolean[n];
		for (int i = 0; i != n; ++i)
			PrimeNum[i] = true;
		for (int i = 2; i != n; ++i)
		{
			if (PrimeNum[i])
			{
				for (int j = 2 * i; j < n; j += i)
					PrimeNum[j] = false;
			}
		}
		thisNum = 0;
	}
	public boolean isPrime(int num)
	{ return PrimeNum[num]; }
	public int nextPrime()
	{
		if (thisNum == 2)
		{
			thisNum = 3;
		}
		else if (thisNum == 0)
		{
			thisNum = 2;
		}
		else
		{
			for (thisNum = thisNum + 2; thisNum < upperLimit; thisNum += 2)
			{
				if (PrimeNum[thisNum])
				{
					break;
				}
			}
		}
		if (thisNum >= upperLimit)
			return -1;
		else
			return thisNum;
	}
}

猜你喜欢

转载自blog.csdn.net/SourDumplings/article/details/88934206