1
   public static void algorithmOne(int n){

      long startTime = System.currentTimeMillis();

      search:
      for (int possiblePrime = 2; possiblePrime <= n; possiblePrime++){

         for (int divisor = 2; divisor < possiblePrime; divisor++)
            if ( possiblePrime%divisor == 0 && possiblePrime != divisor )
               continue search;

         System.out.println(possiblePrime);
      }
      long endTime = System.currentTimeMillis();
      System.err.println(endTime - startTime);
   }

这是一种查找素数的方法,我无法弄清楚为什么我没有达到“System.err.println(endTime - startTime);” 线。

4

2 回答 2

1

我猜你正在达到你的时差 println(),但你没有在你期望的地方看到它。这是因为您将它打印到 stderr - 所以您不能保证它在所有 println() 都附加到标准输出之后。

尝试打印到标准输出...

至于你的素数测试算法 - 看看两个关于决定素数的问题(那里有链接)。还讨论了寻找主要因素,这不是同一个问题,但有一些您可能感兴趣的见解。具体来说,请考虑以下内容:

  • 您的内部循环只需要上升到sqrt(n),就好像 a 是 n 的一个因子,那么 n/a 也是如此。
  • 3 之后的所有质因数都是 6n-1 或 6n+1 的形式(想想看),所以你可以循环 . 如果您想到Erathostenes 的筛子,您可以想到额外的此类“肮脏”优化。

那是“简单的事情”,你可以做的还有很多。但是,真的,你为什么要自己写一个素性测试呢?您可以使用现有的代码。

于 2013-04-07T05:29:56.680 回答
1

试试这个:

    long startTime = System.nanoTime();

    search: for (int possiblePrime = 2; possiblePrime <= 10; possiblePrime++) {

        for (int divisor = 2; divisor < possiblePrime; divisor++)
            if (possiblePrime % divisor == 0 && possiblePrime != divisor)
                continue search;

        System.out.println(possiblePrime);
    }
    long endTime = System.nanoTime();
    System.out.println(startTime);
    System.out.println(endTime);
    System.out.println("Total time taken is : " + (endTime - startTime));
于 2013-04-07T05:41:07.973 回答