単位分数の和で1をつくる

 投稿者:山中和義  投稿日:2015年 9月19日(土)11時03分1秒
  問題
1=1/a+1/b+1/cを満たす自然数a,b,cを求めよ。

答え

!・k等分による
!1/m=1/(km)+1/(km)+ … +1/(km)、k個の1/(km)
! 1=(1/3+1/3+1/3) 1を3等分
!  =1/2+1/2=1/2+(1/4+1/4) 1を2等分、一方の1/2を2等分

!その1
LET K=3 !項数
FOR i=1 TO K
   PRINT "+1/";STR$(K);
NEXT i
PRINT

PRINT

!その2
DATA 2 !項数
DATA 2,2 !1=1/2+(1/2)の意
READ K
FOR i=1 TO K-1
   READ A
   PRINT "+1/";STR$(A);
NEXT i
READ A !残り2項
PRINT "+1/";STR$(2*A);"+1/";STR$(2*A)

PRINT


!・1/m=1/(m+1)+1/{m(m+1)}による
!1=1/a+1/b+1/mのとき、1/m=1/(m+1)+1/{m(m+1)}なので、1=1/a+1/b+1/(m+1)+1/{m(m+1)}
! 1=1/1
!  =1/2+1/2 1/1からn=1とみる
!  =1/2+(1/3+1/6) 一方の1/2からn=2とみる
!  =(1/3+1/6)+1/3+1/6=1/3+1/3+(1/6+1/6)=1/3+1/3+(1/3) 1/2からn=2とみる、逆k等分
!特に、
!m=abなら、1=1/a+1/b+1/(ab+1)+1/{ab(ab+1)}
!同様に、
!1=1/a+1/b+ … +1/c+1/(ab…c)のときは、m=ab…cとすれば、
!1=1/a+1/b+ … +1/c+1/(ab…c+1)+1/{(ab…c)(ab…c+1)}
!例
! 1=1/2+1/3+1/(2×3)のとき、
! 1=1/2+1/3+1/7+1/42 (7=2×3+1、42=2×3×7)
! 1=1/2+1/3+1/7+1/43+1/1806 (43=2×3×7+1、1806=2×3×7×43)
! 1=1/2+1/3+1/7+1/43+1/1807+1/3263442 (1807=2×3×7×43+1、3263442=2×3×7×43×1807)
!   :

DATA 2 !項数
DATA 2,2 !1=1/2+1/2の意
!!DATA 3 !項数
!!DATA 2,3,6 !1=1/2+1/3+1/6
READ K
FOR i=1 TO K-1
   READ A
   PRINT "+1/";STR$(A);
NEXT i
READ A !残り2項
PRINT "+1/";STR$(A+1);"+1/";STR$(A*(A+1))

PRINT


!・1/(ab)=1/{a(a+b)}+1/{b(a+b)}による
! 1=1/1
!  =1/{1×(1+1)}+{1×(1+1)}=1/2+1/2 1=1×1とみる
!  =1/2+(1/{1×(1+2)}+1/{2×(1+2)})=1/2+1/3+1/6 2=1×2とみる
!a=1,b=nと考えれば、1/n=1/(n+1)+1/{n(n+1)}の形となる。

DATA 2 !項数
DATA 2,2 !1=1/2+1/2の意
!!DATA 3 !項数
!!DATA 2,3,6 !1=1/2+1/3+1/6
READ K
FOR i=1 TO K-1
   READ A
   PRINT "+1/";STR$(A);
NEXT i
PRINT
READ M !残り2項
FOR A=1 TO SQR(M) !約数
   IF MOD(M,A)=0 THEN
      LET B=M/A
      PRINT "  +1/";STR$(A*(A+B));"+1/";STR$(B*(A+B))
   END IF
NEXT A

PRINT


!・2^k列による
! 1=(1/2)+1/2
!  =(1/2+1/4)+1/4
!  =(1/2)+1/3+1/6

!その1
!1+2+4+8+16+ … +2^(k-1)=2^k-1より、辺々を2^kで割って、移項すれば、
!1=1/2+1/4+1/8+1/16+…+1/(2^k)+1/(2^k)、項数は(k+1)個

LET K=3 !項数
FOR i=1 TO K-1
   PRINT "+1/";STR$(2^i);
NEXT i
PRINT "+1/";STR$(2^(K-1))

PRINT

!その2
!1+2+4+8+16+ … +2^(k-1)=2^k-1=2^k-(2/3+1/3)より、辺々を2^kで割って、移項すれば、
!1=1/2+1/4+1/8+1/16+…+1/2^k+1/{3*2^(k-1)}+1/{3*2^k}、項数は(k+2)個
!同様に、2^k-1の1の展開は、
!1=(4/7+2/7+1/7)
!1=(8/15+4/15+2/15+1/15)
!1=(16/31+8/31+4/31+2/31+1/31)
! :
!とすることができる。

LET K=3 !項数
FOR i=1 TO K-2
   PRINT "+1/";STR$(2^i);
NEXT i
PRINT "+1/";STR$(3*2^(K-3));"+1/";STR$(3*2^(K-2))

PRINT


END


実行結果
+1/3+1/3+1/3

+1/2+1/4+1/4

+1/2+1/3+1/6

+1/2
  +1/3+1/6

+1/2+1/4+1/4

+1/2+1/3+1/6


 

Re: 単位分数の和で1をつくる

 投稿者:山中和義  投稿日:2015年 9月20日(日)09時47分12秒
  > No.3842[元記事へ]

> 問題
> 1=1/a+1/b+1/cを満たす自然数a,b,cを求めよ。



OPTION ARITHMETIC RATIONAL !有理数モード
LET K=3 !項数
DIM B(K)
PUBLIC NUMERIC C !場合の数
LET C=0
CALL try(1,1,2,K,B) !1=1/2+ …
PRINT C;"通り"
END

EXTERNAL SUB try(P,R,A,K,B()) !バックトラック法で検索する
OPTION ARITHMETIC RATIONAL !有理数モード
IF P=K THEN !最後の項なら
   IF NUMER(R)=1 THEN !単位分数なら
      LET C=C+1
      FOR i=1 TO K-1 !結果を表示する
         PRINT "+1/";STR$(B(i));
      NEXT i
      PRINT "+1/";STR$(DENOM(R))
   END IF
ELSE
   FOR i=A TO (K-P+1)/R !項数がm個のとき、R=1/a+1/b+ … +1/c≦m/aより
      LET B(P)=i !p項目
      LET S=R-1/i !残り
      IF S>0 THEN CALL try(P+1,S,i,K,B) !次へ
   NEXT i
END IF
END SUB



異なる単位分数の和では、

サブルーチン部分を、

EXTERNAL SUB try(P,R,A,K,B()) !バックトラック法で検索する
OPTION ARITHMETIC RATIONAL !有理数モード
IF P=K THEN !最後の項なら
   IF NUMER(R)=1 AND DENOM(R)>B(K-1) THEN !単位分数なら
      LET C=C+1
      FOR i=1 TO K-1 !結果を表示する
         PRINT "+1/";STR$(B(i));
      NEXT i
      PRINT "+1/";STR$(DENOM(R))
   END IF
ELSE
   FOR i=A TO (K-P+1)/R !項数がm個のとき、R=1/a+1/b+ … +1/c≦m/aより
      LET B(P)=i !p項目
      LET S=R-1/i !残り
      IF S>0 THEN CALL try(P+1,S,i+1,K,B) !次へ
   NEXT i
END IF
END SUB

と改修する。

 

戻る