2

数値の最大剰余を計算しようとしていますが、元の数値を割って最大の剰余を取得する数値を見つけます。これが私の現在のコードです。うまくいくと確信しています。私はそれをもっと速くしたいだけです。何か提案はありますか?

int c=Integer.parseInt(br.readLine());

        if(c==2)
            pw.println(2);
        else if(c%2==0)
        {               
            pw.println(c-1);
        }
        else
        {
            max=0;
            int numDivided=0;
            for(int z=1; z<c; z+=2)
            {
                if(c%z>max)
                {
                    numDivided=z;
                    max=c%z;
                }
            }
            pw.println(numDivided);

新しく高速なコード

c=Integer.parseInt(br.readLine());
int largestRemainder = c % ((c/2) + 1);
pw.println(((c/2) + 1));
4

1 に答える 1

4

最大剰余は、入力数値の半分未満であると想定されます。したがって、次の式を使用する必要があります。ここcで、 は入力整数です。

int largestRemainder = c % ((c/2) + 1);
  • 偶数の場合、たとえば次のc = 24ようになりますlargestRemainder = 11
  • 奇数の場合、たとえば次のc = 33ようになりますlargestRemainder = 16

そして、これらの結果は実際には正しいです。

于 2012-12-23T18:08:22.410 に答える