2016-12-04 16 views
0

私はいくつかの問題を解決しており、私はこれらの問題を解決できません。ユーザーが10進数を入力するコードを記述しなければならず、他の多数のシステムで数字1で始まる数字の回数を数えなければなりません。整数数学でしか動作どのようにアルゴリズムを高速化できますか?

x = x - ((x/i) * i); 
if (x == 1) 
{ 
    ... 
} 

:これを使用する代わりに、ループの

for (int i = 3; i <= n; i++) { 
    int z = n; 
    while (z != 0) { 
     x = z % i; 
     z = z/i; 
    } 
    if (x == 1) { 
     brOsnova++; 
    } 
} 
+0

「他の多数のシステム」とはどういう意味ですか? – solti

+0

私は、数ベースが3から無限大の数になることを意味します。なぜなら、2以上の数はすべて1から始まるため、brOsnovaは常に1です。 –

+0

開始点はどういう意味ですか?この終わり - > 1000 < - またはこの終わり? – user4581301

答えて

0

あなたはそれらのすべてを満たすことになるので、

i <= n < 2*iを確認するIさんをチェックしないことにより、すでにそれを加速することができます。 したがって、for(int i = 3; i <= n/2; ++i)のみをチェックし、最後にbrOsnovaに(n + 1)/ 2を追加します。

私はそれがさらに加速され、いくつかのO(log(n))アルゴリズムが必要であると確信していますが、それは遠くにフェッチされるかもしれません...またはalgorithmタグの良い候補の質問です。

0

:ここ はアルゴリズムです。

+0

整数の変数と安静の変数が必要なので、1が最初の桁であることがわかります。 –

関連する問題