|
> No.2961[元記事へ]
問題
分母がn以下の相異なる単位分数の和で1をつくる
1=1/a+1/b+ … +1/c、a<b< … <c≦n
例
1/1 項数= 1
1/2+1/3+1/6 項数= 3
1/2+1/3+1/7+1/42 項数= 4
1/2+1/3+1/7+1/78+1/91 項数= 5
1/2+1/3+1/8+1/24 項数= 4
1/2+1/3+1/8+1/32+1/96 項数= 5
1/2+1/3+1/8+1/33+1/88 項数= 5
1/2+1/3+1/8+1/36+1/72 項数= 5
1/2+1/3+1/8+1/40+1/60 項数= 5
1/2+1/3+1/8+1/42+1/56 項数= 5
1/2+1/3+1/8+1/56+1/78+1/91 項数= 6
1/2+1/3+1/8+1/60+1/72+1/90 項数= 6
1/2+1/3+1/8+1/63+1/72+1/84 項数= 6
1/2+1/3+1/9+1/18 項数= 4
1/2+1/3+1/9+1/22+1/99 項数= 5
1/2+1/3+1/9+1/24+1/72 項数= 5
1/2+1/3+1/9+1/27+1/54 項数= 5
1/2+1/3+1/9+1/30+1/45 項数= 5
1/2+1/3+1/9+1/32+1/72+1/96 項数= 6
1/2+1/3+1/9+1/33+1/66+1/99 項数= 6
1/2+1/3+1/9+1/33+1/72+1/88 項数= 6
1/2+1/3+1/9+1/35+1/63+1/90 項数= 6
:
OPTION ARITHMETIC RATIONAL !有理数モード
DIM F(100),A(100),B(100)
MAT F=ZER
LET A(100)=1/100 !iの値、i以降の和
LET B(100)=A(100)
FOR i=99 TO 1 STEP -1
LET A(i)=1/i !減少列 1/1>1/2>1/3> … >1/100
LET B(i)=A(i)+B(i+1)
NEXT i
LET N=1
CALL try(N,1,A,B,F)
END
EXTERNAL SUB try(N,p,A(),B(),F()) !バックトラック法で検索する
OPTION ARITHMETIC RATIONAL !有理数モード
FOR i=p TO 100 !※cの上限
LET T=N-A(i) !残り
IF T>0 THEN
IF i<100 AND B(i+1)<T THEN EXIT FOR !全部を使って可能性があれば、その部分集合を考える
LET F(i)=1 !使用中とする
CALL try(T,i+1,A,B,F) !有理数tを(i+1)以降で表す
LET F(i)=0 !元に戻す
ELSEIF T=0 THEN !題意を満たすなら
LET k=0
FOR j=1 TO p-1 !式を表示する
IF F(j)=1 THEN
PRINT "1/";STR$(j);"+";
LET k=k+1
END IF
NEXT j
PRINT "1/";STR$(i);" 項数=";k+1
END IF
NEXT i
END SUB
|
|