如何在表格中输出素数

时间:2019-03-22 14:35:07

标签: java

我正在一个项目中进行工作,该项目需要一个起始数字和一个质数,然后在起始数字之后输出一个表格,其中包含每个质数,直到达到质数为止。我写了一个程序来查找素数,但是我无法将输出格式化为表格格式。我知道我需要使用嵌套的for循环来构建表,但是我不确定如何开始。到目前为止,这是我的代码:

class Tester2{

   public static void main(String[] args){
      int number = 750000; //starting number
      int nofn = 12;       //number of primes to find 
      int primecount = 0;

      while(primecount < nofn){  
         if(isPrime(number)){
            primecount ++;
            System.out.println(primecount + " " +number);
         }   
         number++;
      }
   }


   //determins if num is prime
   private static boolean isPrime(int num){
      int divisor = 2;
      boolean itIsPrime;   
      while(num % divisor != 0){
         divisor++;
         }        
      if(divisor == num)
         itIsPrime = true;
      else
         itIsPrime = false;
      return itIsPrime;        
   }
}

当前我的代码返回

1 750019
2 750037
3 750059
4 750077
5 750083
6 750097
7 750119
8 750121
9 750131
10 750133
11 750137
12 750151

我正在寻找它返回

Row #: 1--> 750019 750037 750059 750077 750083 750097 750119 750121 750131 750133
Row #: 2--> 750137 750151

5 个答案:

答案 0 :(得分:1)

您在这里。我还改进了您的isPrime方法来循环直到sqrt(num)而不是num,所以现在应该更快了:

public class Test {
    public static void main(String[] args) {
        int number = 750000; // starting number
        int nofn = 100; // number of primes to find
        int primecount = 0;
        int row = 0, col = 0;

        while (primecount < nofn) {
            if (isPrime(number)) {
                primecount++;
                if (col++ == 0)
                    System.out.print(String.format("%3d-->", ++row));
                System.out.print(String.format(" %6d", number));
                if (col == 10) {
                    System.out.println();
                    col = 0;
                }
            }
            number++;
        }
    }

    private static boolean isPrime(int num) {
        final int last = (int) Math.sqrt(num);
        for (int divisor = 2; divisor <= last; ++divisor) {
            if (num % divisor == 0)
                return false;
        }
        return true;
    }

}

输出:

  1--> 750019 750037 750059 750077 750083 750097 750119 750121 750131 750133
  2--> 750137 750151 750157 750161 750163 750173 750179 750203 750209 750223
  3--> 750229 750287 750311 750313 750353 750383 750401 750413 750419 750437
  4--> 750457 750473 750487 750509 750517 750521 750553 750571 750599 750613
  5--> 750641 750653 750661 750667 750679 750691 750707 750713 750719 750721
  6--> 750749 750769 750787 750791 750797 750803 750809 750817 750829 750853
  7--> 750857 750863 750917 750929 750943 750961 750977 750983 751001 751007
  8--> 751021 751027 751057 751061 751087 751103 751123 751133 751139 751141
  9--> 751147 751151 751181 751183 751189 751193 751199 751207 751217 751237
 10--> 751259 751273 751277 751291 751297 751301 751307 751319 751321 751327

答案 1 :(得分:0)

每次需要打印时,您都在使用System.out.println。每次找到素数时,都会打印新行。您需要做的是使用System.out.print函数来打印您的信息。然后,在找到10个质数后,实现功能System.out.println。

if(isPrime(number)){
        primecount ++;
        if(primecount%10==0)
            System.out.println(number+" ");
        else
            System.out.print(number+" ");
     }

答案 2 :(得分:0)

不清楚表的含义。如果只想在一行上打印10个质数,则可以执行以下操作:

  while(primecount < nofn){  
     if(isPrime(number)){
        primecount ++;
        System.out.print(primecount + " " +number);
        if (primecount%10==0)
           System.out.println();
     }   
     number++;
  }

答案 3 :(得分:0)

要打印行号,这应该是代码。

public static void main(String[] args) {
    int number = 750000; //starting number
    int nofn = 12;       //number of primes to find
    int primecount = 0;
    int rowCount = 1;

    System.out.print(rowCount + "--> ");
    while (primecount < nofn) {
        if (isPrime(number)) {
            primecount++;

            System.out.print(number + " ");

            if (primecount % 10 == 0) {
                System.out.println();
                rowCount++;
                System.out.print(rowCount + "--> ");
            }


        }
        number++;
    }
}

答案 4 :(得分:0)

我的意思是,如果您只想在输入8个条目后跳过它,则必须按照嵌套方式进行循环。
这不是一个很好的解决方案,因为它可能会卡在while循环中,而且代码也不是很漂亮,但是我想它可以这样工作:

已编辑

int rowCount = 0;
while(primecount < nofn){
  if(isPrime(number)){
    if(primeCount% 10 == 0) {
      rowCount++;
      System.out.println("Row #: " + rowCount + "-->");
    }
    primecount ++;
    System.out.print(" " +number); // print not printl
  }
  number++;
}