整数をべき乗数の和と差で表す

 投稿者:山中和義  投稿日:2013年 6月18日(火)10時16分49秒
 
問題
すべての整数(非負整数、自然数)nは、1から始まる2つ以上の連続する自然数の和と差で表すことができる。
すなわち、2以上の整数kが存在して、
 式 n=±1±2±3±4±5± … ±k
で表される。
答え
0= 1+2 -3
1=-1+2
2=-1+2 -3+4
3=-1+2 -3+4 -5+6
4=-1+2 -3+4 -5+6 -7+8
 :

負数-1,-2,-3,…は、+,-の記号を反転させる。
(終り)

答え(帰納的な表現による冗長性のある解)
0= 1+2 -3
1=-1+2
となる。
n=(±1±2± … ±k)とすると、
恒等式
 -(k+1)
 +(k+2)
 =1
より、
n+1=(±1±2± … ±k) + { -(k+1)+(k+2) }

負数-1,-2,-3,…は、+,-の記号を反転させる。
(終り)


問題
すべての整数(非負整数、自然数)nは、1から始まる2つ以上の連続する平方数(2乗数)の和と差で表すことができる。
すなわち、2以上の整数kが存在して、
 式 n=±1^2±2^2±3^2±4^2±5^2± … ±k^2
で表される。
答え
0=1^2+2^2-3^2+4^2-5^2-6^2+7^2
1=1^2-2^2+3^2-4^2-5^2+6^2
2=-1^2-2^2-3^2+4^2
3=-1^2+2^2
4=-1^2-2^2+3^2
となる。

n=(±1^2±2^2± … ±k^2)とすると、
恒等式
 +(k+1)^2-(k+2)^2
 -(k+3)^2+(k+4)^2
 =4
より、
n+4=(±1^2+ … ±k^2) + { (k+1)^2-(k+2)^2-(k+3)^2+(k+4)^2 }
(終り)



問題
すべての整数(非負整数、自然数)nは、1から始まる2つ以上の連続する立方数(3乗数)の和と差で表すことができる。
すなわち、2以上の整数kが存在して、
 式 n=±1^3±2^3±3^3±4^3±5^3± … ±k^3
で表される。
答え
-(x+1)^3+(x+2)^3+(x+3)^3-(x+4)^3
+(x+5)^3-(x+6)^3-(x+7)^3+(x+8)^3
=48

(終り)


同様に、

問題
すべての整数(非負整数、自然数)nは、1から始まる2つ以上の連続する4乗数の和と差で表すことができる。
すなわち、2以上の整数kが存在して、
 式 n=±1^4±2^4±3^4±4^4±5^4± … ±k^4
で表される。
答え
 個数が半分で、1次式になるものを見つけて、
 残り半分は、+,-の記号を反転したものを加える。
で、恒等式を見つけると、
+(x+1)^4 -(x+2)^4 -(x+3)^4 +(x+4)^4 -(x+5)^4 +(x+6)^4 +(x+7)^4 -(x+8)^4
-(x+9)^4+(x+10)^4+(x+11)^4-(x+12)^4+(x+13)^4-(x+14)^4-(x+15)^4+(x+16)^4
=1536



1,4,48,1536,…



最適解のひとつを求めるプログラム

OPTION ARITHMETIC RATIONAL !多桁整数

LET M=3 !べき乗
LET X=48 !0からXまで

DIM F(0 TO X) !出現回数
MAT F=ZER
FOR P=2 TO 2^32-1 !組み合わせ(ビットパターン)
   LET R=0 !最上位の1の位置
   LET w=P

   LET A=0 !n=±1^m±2^m±3^m± … ±k^m
   LET B=0
   LET K=1 !10進法から2進法へ
   DO WHILE w>0
      LET s=MOD(w,2)
      IF s=1 THEN LET R=K
      LET A=A+(2*s-1)*K^M !0,1 → -1,1
      LET B=B+(1-2*s)*K^M !0,1 → 1,-1
      LET w=INT(w/2) !次の桁へ
      LET K=K+1
   LOOP
   IF (A>=0 AND A<=X) THEN CALL PrintOut(A,P,1) !範囲内なら結果を表示する
   IF (B>=0 AND B<=X) THEN CALL PrintOut(B,P,-1)

   IF P=2^R-1 THEN !2のべき乗でひと区切りする
      FOR i=0 TO X !すべてが見つかったなら
         IF F(i)=0 THEN EXIT FOR
      NEXT i
      IF i>X THEN EXIT FOR !終了!!!
   END IF
NEXT P
PRINT P; 2^R !debug
MAT PRINT F; !debug

SUB PrintOut(N,P,S) !式 n=±1^m±2^m±3^m± … ±k^m を表示する
   LET F(N)=F(N)+1 !出現回数

   IF F(N)=1 THEN !最初なら、式を表示する
      PRINT STR$(N);"=";

      LET w=P !ビットパターン
      LET K=1
      DO WHILE w>0 !10進法から2進法へ
         IF MOD(w,2)=0 THEN !±
            IF S=1 THEN PRINT "-"; ELSE PRINT "+";
         ELSE
            IF S=1 THEN PRINT "+"; ELSE PRINT "-";
         END IF
         PRINT STR$(K); !k^m
         IF M>1 THEN PRINT "^";STR$(M);

         LET w=INT(w/2) !次の桁へ
         LET K=K+1
      LOOP
      PRINT
   END IF
END SUB

END

 

戻る