A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
怎么办用最高效的方法

3 个回复

倒序浏览
http://www.cnblogs.com/Zblogs/archive/2013/08/16/3263610.html
有个网址你可以看看。
回复 使用道具 举报
两两之和为偶数的那些偶数,这个看不懂哦
回复 使用道具 举报
  1. import java.util.*;
  2. class SuDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int n=1000;
  7.                 boolean[] arr=new boolean[n+1];
  8.                 setNum(arr);
  9.                 //printNum(arr);
  10.                 getNum(arr);
  11.         }
  12.         //用筛选法得出n以内的所有素数
  13.         public static void setNum(boolean[] arr)
  14.         {
  15.                 int n=arr.length-1;
  16.                 arr[0]=arr[1]=false;
  17.                 arr[2]=true;
  18.                 for (int x=3;x<=n;x+=2)
  19.                         arr[x]=true;
  20.                 for(int i=3,len=(int)Math.sqrt(n);i<=len;i+=2)
  21.                 {
  22.                         if(arr[i])
  23.                         {
  24.                                 for(int j=i+i;j<=n;j+=i)
  25.                                         arr[j]=false;
  26.                         }
  27.                 }
  28.         }
  29.         //打印n以内的所有素数
  30.         public static void printNum(boolean[] arr)
  31.         {
  32.                 int n=arr.length-1;
  33.                 int i=3;
  34.                 System.out.print(2+",");
  35.                 while(i<=n)
  36.                 {
  37.                         if(arr[i])
  38.                                 System.out.print(i+",");
  39.                         i+=2;
  40.                 }
  41.         }
  42.         //打印[6,N]之内的所有素数中,两两之和为偶数的那些偶数
  43.         public static void getNum(boolean[] arr)
  44.         {
  45.                 //用了TreeSet结构来去掉重复和排序
  46.                 Set<Integer> s=new TreeSet<Integer>();
  47.                 int n=arr.length-1;
  48.                 for (int i=7;i<=n ;i+=2 )
  49.                 {
  50.                         if(!arr[i])
  51.                                 continue;
  52.                         for (int j=i;j<=n ;j+=2 )
  53.                         {
  54.                                 if(!arr[j])
  55.                                         continue;
  56.                                 s.add(i+j);
  57.                         }
  58.                 }
  59.                 System.out.println(s);
  60.         }
  61. }
复制代码
自己写的,正确性不太清楚,如果有错,麻烦告诉我哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马