循環節の性質

 投稿者:山中和義  投稿日:2013年 2月15日(金)11時32分51秒
  既約分数m/n(0<m<nを満たす整数)の循環節の性質

循環節の長さが偶数のとき、半分で切って足し合わせると、9が並ぶ。
1/7=0.{142857}の場合、142+857=999

考察
●2分割
循環節の長さを2kとする。
循環節の前半部分のk桁をa、後半部分のk桁をbとする。
題意より、a+b=10^k-1
既約分数m/nは、m/n=(a*10^k+b)/(10^(2k)-1)と表される。
∴m{10^(2k)-1}=n(a*10^k+b)
∴m{10^(2k)-1}=n{a*10^k+(10^k-1-a)}
∴m(10^k+1)(10^k-1)=n(a+1)(10^k-1)
∴m(10^k+1)=n(a+1)
m,nは互いに素なので、nは(10^k+1)の約数となる。

1/7=142857/999999=(142*1000+857)/999999=0.{142857}の場合、142+857=999
循環節の長さが6なので、k=3 ∴10^3+1=1001=7*11*13

●3分割
循環節の長さを3kとする。
循環節の前1/3部分のk桁をa、真ん中1/3部分のk桁をb、後1/3部分のk桁をcとする。
題意より、a+b+c=10^k-1
既約分数m/nは、m/n=(a*10^(2k)+b*10^k+c)/(10^(3k)-1)と表される。
∴m{10^(3k)-1}=n(a*10^(2k)+b*10^k+c)
∴m{10^(3k)-1}=n{a*10^(2k)+b*10^k+(10^k-1-a-b)}
∴m(10^k-1){10^(2k)+10^k+1}=n(10^k-1){a*(10^k+1)+b+1}
∴m{10^(2k)+10^k+1}=n{a*(10^k+1)+b+1}
m,nは互いに素なので、nは(10^(2k)+10^k+1)の約数となる。

1/7=142857/999999=(14*10000+28*100+57)/999999=0.{142857}の場合、14+28+57=99
循環節の長さが6なので、k=2 ∴10^4+10^2+1=10101=3*7*13*37
(終り)


!!DATA 3 !個数
!!DATA 7,11,13 !素因数

DATA 4 !個数
DATA 3,7,13,37 !素因数

READ D
DIM F(D) !素因数
MAT READ F
MAT PRINT F; !debug


FOR i=1 TO D !素因数の組み合わせで分母の候補を得る
   FOR h=0 TO COMB(D,i)-1

      LET m=1 !分子

      LET n=1 !分母
      LET T=Num2CombBit(h,D,i)
      FOR J=1 TO D
         IF MOD(T,2)=1 THEN LET n=n*F(J)
         LET T=INT(T/2)
      NEXT J

      CALL cycle(m,n,k,L) !循環節の長さを得る

      PRINT m;"/";n;"="; !純循環小数として表示する ※k=0
      PRINT "0.{";right$(REPEAT$("0",L)&STR$(INT(10^(k+L)*m/n)),L);"} 循環節=";L

   NEXT h
NEXT i

END


EXTERNAL SUB cycle(m,n,k,L) !既約分数m/n(0<m<nを満たす整数)の有限小数の桁数kと循環節の長さLを求める
!n/m=0.ab…z{AB…Z} 有限小数0.ab…zはk桁 (k+1)桁からの循環節AB…Zの長さはL
LET x=n

LET p=0 !2^p
DO WHILE MOD(x,2)=0
   LET x=x/2
   LET p=p+1
LOOP
LET q=0 !5^q
DO WHILE MOD(x,5)=0
   LET x=x/5
   LET q=q+1
LOOP
LET k=MAX(p,q) !小数点以下k桁は循環しない

IF x=1 THEN !有限小数
   LET L=0
ELSE !10^L≡1 MOD n/(2^p*5^q)を満たす最小のLより
   LET L=1 !循環節の長さ
   LET a=MOD(10,x)
   DO WHILE a<>1
      LET a=MOD(a*10,x)
      LET L=L+1
   LOOP
END IF
END SUB


EXTERNAL FUNCTION Num2CombBit(h,N,R) !番号から組合せビットパターンを生成する ※辞書式順序
LET v=h+1
LET j=R
LET A=0
FOR i=N-1 TO 0 STEP -1 !組合せをビット位置とする
   LET t=COMB(i,j)
   IF v>t THEN
      LET A=A+2^i !ビット位置(N-i-1)を1とする
      LET j=j-1
      LET v=v-t
   END IF
NEXT i
LET Num2CombBit=A
END FUNCTION


実行結果

3  7  13  37

1 / 3 =0.{3} 循環節= 1
1 / 7 =0.{142857} 循環節= 6
1 / 13 =0.{076923} 循環節= 6
1 / 37 =0.{027} 循環節= 3
1 / 21 =0.{047619} 循環節= 6
1 / 39 =0.{025641} 循環節= 6
1 / 91 =0.{010989} 循環節= 6
1 / 111 =0.{009} 循環節= 3
1 / 259 =0.{003861} 循環節= 6
1 / 481 =0.{002079} 循環節= 6
1 / 273 =0.{003663} 循環節= 6
1 / 777 =0.{001287} 循環節= 6
1 / 1443 =0.{000693} 循環節= 6
1 / 3367 =0.{000297} 循環節= 6
1 / 10101 =0.{000099} 循環節= 6

 

戻る