地図の塗分け

 

 

 

 

 

 

 

 

 

f:id:nakasuido:20211109180152j:plain

A,B,C,D,Eの5つのエリアよりなる地図



REM   上の地図で隣り合う部分が異なる色になるように6色で塗り分ける方法の数。十進BASICSI使用。

FOR  a=1   TO  6
   FOR  b=1  TO  6
      FOR  c=1   TO  6
         FOR  d=1  TO  6
            FOR  e=1  TO  6
            
               IF  a<>b  AND  a<>c  AND   b<>c AND   b<>d  AND   b<>e  AND  c<>e AND  d<>e  THEN  LET s=s+1
               
               
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A
PRINT  s

END

ライツアウトを解く

10進basicを使っています

 

DIM a(9,9)
DIM   b(9,9)
DIM   c(9)
DIM  d(9)

MAT  a=ZER
LET a(1,1)=1
LET a(1,2)=1
LET a(1,4)=1
LET a(2,1)=1
LET a(2,2)=1
LET a(2,3)=1
LET a(2,5)=1
LET a(3,2)=1
LET a(3,3)=1
LET a(3,6)=1
LET a(4,1)=1
LET a(4,4)=1
LET a(4,5)=1
LET a(4,7)=1
LET a(5,2)=1
LET a(5,4)=1
LET a(5,5)=1
LET a(5,6)=1
LET a(5,8)=1
LET a(6,3)=1
LET a(6,5)=1
LET a(6,6)=1
LET a(6,9)=1
LET a(7,4)=1
LET a(7,7)=1
LET a(7,8)=1
LET a(8,5)=1
LET a(8,7)=1
LET a(8,8)=1
LET a(8,9)=1
LET a(9,6)=1
LET a(9,8)=1
LET a(9,9)=1
MAT   b=INV(a)
LET c(1)=1
LET c(2)=1
LET c(3)=0
LET c(4)=0
LET c(5)=0
LET c(6)=0
LET c(7)=1
LET c(8)=0
LET c(9)=0
MAT  d=b*c

LET g=DET(a)
DIM   h(9)
MAT  h=g*d
FOR   k=1  TO  9

   PRINT MOD( h(k),2)
NEXT K

 


END

奇数次の魔方陣を10進BASICで作る

 

https://www.mirai-kougaku.jp/laboratory/pages/161118.php

REM   十進basicを使っています。オプションメニューから文法--microsoft BASIC互換を選んで実行してください。
REM  !印以下は注釈文です。実行には影響を与えません。
REM   アルゴリズムはサイモン-ド-ラ-ルベールの斜進法を使っています。斜進法についてはインターネットなどで調べてください。
REM  -------------------------------------------------------------------
INPUT PROMPT "奇数を入力してください。":n
PRINT   !  出力を見やすくするため
PRINT  !
PRINT  !
OPTION  BASE  1
DIM  a(n,n)  !用いる配列の宣言
MAT   a=ZER    !配列を0で初期化

LET k=1
LET i=1      ! 行上段
LET j=(n+1)/2  !  列中央
LET a(i,j)=1  !  上段中央を1とする
10
   LET k=k+1
   IF   k=n*n+1      THEN   GOTO     50   !  全部置けたら50へ飛んで盤面を表示
   LET i=i-1
   LET j=j+1
  IF   i<1   AND   j>n   THEN   LET a(i+2,j-1)=k:i=i+2:j=j-1:GOTO  10
   IF   i<1  THEN   GOTO   30   !  iの値が上側の壁なら30へ飛ぶ
   IF   j>n   THEN   GOTO   40   !  jの値が右側の壁なら40へ飛ぶ
 
   IF   a(i,j)=0   THEN  LET a(i,j)=k :GOTO  10 ! 進むべきところが0ならそこをkとする
   IF  a(i,j)<>0  THEN   LET a(i+2,j-1)=k :i=i+2:j=j-1:GOTO  10        !進むべきところが0でないならば1つ下をkとする 

 


 
30
   LET i=n    !  下段に飛ぶ
   LET j=j
   LET a(i,j)=k
   GOTO  10  ! 行番号10へもどる
40
   LET i=i
   LET j=1   !  一番左の列に飛ぶ
   LET a(i,j)=k
   GOTO  10   ! 行番号10へもどる
    
    
REM    ------------------------------------------------ 
!    盤面出力
50  

PRINT   n;"次魔方陣
PRINT


   FOR   p=1  TO   n
      FOR   q=1   TO   n
         PRINT   a(p,q);
      NEXT Q
      PRINT  
   NEXT P
REM---------------------------------------------------------
PRINT  
PRINT  "各行の合計の確認"
sum=0
FOR   t=1  TO   n
FOR  tt=1   TO  n
sum=sum+a(t,tt)
NEXT
PRINT  sum
sum=0
NEXT
REM  ------------------------------------
PRINT  
PRINT  "各列の合計の確認"
sum2=0
FOR   t=1  TO   n
FOR  tt=1   TO  n
sum2=sum2+a(tt,t)
NEXT
PRINT  sum2
sum2=0
NEXT
REM---------------------------------------------
PRINT 
PRINT  "主対角線の合計の確認"
sum3=0
FOR   t=1  TO   n
FOR  tt=1   TO  n
IF    t=tt   THEN  sum3=sum3+a(t,tt)
NEXT
NEXT
PRINT  sum3
REM------------------------------------
PRINT  
PRINT  "副対角線の合計の確認"
sum4=0
FOR   t=1  TO   n
FOR  tt=1   TO  n
IF    t+tt=n+1   THEN  sum4=sum4+a(t,tt)
NEXT
NEXT
PRINT  sum4
END

10進basicで分割数を求める

mathematician.blog.jp行列式で分割数を求めています詳しくは上のサイトから

INPUT   n
DIM  a(200,200)
MAT  a=ZER
DIM   d(n,n)

FOR    i=1  TO   n
   FOR  j=1  TO   n
      FOR  k=1  TO  30
         IF  i=j    THEN   LET a(i,j)=1  
         IF    j=i+1  THEN    LET a(i,j)=-1
         IF   i=j+(k*(3*k-1)/2-1)  THEN   LET a(i,j)=(-1)^(k+1)
         IF   i=j+(k*(3*k+1)/2-1)  THEN   LET a(i,j)=(-1)^(k+1)
      NEXT K
       
   NEXT J
NEXT I
REM  -------------------------------------------
FOR    b=1   TO   n
   FOR   c=1  TO n
      LET d(b,c)=  a(b,c)
      PRINT  d(b,c);
   NEXT C
   PRINT
NEXT B
REM-----------------------------------
PRINT   DET(d)

END

 

オリジナル ディオファントス方程式の解法

不定方程式 a^3+b^5=c^7を解いてください。
解答
*は乗算,^はべき乗を表します。
まずa=p^5, b=p^3, c=2*p^2 とおきます。
するとa^3+b^5=p^15+p^15=(2^7)*(p^14)=c^7
となります。まとめるとp^14*(p+p-2^7)=0となります。
よって2*p=2^7
ゆえにp=2^6となります。
a=p^5=(2^6)^5
=2^30,
b=p^3=(2^6)^3
=2^18,
c=2*p^2=2*(2^6)^2
=2^13と解がもとまりました。
間違いないか検算をしてみましょう。
左辺=a^3+b^5=(2^30)^3+(2^18)^5
=2^90+2^90=2^91

右辺=c^7=(2^13)^7=2^91
確かに左辺=右辺となっています。
最初にa=p^5, b=p^3, c=2*p^2
とおきましたが置き方を工夫することで
(係数をつけたりする)解はいくらでも得られます。
不定方程式だから当然ですけれど。
ただしa^4+b^6=c^8などは解けません。
この手の方程式が解をもつためには
方程式の指数がたがいに共通因数を
持っていてはならないのです。
冒頭で上げた例の指数はそれぞれ3,5,7でこれらは
共通因数を持たないので方程式はとけました。
解き方のコツはa,b,cをpの式で表し各項のpの指数が
1差になるようにすればよいのです。
上の解き方をよく見てください。
同様な考えでa^3+5*(b^5)=6*(c^7)とかも解けますし
項数が増えてa^3+b^5+c^7+d^6=e^12とかも解けます。

エラトステネスの篩

DIM  a(1000)
FOR  b=2  TO  1000
   LET a(b)=b
NEXT B
REM------------------------------------
FOR  i=2  TO   1000
   FOR   j=2  TO  1000
      IF i<>a(j)  AND   MOD(a(j),i)=0  THEN  LET a(j)=0
   NEXT J
NEXT I
REM  ------------------------------
LET t=1
FOR   k=2  TO   1000

   IF  a(k)<>0    THEN  PRINT t;"番目の素数" ;a(k)
   IF  a(k)<>0  THEN  LET t=t+1
NEXT K

END