编写输出前50个质数的程序,我想尝试使用已有的java.math.BigInteger中的isProbablePrime方法,但是出现了错误:F:\JAVA\exercise\primes.java:9: 找不到符号
符号: 方法 isProbablePrime(int)
位置: 类 primes
                        if(isProbablePrime(i))
                           ^
1 错误该方法API的API描述如下:如果该 BigInteger 可能是素数,则返回 true ;如果它很明确是一个合数,则返回 false 。 参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2**certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。 我的理解是:我程序中isProbablePrime的参数是int类型的,而API中描述的是BigInteger类型的。      请问:1.是不是这个错误?
            2.参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2**certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。   这后半段话是什么意思?(没看懂)
            3.如果这个方法行不通,有没有类似的方法可以使用。
该程序的源代码如下:
import java.math.*;
class primes
{
public static void main(String[] args)
{
int count=0;
for(int i=0;;i++)
{
if(isProbablePrime(i))
System.out.println(i+"\t");
count++;
if(count==49)
break;
}
}
}
                                                                           

解决方案 »

  1.   

    方法调用的确有问题.
    ---参数不对
    ---调用其他类的静态方法要按照类.方法()的形式参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了
    1 - 1/2**certainty方法,则该方法返回 true 。由于此函数只是对某个数是否是素数进行简单的测试,(有很多测试素数的方法,可能Java采用的是其中的一种),因而测试就有概率问题,该方法认为该数是素数的概率超过了1-1/2**certainty的话,就认为此数是素数,于是返回true,当然这可能会出错,即对某些合数也可能在一定的概率内被它认为是素数,即所谓的"伪素数".
      

  2.   

    如果要用isProbablePrime()方法的话,请参照下面:import java.math.*;
    class Test
    {
    public static void main(String[] args)
    {
    int count=0;
    BigInteger big=null;
    for(int i=1;;i++)
    {
    big=new BigInteger(new Integer(i).toString());
    if(big.isProbablePrime(50))
    {
    System.out.println(i+"\t");
    count++;
    }
    if(count==49)
    break;
    }
    }
    }