判断素数与哥德巴赫猜想

判断一个数是否是素数与验证哥德巴赫猜想问题

素数

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。


哥德巴赫猜想:任意一个大于等于6的偶数都可以分解为两个素数之和;

 

如何判断一个数是否是素数呢?

 

一般的方法是用For循环迭代,而迭代变量的范围一般是取到我们要求的值,比如说是100,范围即为到100,经过大量的验证,一种更有效率的方法是,迭代变量的取值范围不用取到100,而是取得100的开根号即可;

 

下面给出判断是否为素数的代码:

	public static boolean isPrime(int num) {
		int sqrt = (int) Math.sqrt(num);
		for (int i = 2; i <= sqrt; i++) {
			if (num % i == 0) {
				return false;
			}
		}
		return true;
	}

 

 

然而,如何判断一个数是否是素数的方法,已经知道了,下面再来验证哥德巴赫猜想,为什么前面会给出验证是否是素数的方法呢?

 

因为验证哥德巴赫猜想需要用到它;

 

现在我们再来看定义:

 

哥德巴赫猜想:任意一个大于等于6的偶数都可以分解为两个素数之和;

 

两个素数?普通的做法就是用两个For循环迭代,判断两次是否为素数,然而一种更有效率的方法是:

先判断P1是素数,而且判断 P2=n-P1也是素数,如果是这样的话,就输出结果,这样是不是比两次For循环迭代更有效率呢?

 

下面我们再给出如何验证哥德巴赫猜想的代码:

 

		for(int j = 6;j<100;j+=2){
			for(int i = 2; i < j ; i++){
				if(isPrime(i)&& isPrime(j-i)){
					System.out.println(j+"="+i+" + "+(j-i));
					break; // 找到一对即跳出循环
				}
			}
		}

 

 

这些简单的算法问题,在很多有过算法经验的人看来,都是一些不值一提的小算法,但事情往往是这样的,很多高深的算法也是由一些看似简单的算法演变而来的,所以我们不能掉以轻心;

 

以上算法代码及思想,用作学习交流之用,如果有什么地方写得不对的,敬请批评指出,谢谢~

你可能感兴趣的:(算法,J#)