2016-04-07 7 views
-1

私が期待している出力が得られません。これは素数性テストのためのものです。私は本当に何が間違っているのかは分かりません。いずれかのループが正しく動作していないか、これが正しく動作していません。BigIntegerとの比較が機能しない

nはBigIntegerです。ユーザーが入力した長さによって生成されるランダムです。

public static boolean isPrime(BigInteger n) { 

    BigInteger zero = new BigInteger("0"); 
    BigInteger one = new BigInteger("1"); 
    BigInteger two = new BigInteger("2"); 
    BigInteger three = new BigInteger("3"); 

    System.out.println(n + " Mod 2 " + n.mod(two)); 

    if (n.compareTo(one) == 0 || n.compareTo(one) < 0) { 
     //System.out.println("HIT1"); 
     return false; 
    } else if (n.compareTo(three) == 0 || n.compareTo(three) < 0) { 
     //System.out.println("HIT2"); 
     return false; 
    } else if ((n.mod(two)).compareTo(zero) == 0 || (n.mod(three)).compareTo(zero) == 0) { 
     //System.out.println("HIT3"); 
     return false; 
    } else { 
     System.out.println("Heres n : " + n); 
     return true; 
    } 
} 

ここに私のループがあります。私は私の番号ジェネレータが動作することを確かに知っています。

do { 
    num1 = generateNumber(p); 
} while (isPrime(generateNumber(p)) == false); 

do { 
    num2 = generateNumber(q); 
} while (isPrime(generateNumber(q)) == false); 
+0

「n」とは何ですか?さらに、私はここにループを見ません! –

+1

何入力あなたが与えている、あなたが得ているものを出力し、**その出力は***あなたの***の期待に一致していないですか? –

+0

nはBigIntegerです。ユーザーが入力した長さによって生成されるランダムです。 –

答えて

1

compareTo()の結果が-1に等しいかどうかをテストしないでください。 a < bを意味する場合は、a.compareTo(b) < 0と書いてください。他の定数ではなく常に0と比較してください。

+0

意味があり、試してみましたが、時にはまだ時々起こっています。 –

0

問題の内容がわかりました。私はループ内とループ内で2つの異なる数字を生成しています。私も間違ってループでBigIntegerを間違って割り当てていました。私はやっているはずです num1 =新しいBigInteger(generateNumber(p).toString());

0

最初に、番号が2であるかどうかをテストします(存在する場合は、それは素数です)。次に、数値が2で割り切れるかどうかをテストします(存在する場合は、素数ではありません)。次に、3から番号の平方根に、2刻みで反復して、元の数で割り切れるかどうかをテストします(存在する場合は、それは素数ではありません)。それ以外の場合は、数値が素数です。何かのように、

public static boolean isPrime(BigInteger n) { 
    final BigInteger two = new BigInteger("2"); 
    if (n.equals(two)) { 
     return true; 
    } 
    if (n.mod(two).equals(BigInteger.ZERO)) { 
     return false; 
    } 
    for (BigInteger i = two.add(BigInteger.ONE); i.multiply(i).compareTo(n) < 1; 
       i = i.add(two)) { 
     if (n.mod(i).equals(BigInteger.ZERO)) { 
      return false; 
     } 
    } 
    return true; 
} 
関連する問題