【问题标题】:Getting the first 100 prime numbers in an array获取数组中的前 100 个素数
【发布时间】:2016-06-16 05:15:59
【问题描述】:

嘿,我正在尝试创建一个打印出前 100 个素数的程序。这是我的代码,但它不会打印出前一百个,而是从 2 到 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]);
      }
    }
  }
}

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。请使用正确的缩进格式化您的代码。大多数人不想花精力查看格式错误的代码。对于编译器来说可能都是一样的,但对于人类来说却不是。如果你不够关心,我们为什么要关心?
  • 当前输出是多少?
  • 2 3 5 711 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
  • 我请求不要相信不能被23整除的数是质数。以 119 为例,它不能被 2 和 3 整除,但可以被 7 和 13 整除。
  • 查看这个问题,它识别值是否为素数:stackoverflow.com/questions/20798391/java-isprime-function

标签: java arrays


【解决方案1】:

您将循环直到j &lt; 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】:

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

    while(maxCount<100){
    
    if(number_is_prime){
    increment maxCount;
    }
    else{
    continue;
    }
    

    【讨论】:

      【解决方案3】:

      您正在迭代您的循环直到100。但是您想打印前 100 个素数,而不是 1 到 100 之间的素数。所以每次发现该数字是素数时,只需将 count(计算打印的素数的数量)增加到 @987654323 @ 并在 count100 时退出循环。这是打印前 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++;
              }
          } 
      

      【讨论】:

        【解决方案4】:

        如果找到素数,只增加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++;
          }
        

        【讨论】:

          【解决方案5】:

          试试这个

          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); 
              } 
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-12
            • 1970-01-01
            • 2011-06-15
            • 2016-04-25
            • 2020-03-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多