3

n2進表現の特定の数が別の数で割り切れることを知ることができる、さまざまな数の一般的な方法または特定の方法はありますmか?

例えば:

n=23 (00010111)
m=3

偶数と奇数の位置に設定されたビット数の差が3で割り切れる場合、数値は3で割り切れます。

  • 偶数位置=1でビットを1に設定
  • 奇数位置でビットを1に設定=3

したがって3 - 1 = 2、3で割り切れないため、23は3で割り切れません。

数値が2、4、5、6、7などで割り切れるかどうかを調べる他の方法があるかどうかを尋ねたいのですが。

4

2 に答える 2

5

それらすべての簡単なルールを見つけることはできません。このようなルールがどのように作成されるかについての考え方は次のとおりです。

最初に10進数について話しましょう。数を想像してみてくださいabcdefg。この数は実際には次のとおりです。

g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a

私たちが知っているように、(a+b)%c等しいと(a%c+b%c)%c等しい(a*b)%c(あなたは既知の合同((a%c)*(b%c))%cを持っているこれらのプロパティについてよりよく学ぶことができます)

それで、私たちの数の残りを次のように見てみましょう:

  • 2

    (g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a)%2 =
    (g%2 + 0 + 0 + 0 + 0 + 0 + 0)%2 =
    g%2
    

    したがって、最後の桁が2で割り切れる場合、数値は2で割り切れます。

  • 3

    (g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a)%3 =
    (g%3 + f%3 + e%3 + d%3 + c%3 + b%3 + a%3)%3 =
    ... repeat operation for this number
    

    したがって、数値は3で割り切れ、その桁の合計は3で割り切れます。

  • 4

    (g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a)%4 =
    (g%4 + 2*f%4 + 0 + 0 + 0 + 0 + 0)%4 =
    ... repeat if bigger than 4
    

    したがって、最後の桁に最後の桁の前の2倍を加えたものが4で割り切れる場合、数値は4で割り切れます。

  • 5

    (g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a)%5 =
    (g%5 + 0 + 0 + 0 + 0 + 0 + 0)%5 =
    g%5
    

    したがって、最後の桁が0または5の場合、数値は5で割り切れます。

  • ..。

  • 11

    (g + 10*f + 10^2*e + 10^3*d + 10^4*c + 10^5*b + 10^6*a)%11 =
    (g%11 - f%11 + e%11 - d%11 + c%11 - b%11 + a%11)%11 =
    (g - f + e - d + c - b + a)%11 =
    ... repeat operation for this number
    

    (10%11は-1と見なされる可能性があることに注意してください(合同です))

  • 等々!

ご覧のとおり、基数10の剰余11は、基数2の剰余3と同じ式になります。これは偶然ではありません。

ここで、数値が基数2であると仮定します。したがって、次のabcdefgように評価されます。

g + 2*f + 2^2*e + 2^3*d + 2^4*c + 2^5*b + 2^6*a

式を見つける方法は、上記とまったく同じです。ここで簡単にする唯一のことは、除数が1より大きい場合、除数を持つすべての桁の余りは桁自体であるため(桁は0または1しかないため)、すべてのdigit%divisorsは単純になりますdigit。それは方法論をまったく変えません。

私たちの数の残りを見てみましょう

  • 2

    (g + 2*f + 2^2*e + 2^3*d + 2^4*c + 2^5*b + 2^6*a)%2 =
    (g + 0 + 0 + 0 + 0 + 0 + 0)%2 =
    g
    

    したがって、最後の桁が0の場合、数値は2で割り切れます。

  • 3

    (g + 2*f + 2^2*e + 2^3*d + 2^4*c + 2^5*b + 2^6*a)%3 =
    (g - f + e - d + c - b + a)%3 =
    ... repeat operation for this number
    
  • 4

    (g + 2*f + 2^2*e + 2^3*d + 2^4*c + 2^5*b + 2^6*a)%4 =
    (g + 2*f + 0 + 0 + 0 + 0 + 0)%4 =
    

    したがって、最後の桁に最後の桁の前の2倍を加えたものが4で割り切れる場合、数値は4で割り切れます。

  • 5

    (g + 2*f + 2^2*e + 2^3*d + 2^4*c + 2^5*b + 2^6*a)%5 =
    (g + 2*f - e - 2*d + c + 2*b - a)%5 =
    ... repeat operation for this number
    
  • 等々

于 2012-05-30T19:00:50.613 に答える
0

ある数が別の数で割り切れるかどうかを調べる一般的な方法がないため(たとえば、ここを参照)、2進表現でそれを見つける方法は明らかにありません。

于 2012-05-30T18:43:08.160 に答える