获取数组中的前100个素数

时间:2016-06-16 05:16:00

标签: java arrays

嘿所以我试图创建一个打印出前100个素数的程序。这是我的代码,但是它不会打印出前100个但是从2到100的素数。我在这里做错了什么使得它只打印出那些不是前100的蚂蚁?

import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;

public class Prime {
  public static void main(String[] args) {
    int maxCount = 100;
    int[] values = new int[maxCount];
    int temp = 3;
    boolean prime = true;

    for (int j = 1; j < maxCount; ++j) {
      values[j] = j + 1;
      if (values[j] == 2) {
        System.out.println(values[j]);
      }
    }
    for (int j = 2; j < maxCount; ++j) {
      if (values[j] % 2 == 0)
        prime = false;
      else {
        boolean prime2 = true;
        double test = Math.sqrt(values[j]);
        int divisor = 3;
        while (prime2 && (divisor <= test)) {
          if (values[j] % divisor == 0) {
            prime2 = false;
          } else divisor += 2;
        }
        if (prime2)
          System.out.println(values[j]);
      }
    }
  }
}

5 个答案:

答案 0 :(得分:0)

你正在循环迭代直到j变为100,并且在每次迭代时,无论是否找到素数,j都会递增。 所以有类似的东西: -

while(maxCount<100){

if(number_is_prime){
increment maxCount;
}
else{
continue;
}

答案 1 :(得分:0)

你循环到j < maxCount,你应该循环,直到数组中的元素数等于maxCount。为此,您需要在以下固定代码中使用另一个val_cnt的计数器。

import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;

public class Prime {
 public static void main(String[] args) {
  int maxCount = 100;
  int[] values = new int[maxCount];
  int temp = 3;
  int val_cnt = 0;
  values[val_cnt++] = 2;
  System.out.println(2);
  for (int j = 3; val_cnt < maxCount; ++j) {
   boolean prime = true;
   if (j % 2 == 0)
    prime = false;
   else {
    double test = Math.sqrt(j);
    int divisor = 3;
    while (prime && (divisor <= test)) {
     if (j % divisor == 0) {
      prime = false;
     } else divisor += 2;
    }
    if (prime) {
     values[val_cnt++] = j;
     System.out.println(j);
    }

   }
  }
 }
}

答案 2 :(得分:0)

您正在迭代循环直到100。但是你想要打印前100个素数,而不是1到100之间的素数。因此,每次发现数字为素数时,只需将count(计算打印的素数的数量)递增到当1count时,100并退出循环。以下是打印前100个素数的简单方法:

 int count = 0,flag=0;
    for(int i=2;count<100;i++){
        flag = 0;
        for(int j=2;j<i;j++){
            if(i%j == 0){
                flag ++;
                break;
            }
        }
        if(flag == 0){
            System.out.println(i);
            count++;
        }
    } 

答案 3 :(得分:0)

如果找到素数,则仅增加j的值

重新格式化您的代码,

for (int j = 2; j < maxCount;) {
  if (values[j] % 2 == 0){
    prime = false;
    j++;
   }
  else {
    boolean prime2 = true;
    double test = Math.sqrt(values[j]);
    int divisor = 3;
    while (prime2 && (divisor <= test)) {
      if (values[j] % divisor == 0) {
        prime2 = false;
      } else divisor += 2;
    }
    if (prime2)
      System.out.println(values[j]);
      j++;
  }

答案 4 :(得分:0)

  

试试这个

class PrimeNumbers {
    public static void main (String[] args) {
        int i =0; int num =0; 
        String primeNumbers = ""; 
        for (i = 1; i <= 100; i++) {
            int counter=0;   
           for(num =i; num>=1; num--) {
                 if(i%num==0) {
                      counter = counter + 1;
                 }   
            }    
            if (counter ==2) {  
                primeNumbers = primeNumbers + i + " ";
            }
        }    
        System.out.println("Prime numbers from 1 to 100 are :");
        System.out.println(primeNumbers); 
    } 
}