【原创】用位图法求N以内的是连续三个素数和,本身也为素数的数

Junglesong 发表于 2008-06-28 16:46:47

package com.sitinspring;

/**
 * 求N以内的是连续三个素数和,本身也为素数的数
 * 
@author sitinspring(junglesong@gmail.com)
 * 
@since 2008-6-12 上午11:27:26
 * @vsersion 1.00 创建 sitinspring 2008-6-12 上午11:27:26
 
*/

public class ContinuousPrimeSum2 {
    
/**
     * n:数字上限
     
*/

    
private int n;
    
    
/**
     * 构造函数
     * 
@param n
     
*/

    
public ContinuousPrimeSum2(int n){
        
this.n=n;
        
        
int[] arr=getPrimeZeroArray();
        
int[] continuousArr=getPrimeNumberArray(arr);
        
        
for(int i=0;i<continuousArr.length-2;i++){
            
int sum=continuousArr[i]+continuousArr[i+1]+continuousArr[i+2];
            
            
if(sum<&& arr[sum]!=0){
                System.out.println(n
+"以内是連續三個素數和,本身也為素數的數為:"+sum+" 其子素數為:"+continuousArr[i]+","+continuousArr[i+1]+","+continuousArr[i+2]);
            }

        }

    }

    
    
/**
     * 取得素数和零的数组,合数位补零
     * 
@param initialArr
     * 
@return
     
*/

    
public int[] getPrimeZeroArray() {
        
// 初始数组,想在其中依次放入素数,其它位置为零
        int[] arr = new int[n];

        
// 遍历2-100,如果是素数的话放入初始数组中
        for (int i = 2; i < n; i++{
            
if (isPrimeNumber(i)) {
                
// 是素数则放入初始数组中
                arr[i] = i;
            }

        }


        
// 返回
        return arr;
    }


    
/**
     * 取得完全是素数的数组
     * 
@param primeZeroArr
     * 
@return
     
*/

    
public int[] getPrimeNumberArray(int[] primeZeroArr) {
        
// 得出返回数组的长度
        int maxLength = 0;
        
for (int temp : primeZeroArr) {
            maxLength
+=temp>0?1:0;
        }

        
        
// 定义返回的素数数组
        int[] arr = new int[maxLength];
        
int index=0;
        
        
// 填值
        for (int i = 0; i < primeZeroArr.length; i++{
            
if(primeZeroArr[i]>0){
                arr[index
++= primeZeroArr[i];
            }

        }

        
// 返回
        return arr;
    }


    
/**
     * 判断是否质数(素数)
     * 
@param number
     * 
@return
     
*/

    
private static boolean isPrimeNumber(int number) {
        
for (int i = 2; i < number / 2 + 1; i++{
            
if (number % i == 0{
                
return false;
            }

        }


        
return true;
    }

    
    
/**
     * 程序入口
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
new ContinuousPrimeSum2(1000);
    }

}


输出结果:
1000以内是連續三個素數和,本身也為素數的數為:23 其子素數為:5,7,11
1000以内是連續三個素數和,本身也為素數的數為:
31 其子素數為:7,11,13
1000以内是連續三個素數和,本身也為素數的數為:
41 其子素數為:11,13,17
1000以内是連續三個素數和,本身也為素數的數為:
59 其子素數為:17,19,23
1000以内是連續三個素數和,本身也為素數的數為:
71 其子素數為:19,23,29
1000以内是連續三個素數和,本身也為素數的數為:
83 其子素數為:23,29,31
1000以内是連續三個素數和,本身也為素數的數為:
97 其子素數為:29,31,37
1000以内是連續三個素數和,本身也為素數的數為:
109 其子素數為:31,37,41
1000以内是連續三個素數和,本身也為素數的數為:
131 其子素數為:41,43,47
1000以内是連續三個素數和,本身也為素數的數為:
173 其子素數為:53,59,61
1000以内是連續三個素數和,本身也為素數的數為:
199 其子素數為:61,67,71
1000以内是連續三個素數和,本身也為素數的數為:
211 其子素數為:67,71,73
1000以内是連續三個素數和,本身也為素數的數為:
223 其子素數為:71,73,79
1000以内是連續三個素數和,本身也為素數的數為:
251 其子素數為:79,83,89
1000以内是連續三個素數和,本身也為素數的數為:
269 其子素數為:83,89,97
1000以内是連續三個素數和,本身也為素數的數為:
311 其子素數為:101,103,107
1000以内是連續三個素數和,本身也為素數的數為:
349 其子素數為:109,113,127
1000以内是連續三個素數和,本身也為素數的數為:
439 其子素數為:139,149,151
1000以内是連續三個素數和,本身也為素數的數為:
457 其子素數為:149,151,157
1000以内是連續三個素數和,本身也為素數的數為:
487 其子素數為:157,163,167
1000以内是連續三個素數和,本身也為素數的數為:
503 其子素數為:163,167,173
1000以内是連續三個素數和,本身也為素數的數為:
607 其子素數為:197,199,211
1000以内是連續三個素數和,本身也為素數的數為:
661 其子素數為:211,223,227
1000以内是連續三個素數和,本身也為素數的數為:
701 其子素數為:229,233,239
1000以内是連續三個素數和,本身也為素數的數為:
829 其子素數為:271,277,281
1000以内是連續三個素數和,本身也為素數的數為:
857 其子素數為:281,283,293
1000以内是連續三個素數和,本身也為素數的數為:
883 其子素數為:283,293,307
1000以内是連續三個素數和,本身也為素數的數為:
911 其子素數為:293,307,311
1000以内是連續三個素數和,本身也為素數的數為:
941 其子素數為:311,313,317
收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定