平成11年10月16日

<美しい数学の話>

第9話 「不思議な平方数」

『8』 1桁の整数1,5,6を平方すると、1,25,36となって下1桁は変わりません。 そこで、問題です。

  1. 2桁の整数Nを平方しても下2桁が同じNとなる数字Nを見つけましょう。
  2. 3桁の整数Nを平方しても下3桁が同じNとなる数字Nを見つけましょう。

(3)4桁の整数Nを平方しても下4桁が同じNとなる数字Nを見つけましょう。

 ★次ぎに、整数Nの桁数を5桁、6桁、・・・ とした場合、このような整数は

 果たしてあるのでしょうか? 誰か考えて、教えてください。

  

<ch3coohさん> から寄せられた解法、10月14日受信

水の流れ:平方の問題について 10進数で、最下位のn桁が2乗しても変化しない値を求めることが課題ですね?

いくつか回答がありましたが、別の方向から考えていました。

x^2≡x(mod n)として x*(x-1)≡0(mod n)が答えを求める方程式と考えました。

ここで、自明な解としては、0,1となりますが、そうでない回答としては、

x,x-1に分散してnの約数が含まれる場合が考えられます。

10進数に限れば、10の約数は2,5なので、5の周辺で、

x=5の場合: x-1= 4= 2^2で2が含まれ

x=6の場合: x= 2*3, x-1=5で2,5の双方が含まれます。

10進数のみでなく、n進数に異なった値を設定した場合のチェックを行いました。

資料1にプログラムを、資料2にデータを示します。

上記のように素数の特性との関連を考慮すると、x, x-1にnを構成する

素数が入っていなくてはならないので、nが素数の場合は課題を満たす

xが存在しないのではないかと推測され、それは大体満足されているようです。

(自動チェックもプログラムに組み込めば良いのですが・・・)

また、単一の素数をm乗した値を準素数とすると、準素数でも課題を満たすxは無いようです。

次に注目した値は30です。この値は、最も小さい3つの素数を含んでいる最小の値です(2*3*5)

この値をbase-numberとして考えると多くの点が条件を満たすものと予測しましたが、おおよそその通りになっています。

ここで、拡張した考え方として、条件を満たす値の存在は、その値を構成している素数の種類の数に従うと思われるのですが・・・

(証明は多分可能だと思う)

例:

100の場合 2^2*5^2で、構成する素数の種類は2、解は自明な値を含めて4持つ

210の場合 2*3*5*7で、構成する素数の種類は4、解は自明な値を含めて16持つ

なんとなくですが、答えの総数は2^"種類の数'であるような気がします。

資料1

#include <stdio.h>

int

test_nshin( int base )

{int f, i, x, y ;printf( "0, 1" ) ; f= 0 ;

for( i= 2 ; i< base ; i++ ){ x= i*i ; y= x%base ;

if ( y== i ) { printf( ", %3d", i ) ; f= 1 ; }}

return f ;}

int main( void ){ int i ;

for( i= 3 ; i< 100 ; i++ ){printf( "%3d : ", i ) ;

test_nshin( i ) ;

putchar( '\n' ) ;}

return 0 ;}

 

資料2

3 : 0, 1

4 : 0, 1

5 : 0, 1

6 : 0, 1, 3, 4

7 : 0, 1

8 : 0, 1

9 : 0, 1

10 : 0, 1, 5, 6

11 : 0, 1

12 : 0, 1, 4, 9

13 : 0, 1

14 : 0, 1, 7, 8

15 : 0, 1, 6, 10

16 : 0, 1

17 : 0, 1

18 : 0, 1, 9, 10

19 : 0, 1

20 : 0, 1, 5, 16

21 : 0, 1, 7, 15

22 : 0, 1, 11, 12

23 : 0, 1

24 : 0, 1, 9, 16

25 : 0, 1

26 : 0, 1, 13, 14

27 : 0, 1

28 : 0, 1, 8, 21

29 : 0, 1

30 : 0, 1, 6, 10, 15, 16, 21, 25

31 : 0, 1

32 : 0, 1

33 : 0, 1, 12, 22

34 : 0, 1, 17, 18

35 : 0, 1, 15, 21

36 : 0, 1, 9, 28

37 : 0, 1

38 : 0, 1, 19, 20

39 : 0, 1, 13, 27

40 : 0, 1, 16, 25

41 : 0, 1

42 : 0, 1, 7, 15, 21, 22, 28, 36

43 : 0, 1

44 : 0, 1, 12, 33

45 : 0, 1, 10, 36

46 : 0, 1, 23, 24

47 : 0, 1

48 : 0, 1, 16, 33

49 : 0, 1

50 : 0, 1, 25, 26

51 : 0, 1, 18, 34

52 : 0, 1, 13, 40

53 : 0, 1

54 : 0, 1, 27, 28

55 : 0, 1, 11, 45

56 : 0, 1, 8, 49

57 : 0, 1, 19, 39

58 : 0, 1, 29, 30

59 : 0, 1

60 : 0, 1, 16, 21, 25, 36, 40, 45

61 : 0, 1

62 : 0, 1, 31, 32

63 : 0, 1, 28, 36

64 : 0, 1

65 : 0, 1, 26, 40

66 : 0, 1, 12, 22, 33, 34, 45, 55

67 : 0, 1

68 : 0, 1, 17, 52

69 : 0, 1, 24, 46

70 : 0, 1, 15, 21, 35, 36, 50, 56

71 : 0, 1

72 : 0, 1, 9, 64

73 : 0, 1

74 : 0, 1, 37, 38

75 : 0, 1, 25, 51

76 : 0, 1, 20, 57

77 : 0, 1, 22, 56

78 : 0, 1, 13, 27, 39, 40, 52, 66

79 : 0, 1

80 : 0, 1, 16, 65

81 : 0, 1

82 : 0, 1, 41, 42

83 : 0, 1

84 : 0, 1, 21, 28, 36, 49, 57, 64

85 : 0, 1, 35, 51

86 : 0, 1, 43, 44

87 : 0, 1, 30, 58

88 : 0, 1, 33, 56

89 : 0, 1

90 : 0, 1, 10, 36, 45, 46, 55, 81

91 : 0, 1, 14, 78

92 : 0, 1, 24, 69

93 : 0, 1, 31, 63

94 : 0, 1, 47, 48

95 : 0, 1, 20, 76

96 : 0, 1, 33, 64

97 : 0, 1

98 : 0, 1, 49, 50

99 : 0, 1, 45, 55          

<水の流れ:コメント> >10月14日発信

10進数のみでなく、n進数に異なった値を設定した場合のチェックを行いました。

資料1にプログラムを、資料2にデータを示します。

上記のように素数の特性との関連を考慮すると、x, x-1にnを構成する

素数が入っていなくてはならないので、nが素数の場合は課題を満たす

xが存在しないのではないかと推測され、それは大体満足されているようです。

(自動チェックもプログラムに組み込めば良いのですが・・・)

また、単一の素数をm乗した値を準素数とすると、準素数でも課題を満たすxは無いようです

上の青いところ私の力不足で現在理解を超えていますので、もう一度お願いします。

 また、資料2の数字がなんのことか、今のところピンート来ていません。

ごめんなさい。教えてください。「平方の問題」は水の流れ先としてリンクを貼ってあります。

ご覧ください。

また、いろいろと教えてください。  

<ch3coohさん> から寄せられた説明、10月15日受信

通常、私たちが使用しているのは10で桁上がりをする10進数です。

これは、桁上がりを行う単位として、ある程度考えやすいレベル(あまりにも多いと大変です。)で決められたものだと思います。

(最も、分かり易い考えとしては、人間の指の数がこうなった理由と思われる。)

ただし、日常使用する単位でも、10進数以外を使用することはあります。

最も良い例は、角度と時間です。あれらの単位は、12進数をベースとして設定されていますね?

"値"というもの自身を考えると、人間が便宜的に使用している10進数はそれ程意味がある訳ではないとも考えられます。

たとえば、コンピュータの世界では、中間的なレベルを用いることが大変であるため、2進数を使用します。

(ただし、それでは情報量が細かすぎて、人が扱いづらいので、プログラミングでは16進数や8進数を用いることが多い)

では、この"桁上がり"を行う単位を2以外の値として設定できるでしょうか?

適当な取り決めの元に、決定すれば、好きなように設定可能と思われます。

(これを考え付いたのは"フェルマーの最終予測:現在では大定理"について、

a^n+b^n=c^nの各要素をa= a1+a2*n+a3*n^2...で0<=am<nとして、項を展開した場合を考えたからです。)

この考え方に、やや近いのが、(mod n)の世界です。

さて、実際にプログラムで何をやっているかを示します。

その前に、道具立てとしてn進数の表示を考えます。

(これは、最終的にはn>10の場合を含むので何らかの分かり易い表示方法が必要だからです。)

n進数については後ろに(n)をつけるものとし、各桁の内容は10進数、桁の区切りを','とします。

また、10進数は特別な区切りを不要とします。

例えば、21進数で3桁の数字と10進数の変換を考えます。

2,15,11(21)= 2*21^2+15*21+11= 882+315+11= 1218 です。

では、表として出した値が何であるかを示します。

6 : 0, 1, 3, 4

"6"というのは、6進数の場合です。

6進数で1桁の値は0,1,2,3,4,5です。

0^2= 0= 0(6)

1^2= 1= 1(6)

2^2= 4= 4(6)

3^2= 9= 1,3(6) : 9= 1*6+3

4^2= 16= 2,4(6) : 16= 2*6+4

5^2= 25= 4,1(6) : 25= 4*6+1

となりました。

ここで、二乗した結果の一桁目が同じ値である数字は0,1,3,4です。

これが、後ろに付いている値です。

では、9進数ではどうなるでしょうか?

0^2= 0= 0(9)

1^2= 1= 1(9)

2^2= 4= 4(9)

3^2= 9= 1,0(9)

4^2= 16= 1,7(9)

5^2= 25= 2,7(9)

6^2= 36= 4,0(9)

7^2= 49= 5,4(9)

8^2= 64= 7,1(9)

となります。

結果を見ると、二乗した結果の一桁目が同じ値である数字は自明な値である0,1のみです。

これは、9=3^2と、構成する素数の種類が1つであるからだと思います。

x^2≡x(mod 9)

x*(x-1)≡0(mod 9)

で、一桁目の値が合致する条件を考えると・・・

x*(x-1)= y*9= y*3*3であれば、(mod 9)で一桁目が合致するはずですね?

ここで、x,x-1の一方に約数3が含む値を設定すると、他方は約数3を含まない。

ゆえに、一方の値のみに、素数3が2つ含まれる値のみが上記の条件を満たす。

・・・となると、

x= y*9 or x= y*9+1ですが、これは(mod n)では0,1のみとなってしまいます。

で、このような値は"特殊な値"であるものとし、準素数(= 構成する素数が1つのみ)

と"便宜的"に命名しました。

 

ちなみに、プログラムでチェックしたところ、2〜9999進数の範囲内では、

上記のような値の条件とnの構成する素数の数の関係は予測に合致しています。

 

+αの情報として、

x^2= (n-y)^2= n^2-2*n*y+y*2です。(x= n-y)

そのため、1,2,3... とn-1,n-2,n-3...という値についての(mod n)の結果は一致し、

二乗した場合の一桁目は対称的な値となるます。

 

<自宅>  mizuryu@aqua.ocn.ne.jp

 

 


 最初のページへもどる