2016-05-06 10 views
-4

BigIntegersを分割しようとしています。 これまでのコードです:CでのBigIntegerの除算

BigInteger x = BigInteger.Parse("2697841949839130393229424953460693359375000000"); 
BigInteger y = BigInteger.Parse("2"); 
for (int i = 0; i < 300; i++) { 
    double result = Math.Exp(BigInteger.Log(x)/BigInteger.Log(y)); 
    x = result; 
    Console.WriteLine(result); 
} 

これは除算です。それは一度だけ行います。コードを最小限に分割したいと思います。

for (int i = 0; i < 300; i++){} 

はそれを行うには正しい方法ではない:それは私がこのことを知っている6

でなければなりません。どのように他の方法を知っていますか?

+1

私はあなたの問題を理解していません。それは計算を300回行っているだけです。まったく同じことをしています** 300回、結果は決して変わりません。 – CodingGorilla

+1

@CodingGorilla 'x'は各ループで変更されるため、毎回異なる結果が生成されるはずです。 –

+0

あなたのコードは、単に操作を300回実行しますが、そのロジックをチェックするにはwhileループが必要です。 – ManoDestra

答えて

1

他の質問から、あなたがGodelの数字をデコードしようとしていることを覚えています。

結果を2重にしてはいけません。それは大きすぎます。あなたはBigIntegerのDivide methodを探しています。あなたのアプリケーションのためにはDivRemが良いです。

ここにいくつかのサンプルコードがあります。それは6を計算します。これにより、最初の文字が表示されます。また、文字列の残りの部分に進むには、 '2'を超える素数のリストを作成する必要があります。

using System; 
using System.Numerics; 


public class Program 
{ 
    public static void Main() 
    { 
     BigInteger x = BigInteger.Parse("2697841949839130393229424953460693359375000000"); 
     BigInteger y = BigInteger.Parse("2"); 

     int counter = 0; 
     BigInteger remainder; 
     do{ 
      BigInteger result = BigInteger.DivRem(x, y, out remainder); 
      if(!remainder.IsZero) 
       break; 

      x = result; 
      counter++; 
     } while (true); 

     Console.WriteLine(counter); 
    } 
} 
+0

ありがとう、今日は本当に役立っています。 Alfredに感謝します。 – DezUp