- /*
- *
- 孪生素数
- 所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。
- 最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43),
- (59, 61) 和 (71, 73),总计有 8 组。但是随着数字的增大,孪生素数的分布变得越来越稀疏,
- 寻找孪生素数也变得越来越困难。那么会不会在超过某个界限之后就再也不存在孪生素数了呢?
- 孪生素数有无穷多对!这个猜想被称为孪生素数猜想,至今没有被严格证明。
- 但借助于计算机我们确实可以找到任意大数范围内的所有孪生素数对。
- 比如,当n=100的时候,该方法返回8
- */
- import java.util.ArrayList;
- public class test21 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- System.out.println("100内的孪生素数:"+twinPrimeNum(100));
- }
- //判断一个数是不是素数
- public static boolean isPrime(int x) {
- for (int i = 2; i <=x/2; i++) {
- if (x%i==0) {
- return false; //如果不是素数返回false
- }
- }
- return true;
- }
- //计算孪生素数
- public static int twinPrimeNum(int n) {
- int sum=0;
- ArrayList<Integer > al=new ArrayList<Integer>();
- for (int i = 2; i < n; i++) {
- if (isPrime(i)&&isPrime(i+2)) {
- sum++;
- al.add(i);
- al.add(i+2);
- }
- }
- for (int i = 0; i < al.size(); i++) {
- if (i%2==0) {
- System.out.print("(");
- }
- System.out.print(al.get(i));
- if (i%2==0) {
- System.out.print(",");
- }
- if (i%2!=0) {
- System.out.print(")");
- if (i<al.size()-1) {
- System.out.print(",");
- }
- }
- if (i==(al.size()-1)) {
- System.out.println(" ");
- }
- }
- return sum;
- }
- }