看到题目突然有点兴趣就试着做了做:
param为指定数据public class FindPrimeGene { public static void main(String[] args) {
int param=1458;
int pa_sqrt=(int)param/2;
int[] result =new int[pa_sqrt];//实际不许要那么多,只是费事再计算
int[] prime_num = new int[pa_sqrt];
boolean isPrime=true;
int r_p=0,p_p=0;//两数组的标记 

prime_num[p_p++]=2;
if(param%2==0)
   result[r_p++]=2;

   for ( int i=3;i<=pa_sqrt;i++) {
      for (int j=0;j<p_p;j++) {
         if(i%prime_num[j]!=0)  {
            isPrime=true;
            continue;
         }
         else {
            isPrime=false;
            break;
         }
         }
         if(isPrime) {
         prime_num[p_p++]=i;
         if(param%i==0)
         result[r_p++]=i;        
         }
         }
          
          System.out.println("The prime numbers of "+param+" are:");
          for(int i=0;i<r_p;i++) 
           System.out.print(" "+result[i]);
          System.out.println();
          System.out.println("The prime array is:");
          for(int i=0;i<p_p;i++) 
           System.out.print(" "+prime_num[i]);
          System.out.println();          
}
}

解决方案 »

  1.   

    忘了在最后加多一句判断自身是否素数。
    if(r_p==0)
       result[r_p++]=param;______________________________________
    System.out.println("The prime numbers of "+param+" are:");
          for(int i=0;i<r_p;i++) 
              System.out.print(" "+result[i]);
    .........这是最直观的算法,如果要效率高的话,那就要使用更多的技巧,如获得一个因子后立即除以该因子再参与循环判断。