十進BASIC 第2掲示板過去ログ2015


数独と魔方陣

 投稿者:永野護  投稿日:2015年 1月 7日(水)09時53分8秒
  新年明けましておめでとうございます。本年も皆様にとって良き一年でありますように。
皆様のご健康とご多幸を心からお祈り申し上げます。

http://mixi.jp/view_bbs.pl?comm_id=225007&id=2732278に数独と魔方陣の関係が書かれています。
この方法で数独を解くことはできないでしょうか。
よろし区お願いします。
 

数独と魔方陣

 投稿者:永野護  投稿日:2015年 1月 7日(水)09時59分1秒
  (訂正)よろしくお願いします。(まことに申し訳ございませんでした)

 

オイラー方陣

 投稿者:永野護  投稿日:2015年 1月11日(日)15時52分2秒
  さきごろ 魔方陣の世界 (著者  大森清美 出版社 日本評論社)
という本を読んでいて気がついたのですが
この本の49-50ページで述べられているのは結局6次のオイラー方陣ではないでしょうか。
6次のオイラー方陣は存在しないということになっているのですが。
 

Re: オイラー方陣

 投稿者:GAI  投稿日:2015年 1月12日(月)23時55分48秒
  > No.3577[元記事へ]

永野護さんへのお返事です。

> さきごろ 魔方陣の世界 (著者  大森清美 出版社 日本評論社)
> という本を読んでいて気がついたのですが
> この本の49-50ページで述べられているのは結局6次のオイラー方陣ではないでしょうか。
> 6次のオイラー方陣は存在しないということになっているのですが。


6次のラテン方陣は存在するのに対して,6次のグレコ・ラテン方陣は不可能であることが証明されています.
グレコ・ラテン方陣は二重の要素を含む組合せでの重なりを持たぬものです。
 

フェルマーの最終定理

 投稿者:永野護  投稿日:2015年 1月13日(火)16時12分40秒
  a^n+b^n=c^nを満たす自然数解は存在しない。(n>=3)---------フェルマーの最終定理
a,b,cの大小関係で場合わけして論ずる。
a>=b>=cの場合 明らかにa^n+b^n>c^nであるから解は存在しない。
b>=a>=cの場合   明らかにa^n+b^n>c^nであるから解は存在しない。
a>=c>=bの場合    明らかにa^n+b^n>c^nであるから解は存在しない。
b>=c>=aの場合     明らかにa^n+b^n>c^nであるから解は存在しない。
c>a>bの場合とc>b>aの場合  背理法を使う。
a^n+b^n=c^nが成り立つと仮定する。
ここでこの式の両辺をc^nで割ると(a/c)^n+(b/c)^n=(c/c)^n
ここでn→∞とすると左辺=0,右辺=1となり矛盾である。
よってa^n+b^n=c^nは成り立たない。
証明終わり。
こんなのはだめでしょうか。
 

ファイル埋め込み

 投稿者:しばっち  投稿日:2015年 1月29日(木)19時08分5秒
  フルカラーの画像データに任意のファイルを埋め込みます。
RGB各8Bitから各下位3,3,2bit(=1byte)を利用します。
つまり、1dotにつき1byteずつ書き込んでいきます。
埋め込み可能なファイル上限は画像サイズ(横dot × 縦dot)になります。
また、埋め込みファイルの判定に判別文字列+復元用にファイル名の長さ(1byte)+
ファイル名+ファイルサイズ(4byte)をヘッダーとして使用しています。

※このプログラムでは、復元されたファイルの一部が欠損・欠落するようです。

!' ステガノグラフィー
OPTION CHARACTER BYTE
DECLARE EXTERNAL FUNCTION GETDATA
PUBLIC NUMERIC XSIZE,YSIZE,ADR
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
IF F$="" THEN STOP
CALL PICTURELOAD(F$,XSIZE,YSIZE)
LET KEY$="Steganography" !'判別文字列
LET ADR=0
LET D$=""
FOR I=1 TO LEN(KEY$)
   LET D$=D$&CHR$(GETDATA)
NEXT I
IF D$<>KEY$ THEN
   PRINT "任意ファイルを画像に埋め込みます"
   PRINT XSIZE*YSIZE-(LEN(KEY$)+5+255);"Byteまで"
   FILE GETNAME F$,"埋め込みファイル|*.*"
   IF F$="" THEN STOP
   FILE SPLITNAME (F$) PATH$, NAME$, EXT$
   LET NAME$=NAME$&EXT$
   PRINT "埋め込みファイル:";NAME$
   OPEN #1:NAME F$
   ASK #1 : FILESIZE FSIZE
   PRINT "ファイルサイズ:";FSIZE;"Byte"
   IF XSIZE*YSIZE-(LEN(KEY$)+LEN(NAME$)+5)<FSIZE THEN
      PRINT "ファイルが大き過ぎます。"
      CLOSE #1
      STOP
   END IF
   LET ADR=0
   FOR I=1 TO LEN(KEY$)
      CALL PUTDATA(ORD(KEY$(I:I)))
   NEXT I
   LET NAMESIZE=LEN(NAME$)
   CALL PUTDATA(NAMESIZE)
   FOR I=1 TO NAMESIZE
      CALL PUTDATA(ORD(NAME$(I:I)))
   NEXT I
   LET FSIZE$=MKL$(FSIZE)
   FOR I=1 TO 4
      CALL PUTDATA(ORD(FSIZE$(I:I)))
   NEXT I
   FOR I=1 TO FSIZE
      CHARACTER INPUT #1 : A$
      CALL PUTDATA(ORD(A$))
   NEXT I
   CLOSE #1
   FILE GETSAVENAME F$,"保存BMP,PNGファイル|*.BMP;*.PNG"
   IF F$="" THEN STOP
   IF POS(F$,".")=0 THEN LET F$=F$&".png"
   GSAVE F$
ELSE
   LET ADR=LEN(KEY$)
   PRINT "画像からファイルを抽出します"
   LET NAMESIZE=GETDATA
   LET FILENAME$=""
   FOR I=1 TO NAMESIZE
      LET FILENAME$=FILENAME$&CHR$(GETDATA)
   NEXT I
   PRINT "抽出ファイル名:";FILENAME$
   LET S$=""
   FOR I=1 TO 4
      LET S$=S$&CHR$(GETDATA)
   NEXT I
   LET FSIZE=CVL(S$)
   PRINT "ファイルサイズ:";FSIZE
   FILE GETSAVENAME F$,"抽出ファイル|*.*"
   IF F$="" THEN STOP
   OPEN #1:NAME F$
   ERASE #1
   FOR I=1 TO FSIZE
      PRINT #1:CHR$(GETDATA);
   NEXT I
   CLOSE #1
END IF
END

EXTERNAL  SUB PUTDATA(N)
LET XX=MOD(ADR,XSIZE)
LET YY=INT(ADR/XSIZE)
LET ADR=ADR+1
CALL GETPOINT(XX,YY,R,G,B)
LET R=BITAND(R,BVAL("11111000",2))
LET R=BITOR(R,BITAND(N,BVAL("11100000",2))/32)
LET G=BITAND(G,BVAL("11111000",2))
LET G=BITOR(G,BITAND(N,BVAL("00011100",2))/4)
LET B=BITAND(B,BVAL("11111100",2))
LET B=BITOR(B,BITAND(N,BVAL("00000011",2)))
CALL PSET(XX,YY,R,G,B)
END SUB

EXTERNAL  FUNCTION GETDATA
LET XX=MOD(ADR,XSIZE)
LET YY=INT(ADR/XSIZE)
LET ADR=ADR+1
CALL GETPOINT(XX,YY,R,G,B)
LET GETDATA=BITAND(R,7)*32+BITAND(G,7)*4+BITAND(B,3)
END FUNCTION

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GETPOINT(X,Y,R,G,B)
ASK PIXEL VALUE(X,Y) C
CALL RGB(C,R,G,B)
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL FUNCTION MKL$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
IF A<0 THEN LET A=A+2^32
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(MOD(INT(A/256),256))
LET C$=CHR$(MOD(INT(A/65536),256))
LET D$=CHR$(MOD(INT(A/16777216),256))
LET MKL$=A$&B$&C$&D$
END FUNCTION

EXTERNAL FUNCTION CVL(A$)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A$=LEFT$(A$,4)
LET A=ORD(A$(1:1))+ORD(A$(2:2))*256+ORD(A$(3:3))*256^2+ORD(A$(4:4))*256^3
IF A>=2^31-1 THEN LET A=A-2^32
LET CVL=A
END FUNCTION
 

ファイル埋め込み

 投稿者:しばっち  投稿日:2015年 1月29日(木)19時09分20秒
  24bit BMPファイルに限定し、直接読み込んでファイル埋め込みをします。
このプログラムでは処理を分け、判別文字列をキーとして利用します。
キーが一致しないと復元しません。
なお、生成BMPファイルをJPG形式などの不可逆圧縮方式に一旦変換したファイルからは復元できません。
これで、秘蔵ファイルを隠蔽できます(笑)

DECLARE FUNCTION GETDATA
OPTION CHARACTER BYTE
OPTION BASE 0
INPUT  PROMPT "符号化(1) or 復元(2) ":SW
FILE GETNAME F$,"BMPファイル|*.bmp"
IF F$="" THEN STOP
DIM A$(54)
OPEN #1:NAME F$
FOR I=1 TO 54
   CHARACTER INPUT #1:A$(I)
NEXT I
LET BFTYPE$=A$(1)&A$(2)
LET BFSIZE=CVL(A$(3)&A$(4)&A$(5)&A$(6))
LET RESERVED=CVI(A$(7)&A$(8))
LET RESERVED2=CVI(A$(9)&A$(10))
LET OFFSET=CVL(A$(11)&A$(12)&A$(13)&A$(14))
LET HEADERSIZE=CVL(A$(15)&A$(16)&A$(17)&A$(18))
LET XSIZE=CVL(A$(19)&A$(20)&A$(21)&A$(22))
LET YSIZE=CVL(A$(23)&A$(24)&A$(25)&A$(26))
LET PLANE=CVI(A$(27)&A$(28))
LET BITCOLOR=CVI(A$(29)&A$(30))
LET COMPRESS=CVL(A$(31)&A$(32)&A$(33)&A$(34))
IF BFTYPE$<>"BM" AND PLANE<>1 THEN
   PRINT "BMPファイルではありません"
   CLOSE #1
   STOP
END IF
IF HEADERSIZE<>40 AND COMPRESS<>0 AND BITCOLOR<>24 THEN
   PRINT "対応していません"
   CLOSE #1
   STOP
END IF
LET BW=INT((3*XSIZE+3)/4)*4
DIM R$(YSIZE),G$(YSIZE),B$(YSIZE),COL$(BW),V(10)
INPUT  PROMPT "判別キー=":KEY$
PRINT "BMPファイル読み込み中..."
FOR Y=YSIZE-1 TO 0 STEP -1
   LET S=INT((YSIZE-1-Y)/(YSIZE-1)*100)
   IF MOD(S,10)=0 AND V(INT(S/10))=0 THEN
      PRINT S;"%"
      LET V(INT(S/10))=1
   END IF
   FOR I=0 TO BW-1
      CHARACTER INPUT #1:COL$(I)
   NEXT I
   FOR X=0 TO XSIZE-1
      LET R$(Y)=R$(Y)&COL$(3*X+2)
      LET G$(Y)=G$(Y)&COL$(3*X+1)
      LET B$(Y)=B$(Y)&COL$(3*X)
   NEXT  X
NEXT Y
CLOSE #1
LET ADR=0
SELECT CASE SW
CASE 2
   LET D$=""
   FOR I=1 TO LEN(KEY$)
      LET D$=D$&CHR$(GETDATA)
   NEXT I
   IF KEY$<>D$ THEN
      PRINT "判別キーが一致しません"
      STOP
   END IF
   PRINT "画像からファイルを抽出します"
   LET NAMESIZE=GETDATA
   LET FILENAME$=""
   FOR I=1 TO NAMESIZE
      LET FILENAME$=FILENAME$&CHR$(GETDATA)
   NEXT I
   PRINT "抽出ファイル名:";FILENAME$
   LET S$=""
   FOR I=1 TO 4
      LET S$=S$&CHR$(GETDATA)
   NEXT I
   LET FSIZE=CVL(S$)
   PRINT "ファイルサイズ:";FSIZE
   FILE GETSAVENAME F$,"抽出ファイル|*.*"
   IF F$="" THEN STOP
   OPEN #1:NAME F$
   ERASE #1
   FOR I=1 TO FSIZE
      PRINT #1:CHR$(GETDATA);
   NEXT I
   CLOSE #1
CASE 1
   PRINT "任意ファイルを画像ファイルに埋め込みます"
   PRINT XSIZE*YSIZE-(LEN(KEY$)+5+255);"Byteまで"
   FILE GETOPENNAME F$,"埋込ファイル|*.*"
   IF F$="" THEN STOP
   FILE SPLITNAME (F$) PATH$, NAME$, EXT$
   LET NAME$=NAME$&EXT$
   PRINT "埋め込みファイル:";NAME$
   OPEN #1:NAME F$
   ASK #1 : FILESIZE FSIZE
   PRINT "ファイルサイズ:";FSIZE;"Byte"
   IF XSIZE*YSIZE-(LEN(KEY$)+LEN(NAME$)+5)<FSIZE THEN
      PRINT "ファイルが大きすぎます"
      CLOSE #1
      STOP
   END IF
   PRINT "処理中..."
   LET ADR=0
   FOR I=1 TO LEN(KEY$)
      CALL PUTDATA(ORD(KEY$(I:I)))
   NEXT I
   LET NAMESIZE=LEN(NAME$)
   CALL PUTDATA(NAMESIZE)
   FOR I=1 TO NAMESIZE
      CALL PUTDATA(ORD(NAME$(I:I)))
   NEXT I
   LET FSIZE$=MKL$(FSIZE)
   FOR I=1 TO 4
      CALL PUTDATA(ORD(FSIZE$(I:I)))
   NEXT I
   FOR I=1 TO FSIZE
      CHARACTER INPUT #1 : P$
      CALL PUTDATA(ORD(P$))
   NEXT I
   CLOSE #1
   PRINT"BMPファイルに保存します"
   FILE GETSAVENAME F$,"保存BMPファイル|*.bmp"
   IF F$="" THEN STOP
   IF POS(F$,".")=0 THEN LET F$=F$&".bmp"
   LET BFTYPE$="BM"
   LET OFFSET=54
   LET HEADERSIZE=40
   LET PLANE=1
   LET BITCOLOR=24
   LET BW=INT((3*XSIZE+3)/4)*4
   LET BFSIZE=BW*YSIZE+OFFSET
   OPEN #1:NAME F$
   PRINT #1:BFTYPE$;
   PRINT #1:MKL$(BFSIZE);
   PRINT #1:MKI$(0);
   PRINT #1:MKI$(0);
   PRINT #1:MKL$(OFFSET);
   PRINT #1:MKL$(HEADERSIZE);
   PRINT #1:MKL$(XSIZE);
   PRINT #1:MKL$(YSIZE);
   PRINT #1:MKI$(PLANE);
   PRINT #1:MKI$(BITCOLOR);
   PRINT #1:REPEAT$(CHR$(0),24);
   FOR Y=YSIZE-1 TO 0 STEP -1
      FOR X=0 TO XSIZE-1
         LET C$=C$&B$(Y)(X+1:X+1)&G$(Y)(X+1:X+1)&R$(Y)(X+1:X+1)
      NEXT X
      LET C$=LEFT$(C$&REPEAT$(CHR$(0),4),BW)
      PRINT #1:C$;
      LET C$=""
   NEXT Y
   CLOSE #1
CASE ELSE
END SELECT

FUNCTION GETDATA
   LET X=MOD(ADR,XSIZE)
   LET Y=INT(ADR/XSIZE)
   LET ADR=ADR+1
   LET R=ORD(R$(Y)(X+1:X+1))
   LET G=ORD(G$(Y)(X+1:X+1))
   LET B=ORD(B$(Y)(X+1:X+1))
   LET GETDATA=BITAND(R,7)*32+BITAND(G,7)*4+BITAND(B,3)
END FUNCTION

SUB PUTDATA(N)
   LET X=MOD(ADR,XSIZE)
   LET Y=INT(ADR/XSIZE)
   LET ADR=ADR+1
   LET R=ORD(R$(Y)(X+1:X+1))
   LET G=ORD(G$(Y)(X+1:X+1))
   LET B=ORD(B$(Y)(X+1:X+1))
   LET R=BITAND(R,BVAL("11111000",2))
   LET R=BITOR(R,BITAND(N,BVAL("11100000",2))/32)
   LET G=BITAND(G,BVAL("11111000",2))
   LET G=BITOR(G,BITAND(N,BVAL("00011100",2))/4)
   LET B=BITAND(B,BVAL("11111100",2))
   LET B=BITOR(B,BITAND(N,BVAL("00000011",2)))
   LET R$(Y)(X+1:X+1)=CHR$(R)
   LET G$(Y)(X+1:X+1)=CHR$(G)
   LET B$(Y)(X+1:X+1)=CHR$(B)
END SUB
END

EXTERNAL FUNCTION CVI(A$)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A$=LEFT$(A$,2)
LET A=ORD(A$(1:1))+ORD(A$(2:2))*256
IF A>32767 THEN LET A=A-65536
LET CVI=A
END FUNCTION

EXTERNAL FUNCTION CVL(A$)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A$=LEFT$(A$,4)
LET A=ORD(A$(1:1))+ORD(A$(2:2))*256+ORD(A$(3:3))*256^2+ORD(A$(4:4))*256^3
IF A>=2^31-1 THEN LET A=A-2^32
LET CVL=A
END FUNCTION

EXTERNAL FUNCTION MKI$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$
IF A<0 THEN LET A=A+65536
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(INT(A/256))
LET MKI$=A$&B$
END FUNCTION

EXTERNAL FUNCTION MKL$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
IF A<0 THEN LET A=A+2^32
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(MOD(INT(A/256),256))
LET C$=CHR$(MOD(INT(A/65536),256))
LET D$=CHR$(MOD(INT(A/16777216),256))
LET MKL$=A$&B$&C$&D$
END FUNCTION
 

ファイル埋め込み

 投稿者:しばっち  投稿日:2015年 1月29日(木)19時10分7秒
  16bitPCMステレオWAVファイルを直接読み込み、ファイルを埋め込みます。
16bit各左右のデータから下位4bitずつ(=1byte)を利用します。
サンプリング周波数×再生時間(秒)が埋め込み可能なファイルサイズ上限になります。
なお、生成WAVファイルをMP3形式などの不可逆圧縮方式に一旦変換したファイルからは復元できません。

DECLARE FUNCTION GETDATA
OPTION CHARACTER BYTE
DIM A$(30)
FILE GETOPENNAME F$,"WAVファイル|*.wav"
IF F$="" THEN STOP
OPEN #1:NAME F$
FOR I=1 TO 12
   CHARACTER INPUT #1:A$(I)
NEXT I
IF A$(1)&A$(2)&A$(3)&A$(4)<>"RIFF" THEN
   PRINT "WAVファイルではありません"
   CLOSE #1
   STOP
END IF
LET WAVEFILESIZE=CVL(A$(5)&A$(6)&A$(7)&A$(8))
IF A$(9)&A$(10)&A$(11)&A$(12)<>"WAVE" THEN
   PRINT "WAVファイルではありません"
   CLOSE #1
   STOP
END IF
DO
   FOR I=1 TO 4
      CHARACTER INPUT #1:A$(I)
   NEXT I
   SELECT CASE A$(1)&A$(2)&A$(3)&A$(4)
   CASE "fmt "
      FOR I=1 TO 4
         CHARACTER INPUT #1:A$(I)
      NEXT I
      LET HEADERSIZE=CVL(A$(1)&A$(2)&A$(3)&A$(4))
      FOR I=1 TO HEADERSIZE
         CHARACTER INPUT #1:A$(I)
      NEXT I
      LET WAVETYPE=CVI(A$(1)&A$(2))
      IF WAVETYPE<>1 THEN
         PRINT "対応していません"
         CLOSE #1
         STOP
      END IF
      LET CHANNEL=CVI(A$(3)&A$(4))
      IF CHANNEL<>2 THEN
         PRINT "ステレオではありません"
         CLOSE #1
         STOP
      END IF
      LET SAMPLINGFREQ=CVL(A$(5)&A$(6)&A$(7)&A$(8))
      LET DATARATE=CVL(A$(9)&A$(10)&A$(11)&A$(12))
      LET SAMPLESIZE=CVI(A$(13)&A$(14))
      LET SAMPLEBIT=CVI(A$(15)&A$(16))
      IF SAMPLEBIT<>16 THEN
         PRINT "16bit PCMではありません"
         CLOSE #1
         STOP
      END IF
   CASE "data"
      FOR I=1 TO 4
         CHARACTER INPUT #1:A$(I)
      NEXT I
      LET  PCMSIZE=CVL(A$(1)&A$(2)&A$(3)&A$(4))
      LET  SECOND=PCMSIZE/DATARATE
      EXIT DO
   CASE "fact"
      FOR I=1 TO 8
         CHARACTER INPUT #1:A$(I)
      NEXT I
      !'LET  SIZE=CVL(A$(1)&A$(2)&A$(3)&A$(4))
      !'LET  PCMSIZE=CVL(A$(5)&A$(6)&A$(7)&A$(8))
   CASE ELSE
      PRINT "対応していません"
      CLOSE #1
      STOP
   END SELECT
LOOP
PRINT "サンプリング周波数";SAMPLINGFREQ;"Hz"
PRINT "演奏時間";SECOND;"秒"
LET NUM=PCMSIZE/SAMPLESIZE
LET HEADERSIZE=16
LET SAMPLESIZE=SAMPLEBIT/8*CHANNEL
LET DATARATE = SAMPLESIZE * SAMPLINGFREQ
LET PCMSIZE=NUM*SAMPLESIZE
LET WAVEFILESIZE=PCMSIZE+36
INPUT  PROMPT "符号化(1) or 復元(2) ":SW
INPUT  PROMPT "判別キー=":KEY$
SELECT CASE SW
CASE 2
   LET D$=""
   FOR I=1 TO LEN(KEY$)
      LET D$=D$&CHR$(GETDATA)
   NEXT I
   IF KEY$<>D$ THEN
      PRINT "判別キーが一致しません"
      STOP
   END IF
   PRINT "WAVファイルからファイルを抽出します"
   LET NAMESIZE=GETDATA
   LET FILENAME$=""
   FOR I=1 TO NAMESIZE
      LET FILENAME$=FILENAME$&CHR$(GETDATA)
   NEXT I
   PRINT "抽出ファイル名:";FILENAME$
   LET S$=""
   FOR I=1 TO 4
      LET S$=S$&CHR$(GETDATA)
   NEXT I
   LET FSIZE=CVL(S$)
   PRINT "ファイルサイズ:";FSIZE
   FILE GETSAVENAME F$,"抽出ファイル|*.*"
   IF F$="" THEN STOP
   OPEN #2:NAME F$
   ERASE #2
   FOR I=1 TO FSIZE
      PRINT #2:CHR$(GETDATA);
   NEXT I
   CLOSE #2
   CLOSE #1
CASE 1
   PRINT "任意ファイルをWAVファイルに埋め込みます"
   PRINT SAMPLINGFREQ*SECOND-(LEN(KEY$)+5+255);"Byteまで"
   FILE GETNAME F$,"埋め込みファイル|*.*"
   IF F$="" THEN STOP
   FILE SPLITNAME (F$) PATH$, NAME$, EXT$
   LET NAME$=NAME$&EXT$
   PRINT "埋め込みファイル:";NAME$
   OPEN #2:NAME F$
   ASK #2 : FILESIZE FSIZE
   PRINT "ファイルサイズ:";FSIZE;"Byte"
   IF SAMPLINGFREQ*SECOND-(LEN(KEY$)+LEN(NAME$)+5)<FSIZE THEN
      PRINT "ファイルが大き過ぎます。"
      CLOSE #2
      CLOSE #1
      STOP
   END IF
   FILE GETSAVENAME F$,"保存WAVファイル|*.wav"
   IF F$="" THEN STOP
   IF POS(F$,".")=0 THEN LET F$=F$&".wav"
   OPEN #3:NAME F$
   PRINT #3:"RIFF";
   PRINT #3:MKL$(WAVEFILESIZE);
   PRINT #3:"WAVEfmt ";
   PRINT #3:MKL$(HEADERSIZE);
   PRINT #3:MKI$(WAVETYPE);
   PRINT #3:MKI$(CHANNEL);
   PRINT #3:MKL$(SAMPLINGFREQ);
   PRINT #3:MKL$(DATARATE);
   PRINT #3:MKI$(SAMPLESIZE);
   PRINT #3:MKI$(SAMPLEBIT);
   PRINT #3:"data";
   PRINT #3:MKL$(PCMSIZE);
   FOR I=1 TO LEN(KEY$)
      CALL PUTDATA(ORD(KEY$(I:I)))
   NEXT I
   LET NAMESIZE=LEN(NAME$)
   CALL PUTDATA(NAMESIZE)
   FOR I=1 TO NAMESIZE
      CALL PUTDATA(ORD(NAME$(I:I)))
   NEXT I
   LET FSIZE$=MKL$(FSIZE)
   FOR I=1 TO 4
      CALL PUTDATA(ORD(FSIZE$(I:I)))
   NEXT I
   FOR I=1 TO FSIZE
      CHARACTER INPUT #2 : P$
      CALL PUTDATA(ORD(P$))
   NEXT I
   DO
      CHARACTER INPUT #1,IF MISSING THEN EXIT DO : P$
      PRINT #3:P$;
   LOOP
   CLOSE #1
   CLOSE #2
   CLOSE #3
CASE ELSE
END SELECT

FUNCTION GETDATA
   CHARACTER INPUT #1:Z$
   LET L$=Z$
   CHARACTER INPUT #1:Z$
   LET L$=L$&Z$
   CHARACTER INPUT #1:Z$
   LET R$=Z$
   CHARACTER INPUT #1:Z$
   LET R$=R$&Z$
   LET L=CVI(L$)
   LET R=CVI(R$)
   LET GETDATA=BITAND(L,15)*16+BITAND(R,15)
END FUNCTION

SUB PUTDATA(N)
   CHARACTER INPUT #1:Z$
   LET L$=Z$
   CHARACTER INPUT #1:Z$
   LET L$=L$&Z$
   CHARACTER INPUT #1:Z$
   LET R$=Z$
   CHARACTER INPUT #1:Z$
   LET R$=R$&Z$
   LET L=CVI(L$)
   LET R=CVI(R$)
   LET L=BITAND(R,BVAL("1111111111110000",2))
   LET L=BITOR(L,BITAND(N,BVAL("11110000",2))/16)
   LET R=BITAND(R,BVAL("1111111111110000",2))
   LET R=BITOR(R,BITAND(N,BVAL("00001111",2)))
   PRINT #3:MKI$(L);MKI$(R);
END SUB
END

EXTERNAL FUNCTION CVI(A$)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A=ORD(A$(1:1))+ORD(A$(2:2))*256
IF A>32767 THEN LET A=A-65536
LET CVI=A
END FUNCTION

EXTERNAL FUNCTION CVL(A$)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A=ORD(A$(1:1))+ORD(A$(2:2))*256+ORD(A$(3:3))*256^2+ORD(A$(4:4))*256^3
IF A>=2^31-1 THEN LET A=A-2^32
LET CVL=A
END FUNCTION

EXTERNAL FUNCTION MKI$(X)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$
LET A=INT(X)
IF A<0 THEN LET A=A+65536
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(INT(A/256))
LET MKI$=A$&B$
END FUNCTION

EXTERNAL FUNCTION MKL$(X)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
LET A=INT(X)
IF A<0 THEN LET A=A+2^32
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(MOD(INT(A/256),256))
LET C$=CHR$(MOD(INT(A/65536),256))
LET D$=CHR$(MOD(INT(A/16777216),256))
LET MKL$=A$&B$&C$&D$
END FUNCTION
 

ファイル合体

 投稿者:しばっち  投稿日:2015年 1月29日(木)19時10分57秒
  2つのファイルを1つに合体させたり、後の部分からファイルを取り出したりします。
手前のファイル(ダミー用)とその後のファイル(隠蔽用)を用意します。
合体させる場合、保存ファイルの拡張子はダミーファイルと同じにします。
取り出す場合は、手前のファイルのサイズ(byte)が必要です。

OPTION CHARACTER BYTE
INPUT  PROMPT "ファイル合体(1) or ファイル取出(2) ":SW
SELECT CASE SW
CASE 1
   FILE GETOPENNAME F$,"ダミーファイル|*.*"
   IF F$="" THEN STOP
   FILE GETOPENNAME G$,"隠蔽ファイル|*.*"
   IF G$="" THEN STOP
   FILE GETSAVENAME N$,"保存ファイル|*.*"
   IF N$="" THEN STOP
   OPEN #1:NAME F$
   OPEN #2:NAME G$
   OPEN #3:NAME N$
   DO
      CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
      PRINT #3:A$;
   LOOP
   DO
      CHARACTER INPUT #2,IF MISSING THEN EXIT DO:A$
      PRINT #3:A$;
   LOOP
   CLOSE #1
   CLOSE #2
   CLOSE #3
CASE 2
   FILE GETOPENNAME F$,"分離ファイル|*.*"
   IF F$="" THEN STOP
   FILE GETSAVENAME N$,"保存ファイル|*.*"
   IF N$="" THEN STOP
   INPUT  PROMPT "空読みサイズ(Byte)=":SIZE
   OPEN #1:NAME F$
   OPEN #2:NAME N$
   FOR I=1 TO SIZE
      CHARACTER INPUT #1:A$
   NEXT I
   DO
      CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
      PRINT #2:A$;
   LOOP
   CLOSE #1
   CLOSE #2
CASE ELSE
END SELECT
END
 

ファイル暗号化

 投稿者:しばっち  投稿日:2015年 1月29日(木)19時11分49秒
  XOR(排他的論理和)を2度繰り返すと元に戻る性質を利用して
任意のファイルを暗号化します。
ここでは暗号化した時の拡張子をbinとしています。

OPTION CHARACTER BYTE
FILE GETOPENNAME F$,"任意ファイル|*.*"
IF F$="" THEN STOP
INPUT  PROMPT "暗号・復号キー":KEY$
FILE GETSAVENAME G$,"保存ファイル|*.*"
IF G$="" THEN STOP
IF POS(G$,".")=0 THEN LET G$=G$&".bin"
OPEN #1:NAME F$
OPEN #2:NAME G$
DO
   CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
   LET J=MOD(J,LEN(KEY$))+1
   LET X$=CHR$(BITXOR(ORD(A$),ORD(KEY$(J:J))))
   PRINT #2:X$;
LOOP
CLOSE #1
CLOSE #2
END
 

Re: ファイル暗号化

 投稿者:島村1243  投稿日:2015年 2月 5日(木)14時38分56秒
  しばっちさんへのお返事です。

> XOR(排他的論理和)を2度繰り返すと元に戻る性質を利用して
> 任意のファイルを暗号化します。
> ここでは暗号化した時の拡張子をbinとしています。

大変有益なプログラムで、Windows版のBASICでは正常に動作しました。
しかし、Linux(32bit)版-0.6.4.4のBASICでRUNし、ファイル保存を行うと次の様なエラーダイアログが表示され異常終了してしまいます。

実行時内部エラー
Access violation
BASICのバージョン番号および現在のプログラムとともにご連絡ください。

 

Re: ファイル暗号化

 投稿者:しばっち  投稿日:2015年 2月 5日(木)17時10分50秒
  > No.3585[元記事へ]

島村1243さんへのお返事です。


> 大変有益なプログラムで、Windows版のBASICでは正常に動作しました。
> しかし、Linux(32bit)版-0.6.4.4のBASICでRUNし、ファイル保存を行うと次の様なエラーダイアログが表示され異常終了してしまいます。
>
> 実行時内部エラー
> Access violation
> BASICのバージョン番号および現在のプログラムとともにご連絡ください。
>

私の実行環境は、Windowに限られていて、Linux環境でのテストは行っておりません。
また、私自身がLinuxを扱ったことがないため、島村1243さんへアドバイスすることもできません。
大変申し訳ありませんが、どなたかこの掲示板をご覧の方でアドバイスできる方がいらっしゃいましたら、宜しくお願いします。
 

Re: ファイル暗号化

 投稿者:白石和夫  投稿日:2015年 2月 5日(木)18時11分49秒
  > No.3585[元記事へ]

ご報告ありがとうございました。
バグを見つけることができました。
近日中に修正版を作成します。


> しばっちさんへのお返事です。
>
> > XOR(排他的論理和)を2度繰り返すと元に戻る性質を利用して
> > 任意のファイルを暗号化します。
> > ここでは暗号化した時の拡張子をbinとしています。
>
> 大変有益なプログラムで、Windows版のBASICでは正常に動作しました。
> しかし、Linux(32bit)版-0.6.4.4のBASICでRUNし、ファイル保存を行うと次の様なエラーダイアログが表示され異常終了してしまいます。
>
> 実行時内部エラー
> Access violation
> BASICのバージョン番号および現在のプログラムとともにご連絡ください。
>
>
 

Re: ファイル暗号化

 投稿者:島村1243  投稿日:2015年 2月 6日(金)12時25分53秒
  しばっちさんへのお返事です。

> XOR(排他的論理和)を2度繰り返すと元に戻る性質を利用して
> 任意のファイルを暗号化します。
> ここでは暗号化した時の拡張子をbinとしています。

Windows版BASICでファイル暗号化を完了させ、暗号化された.binファイルの拡張子を.txt或いは.docに変更すると、Wordでファイルの中身を表示させることが出来ました(勿論、読めない文字になっています)。
そして、その表示された中身を見ると、ファイルの先頭領域と末端領域に、暗号化に使用したパスワード文字が埋め込まれているのが分かり、パスワードを読めてしまいました。

暗号化したファイルの先頭領域と末端領域に、パスワード文字を埋め込まない処置は出来るのでしょうか?
 

Re: ファイル暗号化

 投稿者:しばっち  投稿日:2015年 2月 6日(金)23時10分52秒
  > No.3588[元記事へ]

島村1243さんへのお返事です。

> Windows版BASICでファイル暗号化を完了させ、暗号化された.binファイルの拡張子を.txt或いは.docに変更すると、Wordでファイルの中身を表示させることが出来ました(勿論、読めない文字になっています)。
> そして、その表示された中身を見ると、ファイルの先頭領域と末端領域に、暗号化に使用したパスワード文字が埋め込まれているのが分かり、パスワードを読めてしまいました。
>
> 暗号化したファイルの先頭領域と末端領域に、パスワード文字を埋め込まない処置は出来るのでしょうか?

パスワード文字を特定領域に埋め込んでいるわけではなく、ファイル全体に対して単純に
XORで処理しているだけなので、例えば文字コード0に対してXORを計算すればそのままの
文字コードが出てきてしまいます。

BITXOR(0,65)=65 BITXOR(0,96)=96 など

そこで解読をもう少し難しくしたいのなら、文字順の通りに処理していくのではなく
乱数を使用して撹乱します。
ただ暗号化と復号化で同じ乱数列が出るようにRANDOMIZE文に引数を与えます。

RANDOMIZE N ←パスワード文字と同時に引数も与える(0~4294967296)
DO
    CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
    J=INT(RND*LEN(KEY$))+1 ←ここを変更
    LET X$=CHR$(BITXOR(ORD(A$),ORD(KEY$(J:J))))
    PRINT #2:X$;
LOOP

更にパスワード文字を複数に拡張するなどの方法も考えられると思います。

LET A$="ABCDE" !'パスワード1
LET B$="VWXYZ" !'パスワード2
LET N$="BASIC" !'暗号化する文字
!'LET N$="UTHT\"
FOR I=1 TO LEN(N$)
   LET N=ORD(N$(I:I))
   LET A=ORD(A$(I:I))
   LET B=ORD(B$(I:I))
   PRINT CHR$(BITXOR(BITXOR(N,A),B));
NEXT I
END

なお、パスワード文字を埋め込まない処置についてですが、これはXORを計算した結果、そのままの文字が見えてしまっただけで、元通りに復元させるためには必要な処理ですので、解読を分かりにくくしたいのなら、プログラム側での工夫次第と言うことでしょうか

 

Re: ファイル暗号化

 投稿者:島村1243  投稿日:2015年 2月 7日(土)08時04分5秒
  しばっちさんへのお返事です。

> そこで解読をもう少し難しくしたいのなら、文字順の通りに処理していくのではなく
> 乱数を使用して撹乱します。
> ただ暗号化と復号化で同じ乱数列が出るようにRANDOMIZE文に引数を与えます。
>
> 更にパスワード文字を複数に拡張するなどの方法も考えられると思います。
>
> なお、パスワード文字を埋め込まない処置についてですが、これはXORを計算した結果、そのままの文字が見えてしまっただけで、元通りに復元させるためには必要な処理ですので、解読を分かりにくくしたいのなら、プログラム側での工夫次第と言うことでしょうか
>

丁寧なご回答、有難うございました。
パスワードが見えてしまう理由と対策方法例が良く分かりました。
 

Re: ファイル暗号化

 投稿者:島村1243  投稿日:2015年 2月 7日(土)13時42分58秒
  白石和夫さんへのお返事です。

> ご報告ありがとうございました。
> バグを見つけることができました。
> 近日中に修正版を作成します。

白石先生、Linux版のバージョンアップ版(0.6.4.5)の作成有難うございます。
早速、Vine6.2Linux上で、Linux(i386)版BASIC-0.6.4.5を使用し、しばっちさんからご教示頂いた下記プログラムをRUNしましたが、DO-LOOPが抜け出せず、動作異常でした。

OPTION CHARACTER BYTE
FILE GETOPENNAME F$,"任意ファイル|*.*"
IF F$="" THEN STOP
INPUT  PROMPT "暗号・復号キー":KEY$
FILE GETSAVENAME G$,"保存ファイル|*.*"
IF G$="" THEN STOP
IF POS(G$,".")=0 THEN LET G$=G$&".bin"
OPEN #1:NAME F$
OPEN #2:NAME G$
RANDOMIZE 2469 !←パスワード文字と同時に引数も与える(0~4294967296)
DO
   CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
   LET J=INT(RND*LEN(KEY$))+1
   LET X$=CHR$(BITXOR(ORD(A$),ORD(KEY$(J:J))))
   PRINT #2:X$;
LOOP
CLOSE #1
CLOSE #2
END

操作状況の推移は下記のとおりです。
1)プログラムを開始すると、直ぐに「NoName.txt」というテキストウィンドウが表示され、続いて「開くファイルを選択するダイアログ」が表示される。
2)開くファイル名を選択し、開くボタンをクリックすると、暗号・復号キー入力ダイアログが表示される。
3)パスワードを入力してOKボタンをクリックすると、保存ファイル名選択ダイアログが表示される。
4)保存ファイル名を入力して保存ボタンをクリックするとRUN状態になるが、いつになっても終了しない。(DO-LOOPが停止しない様です)
5)ブレークボタンをクリックして中止ボタンをクリックして強制終了させる。
6)保存ファイルは作成されていたが、暗号化前のファイル大きさは522バイトであるにもかかわらず、作成保存された(異常中断)ファイルは192キロバイトの大きさになっていた。

私はVine6.2Linuxでテストしダメでしたが、FedoraやUbuntsでは正常動作するでしょうか?
 

Re: ファイル暗号化

 投稿者:白石和夫  投稿日:2015年 2月 7日(土)21時28分12秒
  > No.3591[元記事へ]

Linux上だとファイルの終わりを検知してくれないようです。
調べます(時間がかかるかも)。

島村1243さんへのお返事です。

> 白石和夫さんへのお返事です。
>
> > ご報告ありがとうございました。
> > バグを見つけることができました。
> > 近日中に修正版を作成します。
>
> 白石先生、Linux版のバージョンアップ版(0.6.4.5)の作成有難うございます。
> 早速、Vine6.2Linux上で、Linux(i386)版BASIC-0.6.4.5を使用し、しばっちさんからご教示頂いた下記プログラムをRUNしましたが、DO-LOOPが抜け出せず、動作異常でした。
>
> OPTION CHARACTER BYTE
> FILE GETOPENNAME F$,"任意ファイル|*.*"
> IF F$="" THEN STOP
> INPUT  PROMPT "暗号・復号キー":KEY$
> FILE GETSAVENAME G$,"保存ファイル|*.*"
> IF G$="" THEN STOP
> IF POS(G$,".")=0 THEN LET G$=G$&".bin"
> OPEN #1:NAME F$
> OPEN #2:NAME G$
> RANDOMIZE 2469 !←パスワード文字と同時に引数も与える(0~4294967296)
> DO
>    CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
>    LET J=INT(RND*LEN(KEY$))+1
>    LET X$=CHR$(BITXOR(ORD(A$),ORD(KEY$(J:J))))
>    PRINT #2:X$;
> LOOP
> CLOSE #1
> CLOSE #2
> END
>
> 操作状況の推移は下記のとおりです。
> 1)プログラムを開始すると、直ぐに「NoName.txt」というテキストウィンドウが表示され、続いて「開くファイルを選択するダイアログ」が表示される。
> 2)開くファイル名を選択し、開くボタンをクリックすると、暗号・復号キー入力ダイアログが表示される。
> 3)パスワードを入力してOKボタンをクリックすると、保存ファイル名選択ダイアログが表示される。
> 4)保存ファイル名を入力して保存ボタンをクリックするとRUN状態になるが、いつになっても終了しない。(DO-LOOPが停止しない様です)
> 5)ブレークボタンをクリックして中止ボタンをクリックして強制終了させる。
> 6)保存ファイルは作成されていたが、暗号化前のファイル大きさは522バイトであるにもかかわらず、作成保存された(異常中断)ファイルは192キロバイトの大きさになっていた。
>
> 私はVine6.2Linuxでテストしダメでしたが、FedoraやUbuntsでは正常動作するでしょうか?
 

Re: ファイル暗号化

 投稿者:白石和夫  投稿日:2015年 2月 8日(日)17時32分18秒
  > No.3592[元記事へ]

MACでも同様でした。
修正版を作りました。
BASICAccのLinux版,MAC版にも同様の不具合がありました。


> Linux上だとファイルの終わりを検知してくれないようです。
> 調べます(時間がかかるかも)。
>
> 島村1243さんへのお返事です。
>
> > 白石和夫さんへのお返事です。
> >
> > > ご報告ありがとうございました。
> > > バグを見つけることができました。
> > > 近日中に修正版を作成します。
> >
> > 白石先生、Linux版のバージョンアップ版(0.6.4.5)の作成有難うございます。
> > 早速、Vine6.2Linux上で、Linux(i386)版BASIC-0.6.4.5を使用し、しばっちさんからご教示頂いた下記プログラムをRUNしましたが、DO-LOOPが抜け出せず、動作異常でした。
> >
> > OPTION CHARACTER BYTE
> > FILE GETOPENNAME F$,"任意ファイル|*.*"
> > IF F$="" THEN STOP
> > INPUT  PROMPT "暗号・復号キー":KEY$
> > FILE GETSAVENAME G$,"保存ファイル|*.*"
> > IF G$="" THEN STOP
> > IF POS(G$,".")=0 THEN LET G$=G$&".bin"
> > OPEN #1:NAME F$
> > OPEN #2:NAME G$
> > RANDOMIZE 2469 !←パスワード文字と同時に引数も与える(0~4294967296)
> > DO
> >    CHARACTER INPUT #1,IF MISSING THEN EXIT DO:A$
> >    LET J=INT(RND*LEN(KEY$))+1
> >    LET X$=CHR$(BITXOR(ORD(A$),ORD(KEY$(J:J))))
> >    PRINT #2:X$;
> > LOOP
> > CLOSE #1
> > CLOSE #2
> > END
> >
> > 操作状況の推移は下記のとおりです。
> > 1)プログラムを開始すると、直ぐに「NoName.txt」というテキストウィンドウが表示され、続いて「開くファイルを選択するダイアログ」が表示される。
> > 2)開くファイル名を選択し、開くボタンをクリックすると、暗号・復号キー入力ダイアログが表示される。
> > 3)パスワードを入力してOKボタンをクリックすると、保存ファイル名選択ダイアログが表示される。
> > 4)保存ファイル名を入力して保存ボタンをクリックするとRUN状態になるが、いつになっても終了しない。(DO-LOOPが停止しない様です)
> > 5)ブレークボタンをクリックして中止ボタンをクリックして強制終了させる。
> > 6)保存ファイルは作成されていたが、暗号化前のファイル大きさは522バイトであるにもかかわらず、作成保存された(異常中断)ファイルは192キロバイトの大きさになっていた。
> >
> > 私はVine6.2Linuxでテストしダメでしたが、FedoraやUbuntsでは正常動作するでしょうか?
 

Re: ファイル暗号化

 投稿者:島村1243  投稿日:2015年 2月 9日(月)10時30分19秒
  > No.3593[元記事へ]

白石和夫さんへのお返事です。

> MACでも同様でした。
> 修正版を作りました。
> BASICAccのLinux版,MAC版にも同様の不具合がありました。
>

Linux(i386)修正版 BASIC-0.6.4.6 をダウンロードし、「Vine6.2_Linux」で使用してみました。
その結果、しばっちさんからご教示いただいた「ファイルの暗号化・復号化プログラム」は正常に動作しました。
お忙しい中にも関わらず、素早い修正版の作成を賜り有難う御座いました。
 

数値が合わない原因は?

 投稿者:島村1243  投稿日:2015年 2月18日(水)13時01分28秒
  下記のプログラムは、周囲温度が年間を通じて変動する条件下での変圧器の熱寿命を計算するものです。
意図したロジックでは、寿命到達時間rtは30年以下になる筈だったのですが、rtの計算結果は

[計算結果]
1)寿命到達まで使用可能な実年数[年]= 30.0728310502283
                     同上の時間数[h]= 263438

となり、僅かですが30年を超えてしまいます。

For-Next間のプログラムロジックの何処に誤りが有るのかを知りたいのですが、お分かりになる方居られましたらご教示お願い致します。
なお、For-Next間の下式
LET dsumrt= drt/Life(rt)  !drtを寿命消耗時間[h]に換算
は誤っておりません。

LET Hangendo=8 !寿命半減則温度[deg]
LET Lifeyear=30 !95℃設計寿命[年]
LET b=LOG(2)/Hangendo
PRINT "巻線最高温度θmが95[℃]の設計寿命Y0[年]=";Lifeyear
PRINT "期待寿命Yの計算は『";Hangendo;"℃半減則』を適用"
PRINT "技術報告の基本式 Y=Y0×EXP{-b(θm-95)}"
PRINT "上式の係数b=";b
print
PRINT "[周囲温度変動条件]"
LET Ondoave=20
PRINT "年間平均温度θave[度]=";Ondoave
LET Am=15
PRINT "年間変動温度振幅A[deg]=";Am
LET Bm=5
PRINT "日間変動温度振幅B[deg]=";Bm
print
LET wyear=2*PI/365/24
LET wday=2*PI/24
DEF Ondo(t)=Ondoave+Am*SIN(wyear*t)+Bm*SIN(wday*t)
DEF Life(t)=EXP(-b*(Ondo(t)+55+15-95)) !実使用時間を寿命消耗時間に換算する関数
LET Lifehour=Lifeyear*365*24 !設計寿命年数[年]を時間[h]に換算
LET sumrt=0
LET drt=1   !微分実時間[h]
FOR i=1 TO 50*365*24/drt
   LET rt=i*drt  !運転実時刻
   LET dsumrt= drt/Life(rt)  !drtを寿命消耗時間[h]に換算
   LET sumrt=sumrt+dsumrt    !累積
   IF sumrt>Lifehour THEN !Lifetimeに達したらrtの進行を停止
      LET rt=rt-drt
      EXIT FOR
   END IF
NEXT i
PRINT "[計算結果]"
PRINT "1)寿命到達まで使用可能な実年数[年]=";rt/365/24
PRINT "                     同上の時間数[h]=";rt

!*** 等価周囲温度の計算 ****
LET ToukaOndo=LOG(Lifehour/rt)/b+95-55-15
PRINT "2)等価周囲温度[℃]=";ToukaOndo

END
 

Re: 数値が合わない原因は?

 投稿者:島村1243  投稿日:2015年 2月19日(木)17時03分53秒
  > No.3595[元記事へ]

> 意図したロジックでは、寿命到達時間rtは30年以下になる筈だったのですが、

寿命半減則の温度設定が8なら使用可能年数が30年を超えることはない、と思い込んでいたのが原因でした。掲示板を汚して申し訳ありません。
 

C言語をBasic言語へできますか?

 投稿者:GAI  投稿日:2015年 3月 1日(日)04時27分52秒
  %BEGIN
!THIS IS A SELF-REPRODUCING PROGRAM
%ROUTINESPEC R
R
PRINT SYMBOL(39)
R
PRINT SYMBOL(39)
NEWLINE
%CAPTION %END~
%CAPTION %ENDOFPROGRAM~
%ROUTINE R
%PRINTTEXT '
%BEGIN
!THIS IS A SELF-REPRODUCING PROGRAM
%ROUTINESPEC R
R
PRINT SYMBOL(39)
R
PRINT SYMBOL(39)
NEWLINE
%CAPTION %END~
%CAPTION %ENDOFPROGRAM~
%ROUTINE R
%PRINTTEXT '
%END
%ENDOFPROGRAM


または
char x[] = "main() { int j; putchar(99); putchar(104); \
putchar(97);putchar(114); putchar(32);putchar(120); putchar(91); \
putchar(93);putchar(61); putchar(34); for(j=0; j<strlen(x); \
++j)putchar(x[j]);putchar(34); putchar(59); putchar(10); for(j=0; \
j<strlen(x); ++j) putchar(x[j]);putchar(10); }"; main () {int j;
  putchar (99); putchar (104); putchar (97); putchar (114);
  putchar (32); putchar (120); putchar (91); putchar (93);
  putchar (61); putchar (34);
  for (j = 0; j < strlen (x); ++j) putchar (x[j]); putchar (34);
  putchar (59); putchar (10);
  for (j = 0; j < strlen (x); ++j) putchar (x[j]); putchar (10);}
 

Re: Project Euler Problem(プロジェクトオイラー)

 投稿者:山中和義  投稿日:2015年 3月 3日(火)13時41分27秒
  > No.3341[元記事へ]

142
問題 Mengoli's Six-Square Problem
a,b,cは異なる自然数とする。a+b,a-b,a+c,a-c,b+c,b-cは、すべて平方数となる。
このとき、a,b,cはいくつか。

参考サイト http://odz.sakura.ne.jp/projecteuler/

考察
a,b,cは異なる自然数、a-b、a-c、b-cが平方数から、a>b>cとなるので、a+b>a+c>b+cである。
a+b=x^2、a+c=y^2、b+c=z^2とおくと、x>y>z≧1で検証する。
このとき、a-b=y^2-z^2、a-c=x^2-z^2、b-c=x^2-y^2なので、これらが平方数になるように注意する。
a=(x^2+y^2-z^2)/2、b=(x^2-y^2+z^2)/2、c=(-x^2+y^2+z^2)/2を求めて、a,b,cが自然数になれ題意を満たす。
a+b+c=(x^2+y^2+z^2)/2より、x,y,zの最小のものが、a+b+cを最小にする。
また、組(a,b,c)のk^2倍も解となる。
a,b,cの最大公約数に平方因子を含むものを除いたものが固有な解となる。
(終わり)

a=434657, b=420968, c=150568



OPTION ARITHMETIC RATIONAL
LET k=0
LET x=3 !1≦z<y<x
DO
   LET xx=x^2 !a+b

   FOR y=2 TO x-1 !a+c
      LET yy=y^2

      LET t=xx-yy !b-c
      IF INTSQR(t)^2=t THEN !平方数なら

         FOR z=1 TO y-1 !b+c
            LET zz=z^2

            LET t=xx-zz !a-c
            IF INTSQR(t)^2=t THEN
               LET t=yy-zz !a-b
               IF INTSQR(t)^2=t THEN

                  LET a=( xx+yy-zz)/2 !(x^2-z^2)+y^2>0
                  LET b=( xx-yy+zz)/2 !(x^2-y^2)+z^2>0
                  LET c=(-xx+yy+zz)/2 !※正負は不定である
                  IF c>0 AND a=INT(a) AND b=INT(b) AND c=INT(c) THEN !自然数なら

                     LET t=gcd(gcd(a,b),c)
                     IF INTSQR(t)^2=t THEN !最大公約数が平方因子を持つか

                        LET k=k+1
                        PRINT "No."; k
                        PRINT a;b;c
                        PRINT a+b; a-b;  a+c; a-c;  b+c; b-c
                        PRINT x;INTSQR(a-b); y;INTSQR(a-c); z;INTSQR(b-c)
                        PRINT a+b+c !最小か

                     END IF

                  END IF

               END IF

            END IF
         NEXT z

      END IF
   NEXT y

   LET x=x+1 !次へ ※無限ループ
LOOP
END


実行結果

No. 1
434657  420968  150568
855625  13689  585225  284089  571536  270400
925  117  765  533  756  520
1006193
No. 2
733025  488000  418304
1221025  245025  1151329  314721  906304  69696
1105  495  1073  561  952  264
1639329
No. 3
1738628  1683872  602272
3422500  54756  2340900  1136356  2286144  1081600
1850  234  1530  1066  1512  1040
4024772
No. 4
2399057  2288168  1873432
4687225  110889  4272489  525625  4161600  414736
2165  333  2067  725  2040  644
6560657
No. 5
2932100  1952000  1673216
4884100  980100  4605316  1258884  3625216  278784
2210  990  2146  1122  1904  528
6557316

               :
               :
              中断

 

整数4面体

 投稿者:山中和義  投稿日:2015年 3月 3日(火)13時54分58秒
  問題
6本の辺の長さ(ただし、1桁の整数とします)がすべて異なる4面体はどんなものがありますか。
また、その体積を求めてください。

http://www004.upp.so-net.ne.jp/s_honma/figure/tetrahedronvolume.htm
http://mathworld.wolfram.com/Cayley-MengerDeterminant.html

答え 順列による
4面体OABCについて、OA=a、OB=b、OC=c、AB=d、BC=e、CA=fとする。
1≦a,b,c≦Nとして、
dは、面OABすなわち三角形OABが成立する必要条件 |a-b|<d<a+bを満たす。
eは、面OBC |b-c|<e<b+c
fは、面OCA |c-a|<f<c+a かつ 面ABC |d-e|<f<d+e
得られた結果の2328通りを24で割った値(97通り)が、対称性を除いた場合の数である。
(終わり)


LET N=9 !検索範囲

LET K=0
FOR a=1 TO N !辺OA
   FOR b=1 TO N !辺OB
      IF NOT( b-a=0 ) THEN !b≠a
         FOR c=1 TO N !辺OC
            IF NOT( (c-a)*(c-b)=0 ) THEN !c≠aかつc≠b

               FOR d=ABS(a-b)+1 TO MIN(N+1,a+b)-1 !面OAB
                  IF NOT( (d-a)*(d-b)*(d-c)=0 ) THEN

                     FOR e=ABS(b-c)+1 TO MIN(N+1,b+c)-1 !面OBC
                        IF NOT( (e-a)*(e-b)*(e-c)*(e-d)=0 ) THEN

                           FOR f=MAX(ABS(c-a),ABS(d-e))+1 TO MIN(N+1,MIN(c+a,d+e))-1 !面OCA,面ABC
                              IF NOT( (f-a)*(f-b)*(f-c)*(f-d)*(f-e)=0 ) THEN

                                 CALL calc(a,b,c,d,e,f, V2)
                                 IF V2>0 THEN !結果を表示する
                                    LET K=K+1
                                    PRINT STR$(K);":"; a;b;c;d;e;f; SQR(V2)
                                 END IF

                              END IF
                           NEXT f

                        END IF
                     NEXT e

                  END IF
               NEXT d

            END IF
         NEXT c
      END IF
   NEXT b
NEXT a

END


EXTERNAL SUB calc(a,b,c,p,q,r, V2) !4面体OABCの体積(2乗)
!4面体OABCについて、OA=a、OB=b、OC=c、AB=p、BC=q、CA=rとする。
LET V2=( a^2*q^2*(b^2+c^2+p^2+r^2-a^2-q^2) &
&       +b^2*r^2*(a^2+c^2+p^2+q^2-b^2-r^2) &
&       +c^2*p^2*(a^2+b^2+q^2+r^2-c^2-p^2) &
&       -a^2*b^2*p^2 -b^2*c^2*q^2 -a^2*c^2*r^2 -p^2*q^2*r^2 ) / 144 !オイラーの四面体公式
END SUB




答え 回転対称を除く
4面体OABCについて、OA=a、OB=b、OC=c、AB=d、BC=e、CA=fとする。
展開図
  O   C   O
  △▽△▽
 A  B   A
面OABの辺の並びを固定する。
aは、a,b,c,d,e,fの中で一番目に最小とする。
bは、a,b,dの中で二番目に最小とする。
dは、b<d かつ 面OABすなわち三角形OABが成立する必要条件 |a-b|<d<a+bを満たす。
これより、面OABは最小の辺をもつ三角形となり、a,b,dまたはa,d,bと並べたものである。
続いて、
cは、a<c
eは、a<e かつ 面OBC |b-c|<e<b+c
fは、a<f かつ 面OCA |c-a|<f<c+a かつ 面ABC |d-e|<f<d+e
よって、
得られた結果の194通りを2で割った値(97通り)が、対称性のものを除いた場合の数である。
(終わり)

鏡映対称
a b c d e f ⇔ a c b f e d
a b c d e f ⇔ a f d c e b



LET N=9 !検索範囲

LET K=0
FOR a=1 TO N-5 !面OAB
   FOR b=a+1 TO N-1
      FOR d=MAX(b,ABS(a-b))+1 TO MIN(N+1,a+b)-1

         FOR c=a+1 TO N
            IF NOT( (c-b)*(c-d)=0 ) THEN !c≠a、c≠b、c≠d

               FOR e=MAX(a,ABS(b-c))+1 TO MIN(N+1,b+c)-1 !面OBC
                  IF NOT( (e-b)*(e-c)*(e-d)=0 ) THEN

                     FOR f=MAX(a,MAX(ABS(c-a),ABS(d-e)))+1 TO MIN(N+1,MIN(c+a,d+e))-1!面OCA,面ABC
                        IF NOT( (f-b)*(f-c)*(f-d)*(f-e)=0 ) THEN

                           CALL calc(a,b,c,d,e,f, V2)
                           IF V2>0 THEN !結果を表示する
                              LET K=K+1
                              PRINT STR$(K);":"; a;b;c;d;e;f; SQR(V2)
                           END IF

                        END IF
                     NEXT f

                  END IF
               NEXT e

            END IF
         NEXT c

      NEXT d
   NEXT b
NEXT a

END


EXTERNAL SUB calc(a,b,c,p,q,r, V2) !4面体OABCの体積(2乗)
!4面体OABCについて、OA=a、OB=b、OC=c、AB=p、BC=q、CA=rとする。
LET V2=( a^2*q^2*(b^2+c^2+p^2+r^2-a^2-q^2) &
&       +b^2*r^2*(a^2+c^2+p^2+q^2-b^2-r^2) &
&       +c^2*p^2*(a^2+b^2+q^2+r^2-c^2-p^2) &
&       -a^2*b^2*p^2 -b^2*c^2*q^2 -a^2*c^2*r^2 -p^2*q^2*r^2 ) / 144 !オイラーの四面体公式
END SUB




------------------------------------------------------------

問題 ヘロンの4面体
6本の辺の長さ、4面の面積、体積がすべて整数となる4面体はどんなものがありますか。

答え
1: 25  39  153  56  120  160  V=8064
2: 51  52  84  53  80  117  V=18144
3: 65  119  200  156  87  225  V=35280
4: 65  225  297  232  468  340  V=399168
5: 140  176  275  300  429  261  V=243936
6: 175  203  318  252  221  319  V=1241856 など



OPTION ARITHMETIC RATIONAL

LET N=250 !検索範囲

LET S=0
FOR a=1 TO N !面OAB
   FOR b=a TO N
      FOR d=MAX(b,ABS(a-b)+1) TO MIN(N+1,a+b)-1

         LET t=heron(a,b,d)
         IF INTSQR(t)^2=t THEN !ヘロン三角形なら

            FOR c=a TO N
               FOR e=MAX(a,ABS(b-c)+1) TO MIN(N+1,b+c)-1 !面OBC

                  LET t=heron(b,c,e)
                  IF INTSQR(t)^2=t THEN

                     FOR f=MAX(a,MAX(ABS(c-a),ABS(d-e))+1) TO MIN(N+1,MIN(c+a,d+e))-1!面OCA,面ABC

                        LET t=heron(c,a,f)
                        LET tt=heron(d,e,f)
                        IF INTSQR(t)^2=t AND INTSQR(tt)^2=tt THEN

                           IF gcd(a,gcd(b,gcd(c,gcd(d,gcd(e,f)))))=1 THEN !互いに素

                              CALL calc(a,b,c,d,e,f, V2)
                              IF V2>0 AND INTSQR(V2)^2=V2 THEN !結果を表示する
                                 LET S=S+1
                                 PRINT STR$(S);":"; a;b;c;d;e;f; INTSQR(V2)
                              END IF

                           END IF

                        END IF

                     NEXT f

                  END IF

               NEXT e
            NEXT c

         END IF

      NEXT d
   NEXT b
NEXT a

END


EXTERNAL FUNCTION heron(a,b,c) !三角形OABの面積(2乗)
OPTION ARITHMETIC RATIONAL
LET s=(a+b+c)/2
LET heron=s*(s-a)*(s-b)*(s-c) !ヘロンの公式
END FUNCTION


EXTERNAL SUB calc(a,b,c,p,q,r, V2) !4面体OABCの体積(2乗)
!4面体OABCにすいて、OA=a、OB=b、OC=c、AB=p、BC=q、CA=rとする。
OPTION ARITHMETIC RATIONAL
LET V2=( a^2*q^2*(b^2+c^2+p^2+r^2-a^2-q^2) &
&       +b^2*r^2*(a^2+c^2+p^2+q^2-b^2-r^2) &
&       +c^2*p^2*(a^2+b^2+q^2+r^2-c^2-p^2) &
&       -a^2*b^2*p^2 -b^2*c^2*q^2 -a^2*c^2*r^2 -p^2*q^2*r^2 ) / 144 !オイラーの四面体公式
END SUB

 

川渡り問題(パズル)

 投稿者:山中和義  投稿日:2015年 3月 3日(火)14時09分42秒
  問題 宣教師と先住民
3人の宣教師と3人の先住民が川を渡ることになりました。
川には、2人乗りのボートが1そうしかありません。
どのようなときでも先住民の数が宣教師の数よりも多いと、宣教師は襲われてしまいます。
なお、全員がボートを漕ぐことができます。
また、岸に着いたとき全員がボートを降ります。
6人が安全に川を渡る最短手順を考えてください。

考察
最短手順
・n人ずつ、(n-1)人乗りのとき
 3人ずつ、2人乗りのとき、11回
 4人ずつ、3人乗りのとき、9回
 5人ずつ、4人乗りのとき、7回
 6人ずつ、5人乗りのとき、7回
   :

 n≧7の場合、5回
  1: nAna[(n-1)a]→
  2: ←[a](n-1)a
  3: nA2a[(n-2)A]→
  4: ←[Aa](n-2)A(n-2)a
  5: 3A3a[3A3a]→

  最短手順の考察
  ボートに乗るときに制限がなければ、
  (n-1)人が渡り1人が戻るとすると、(n-2)人ずつ渡ることになる。
  たとえばn=7の場合、(2n)÷(n-2)は商2 余り4 より、2×2+1=5回が必要になる。(必要性)
  その実例が存在する。(十分性)

  n n-2 (2n)÷(n-2) 回数
  -------------------------------
  3 1  6      5×2+1=11
  4 2  4      3×2+1=7
  5 3  3余り1    3×2+1=7
  6 4  4      3×2+1=7
  7 5  2余り4    2×2+1=5

・4人乗りの場合
 n人ずつ(n≧5)のとき、(2n-3)回
  1: nAna[AAaa]→
  2: ←[Aa]AAaa
  3: (n-1)A(n-1)a[AAaa]→
  4: ←[Aa]2A2a
      :
  2k-1: 3A3a[AAaa]→
    2k: ←[Aa](n-1)A(n-1)a
  +1: 2A2a[AAaa]→
 k往復(nが2になるまで)と最後に1回なので、2(n-2)+1=2n-3
(終わり)


類題 嫉妬深い夫
3組の夫婦が川を渡ることになりました。ボートには2人しか乗ることができません。
どの夫も嫉妬深く、彼自身が一緒にいない限り、ボートでも岸でも妻が他の男といることを許しません。
なお、6人ともボートを漕ぐことができます。
また、岸に着いたとき全員が舟を降ります。
3組の夫婦が川を渡る最短手順を考えてください。
答え
M=3、N=3、K=2として、
 1: AAAaaa(aa)→
 2: ←(a)aa
 3: AAAaa(aa)→
 4: ←(a)aaa
 5: AAAa(AA)→
 6: ←(Aa)AAaa
 7: AAaa(AA)→
 8: ←(a)AAAa
 9: aaa(aa)→
 10: ←(a)AAAaa
 11: aa(aa)→
より、
 1: ABCabc(ab)→
 2: ←(a)ab
 3: ABCac(ac)→
 4: ←(a)abc
 5: ABCa(BC)→
 6: ←(Bb)BCbc
 7: ABab(AB)→
 8: ←(c)ABCc
 9: abc(ab)→
 10: ←(a)ABCab
 11: ac(ac)→
(終わり)



LET M=3 !m人の宣教師
LET N=3 !n人の先住民
LET K=2 !k人乗りの舟

DIM S$((M+1)*(N+1)) !条件を満たす岸の状態
LET D=0
FOR X=0 TO M
   FOR Y=0 TO N
      IF X=0 OR X>=Y THEN !条件を満たす
         LET D=D+1
         LET S$(D)=REPEAT$("A",X)&REPEAT$("a",Y)
      END IF
   NEXT Y
NEXT X

PUBLIC NUMERIC C !解の数
LET C=0
DIM A(50) !手順(舟の乗せ方)
DIM B(0 TO 50) !こちらの岸の状態
LET B(0)=D
CALL try(1,A,B, M,N,K, D,S$)
IF C=0 THEN PRINT "解なし"

END

EXTERNAL SUB try(P,A(),B(), M,N,K, D,S$()) !バックトラック法で検索する
FOR i=1 TO D !舟に乗る
   LET T=LEN(S$(i))
   IF T>=1 AND T<=K THEN !k人乗りの舟 ※岸の部分集合
      LET L$=S$(B(P-1)) !こちらの岸の状態
      LET X=POS(L$,S$(i))
      IF X>0 THEN
         LET L$(X:X+T-1)="" !渡る

         IF MOD(P,2)=1 AND L$="" THEN !すべて渡り終えたなら ※奇数回かつφなら
            LET C=C+1
            PRINT "No.";C
            FOR J=1 TO P-1 !結果を表示する
               PRINT STR$(J);": ";
               IF MOD(J,2)=1 THEN
                  PRINT S$(B(J-1));"(";S$(A(J));")→"
               ELSE
                  PRINT "←(";S$(A(J));")";S$(B(J-1))
               END IF
            NEXT J
            PRINT STR$(P);": ";S$(i);"(";S$(i);")→"
            PRINT

         ELSE
            CALL checkRule(L$,D,S$, id) !安全に渡れるなら
            IF id>0 THEN

               LET R$=S$(D) !向こう側の岸の状態 ※補集合 ~L、差 U-L
               LET X=POS(R$,L$)
               LET R$(X:X+LEN(L$)-1)=""
               CALL checkRule(R$,D,S$, id) !安全に渡れるなら
               IF id>0 THEN

                  FOR J=P-2 TO 0 STEP -2 !同じ状態に戻っていないか
                     IF id=B(J) THEN EXIT FOR
                  NEXT J
                  IF J<0 THEN
                     LET A(P)=i !記録する
                     LET B(P)=id
                     CALL try(P+1,A,B, M,N,K, D,S$) !次へ
                     !!!IF P<5 THEN CALL try(P+1,A,B, M,N,K, D,S$) !次へ
                  END IF

               END IF

            END IF

         END IF

      END IF
   END IF
NEXT i
END SUB

EXTERNAL SUB checkRule(L$,D,S$(), id) !条件を満たすかどうか確認する
FOR id=1 TO D
   IF L$=S$(id) THEN EXIT SUB !パターン番号を返す
NEXT id
LET id=-1 !NG
END SUB



実行結果

No. 1
1: AAAaaa(aa)→
2: ←(a)aa
3: AAAaa(aa)→
4: ←(a)aaa
5: AAAa(AA)→
6: ←(Aa)AAaa
7: AAaa(AA)→
8: ←(a)AAAa
9: aaa(aa)→
10: ←(a)AAAaa
11: aa(aa)→

No. 2
1: AAAaaa(aa)→
2: ←(a)aa
3: AAAaa(aa)→
4: ←(a)aaa
5: AAAa(AA)→
6: ←(Aa)AAaa
7: AAaa(AA)→
8: ←(a)AAAa
9: aaa(aa)→
10: ←(A)AAAaa
11: Aa(Aa)→

No. 3
1: AAAaaa(Aa)→
2: ←(A)Aa
3: AAAaa(aa)→
4: ←(a)aaa
5: AAAa(AA)→
6: ←(Aa)AAaa
7: AAaa(AA)→
8: ←(a)AAAa
9: aaa(aa)→
10: ←(a)AAAaa
11: aa(aa)→

No. 4
1: AAAaaa(Aa)→
2: ←(A)Aa
3: AAAaa(aa)→
4: ←(a)aaa
5: AAAa(AA)→
6: ←(Aa)AAaa
7: AAaa(AA)→
8: ←(a)AAAa
9: aaa(aa)→
10: ←(A)AAAaa
11: Aa(Aa)→


 

Re: C言語をBasic言語へできますか?

 投稿者:SECOND  投稿日:2015年 3月 3日(火)14時26分5秒
  > No.3597[元記事へ]

GAIさんへのお返事です。

!-------------------------------
! x$= "【 ~
!            】"
!【 print "x$=";x$
!   print x$ 】        の様な、構造であるが、
!           BASIC は、改行が自由でないので、
!-------------------------------

LET x$="PRINT ""LET x$=""; CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$"
PRINT "LET x$="; CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$

! ↑実行結果の↓プリント表示

!LET x$="PRINT "LET x$="; CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$"
!PRINT "LET x$="; CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$

!---------------------------------------------------------------------
!上は、「""」が →「"」になって、うまくいかないので、PRINT 文から 全ての「"」を無くす。
! "LET x$=" → CHR$(76);CHR$(69);CHR$(84);CHR$(32);CHR$(120);CHR$(36);CHR$(61)
!---------------------------------------------------------------------
! これで一致、しかし見ずらい・・

LET x$="PRINT CHR$(76);CHR$(69);CHR$(84);CHR$(32);CHR$(120);CHR$(36);CHR$(61); CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$"
PRINT CHR$(76);CHR$(69);CHR$(84);CHR$(32);CHR$(120);CHR$(36);CHR$(61); CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$

! ↑実行結果の↓プリント表示

!LET x$="PRINT CHR$(76);CHR$(69);CHR$(84);CHR$(32);CHR$(120);CHR$(36);CHR$(61); CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$"
!PRINT CHR$(76);CHR$(69);CHR$(84);CHR$(32);CHR$(120);CHR$(36);CHR$(61); CHR$(34);x$;CHR$(34); CHR$(13);CHR$(10); x$

END
 

Re: C言語をBasic言語へできますか?

 投稿者:山中和義  投稿日:2015年 3月 4日(水)10時21分34秒
  > No.3601[元記事へ]

SECONDさんへのお返事です。

SECONDさんに習って、


10 LET X$="20 PRINT CHR$(49);CHR$(48);CHR$(32); CHR$(76);CHR$(69);CHR$(84);CHR$(32); CHR$(88);CHR$(36);CHR$(61); CHR$(34);X$;CHR$(34); CHR$(13);CHR$(10); X$; CHR$(13);CHR$(10); CHR$(51);CHR$(48);CHR$(32); CHR$(69);CHR$(78);CHR$(68)"
20 PRINT CHR$(49);CHR$(48);CHR$(32); CHR$(76);CHR$(69);CHR$(84);CHR$(32); CHR$(88);CHR$(36);CHR$(61); CHR$(34);X$;CHR$(34); CHR$(13);CHR$(10); X$; CHR$(13);CHR$(10); CHR$(51);CHR$(48);CHR$(32); CHR$(69);CHR$(78);CHR$(68)
30 END



参考サイト http://ja.wikipedia.org/wiki/クワイン_(プログラミング)  のMS-Office VBA(マクロ)に習って、
文字出力(CHR$関数)を、引用符と制御コード(CR,LF)に限定すると、


10 LET X$="20 PRINT X$(109:999); CHR$(34);X$;CHR$(34);CHR$(13);CHR$(10); X$(1:102);CHR$(13);CHR$(10); X$(103:108)30 END10 LET X$="
20 PRINT X$(109:999); CHR$(34);X$;CHR$(34);CHR$(13);CHR$(10); X$(1:102);CHR$(13);CHR$(10); X$(103:108)
30 END




10 DATA "30 PRINT X$(150:999); CHR$(34);X$;CHR$(34);CHR$(13);CHR$(10); X$(140:149);CHR$(13);CHR$(10); X$(1:133);CHR$(13);CHR$(10); X$(134:139)40 END20 READ X$10 DATA "
20 READ X$
30 PRINT X$(150:999); CHR$(34);X$;CHR$(34);CHR$(13);CHR$(10); X$(140:149);CHR$(13);CHR$(10); X$(1:133);CHR$(13);CHR$(10); X$(134:139)
40 END



マルチステートメント、END文なし なら、簡潔になりますね。

 

組み合わせ C(n,m) mod p

 投稿者:山中和義  投稿日:2015年 3月 8日(日)10時42分50秒
  問題 平成27年度 東京大学入試 前期理系
mを2015以下の正の整数とする。 C(2015,m)が偶数となる最小のmを求めよ。

考察
実際の値を求めると、多桁の整数の計算になってしまう。


OPTION ARITHMETIC RATIONAL
LET N=2015
FOR M=1 TO N
   IF MOD(COMB(N,M),2)=0 THEN EXIT FOR
NEXT M
PRINT M
END

(終わり)


答え
C(n,m)=P(n,m)/m!=(n/1)×((n-1)/2)×((n-2)/3)× … ×((n-m+1)/m)より、
(n-m+1)/mをかけていくことは、C(n,1)、C(n,2)、C(n,3)、… を得ていることである。
C(2015,m)
=(2015/1×2014/2×2013/3×2012/4×2011/5×2010/6×…×(2015-m+1)/m
=(2015/1×2013/3×2011/5×…)×(2014/2×2012/4×2010/6×…×(2015-m+1)/m)
と変形して、素因数2でのみ約分すると、
=(2015/1×2013/3×2011/5×…)×(1007/1×503/1×1005/3×…×(2015-m+1)/m)
C(n,m)は整数より、分母に残した奇数は、どこかの分子を割り切り、新しい奇数の分子をつくる。
したがって、
 奇数×奇数=奇数
 奇数×偶数=偶数
から、上記の計算過程で偶数の分子を見つければよい。
(n-m+1)/mは、奇数/奇数と偶数/偶数の繰り返しなので、分母が偶数のときのみ約分して、
2014/2×2012/4×2010/6×2008/8×2006/10×2004/12×2002/14×2000/16
×1998/18×1996/20×1994/22×1992/24×1990/26×1988/28×1986/30×1984/32
=1007/1×503/1×1005/3×251/1×1003/5×501/3×1001/7×125/1
×999/9×499/5×997/11×249/3×995/13×497/7×993/15×62/1
から、m=32
(終わり)

補足
2014/2、2012/4、2010/6、… は、2進法表記では、偶数は下位が0であるので、
分子と分母のそれぞれの0の個数に注意すればよい。
 n-m+1  m   2進法表記
 ----------
 2015   1   11111011111   1
 2014   2   11111011110   10  ← 相殺される
 2013   3   11111011101   11
 2012   4   11111011100   100  ← 相殺される
 2011   5   11111011011   101
 2010   6   11111011010   110  ← 相殺される
   :
 1986   30   11111000010   11110  ← 相殺される
 1985   31   11111000001   11111
ここまで、相殺されるが、
 1984   32   11111000000   100000
ここで、1個多くなる。


OPTION ARITHMETIC RATIONAL
LET N=2015
FOR M=1 TO N
   LET G=GCD(N-M+1,M)
   IF MOD((N-M+1)/G,2)=0 THEN EXIT FOR
NEXT M
PRINT M
END




●C(n,m) mod p の計算


OPTION ARITHMETIC RATIONAL
LET N=2015
LET P=2
PRINT 1; !C(n,0)=1
DIM D(N) !約分された分子
FOR M=1 TO N !(n-m+1)/mをかける
   LET D(M)=N-M+1
   LET T=M !約分する
   FOR J=1 TO M
      LET G=GCD(D(J),T)
      LET D(J)=D(J)/G
      LET T=T/G
      IF T=1 THEN EXIT FOR !分母が1になったなら
   NEXT J
   LET T=1
   FOR J=1 TO M
      LET T=MOD(T*D(J),P) !mod p
   NEXT J
   PRINT T;
NEXT M
PRINT
END



その2

LET N=2015
LET P=2
DIM C(0 TO N) !C(n,m)
FOR M=0 TO N !(1+x)^mの展開、パスカルの三角形のk段
   LET C(M)=1
   FOR J=M-1 TO 1 STEP -1
      LET C(J)=MOD(C(J-1)+C(J),P) !mod p
   NEXT J
NEXT M
MAT PRINT C;
END


0段目から2015段目までを計算するので、多少時間を要する。
参考 二項係数、パスカルの三角形、シェルピンスキーのギャスケット

 

素因数分解

 投稿者:山中和義  投稿日:2015年 3月10日(火)10時37分42秒
  問題
123456789を因数分解せよ。

類題
□□□□□×□□□□□=123456789

考察
フェルマー法
n=x^2-y^2=(x-y)(x+y)
X=[√n]として、順にx=X+1,X+2,X+3,…で、x^2-nを満たす平方数y^2を求める。
このとき、x+y,x-yがnの因数となる。
(終わり)

答え 筆算による
11111×11111=123454321([√n]に相当する)なので、x+1=11112である。

x=11112のとき、11112×11112=123476544
   123476544
 - 123456789
 -----------
    5) 19755 ←5の倍数判定より
     -------
        3951
 これは、5の倍数でないので、5^2を因数に持たない。これより、平方数にならない。

 補足
 11112×11112は直接計算してよいが、
 x^2と(x+1)^2=x^2+2x+1の関係より、123454321+2×11111+1=123476544と計算できる。
 (終わり)

x=11113のとき、11113×11113=123498769
   123498769
 - 123456789
 -----------
    5) 41980 ←5の倍数判定より
     -------
        8396
 これは、5の倍数でないので、5^2を因数に持たない。これより、平方数にならない。

x=11114のとき、11114×11114=123520996
   123520996
 - 123456789
 -----------
   11) 64207 ←2,3,5,7で割り切れないので
     -------
        5837
 これは、11の倍数でないので、11^2を因数に持たない。これより、平方数にならない。

x=11115のとき、11115×11115=123543225
   123543225
 - 123456789
 -----------
    2) 86436
     -------
    2) 43218
     -------
    3) 21609
     -------
    3)  7203
     -------
    7)  2401
     -------
    7)   343
     -------
    7)    49
     -------
            7
 これより、y=86436=(2×3×7×7)^2=294^2

よって、11115-294=10821、11115+294=11409から、123456789=10821×11409

3の倍数の判定より、10821=3×3607、11409=3×3803から、123456789=3^2×3607×3803


続いて、3607,3803が素数であろことを判定する。
試し割り法
k^2≦mを満たす素数kがmを割り切らないことを確認する。

m=3607のとき、k=3,5,7,…,59で割り切らない。
m=3803のとき、k=3,5,7,…,61で割り切らない。

以上より、求めることができた。
(終わり)


平方数の判定は、√キー付き電卓があると楽ですね。


LET N=123456789
LET X=INT(SQR(N))
DO
   LET X=X+1
   LET Y2=X*X-N
   LET Y=INT(SQR(Y2))
   PRINT X;Y2;Y
LOOP UNTIL Y^2=Y2
PRINT X-Y;X+Y
END


実行結果
11112  19755  140
11113  41980  204
11114  64207  253
11115  86436  294
10821  11409


 

部分列

 投稿者:山中和義  投稿日:2015年 3月11日(水)10時37分54秒
  問題
121212…と12を繰り返した数字が記入された紙テープがあります。
1桁の数として和を求めて、1,2,3,4,5,6,…となるように、はさみで順に切り取っていきます。
 1,2,12,121,212,1212,…
このようにして20になるように切り取ったとき、その並びを求めなさい。

答え
1から始まる場合、1212121212121②は21となって不適である。
2から始まる場合、2121212121212は20となる。
よって、2121212121212
(終わり)


DATA 1,2
DIM D(0 TO 1)
MAT READ D
LET P=0
FOR N=1 TO 20
   PRINT STR$(N);":";
   LET T=N !シミュレーション
   DO WHILE T>0
      PRINT D(P);
      LET T=T-D(P)
      LET P=P+1
      IF P>1 THEN LET P=0
   LOOP
   PRINT
NEXT N
END



別解

0:
1: 1
2: 2
3: 12
4: 121
5: 212
6: 1212
7: 12121
8: 21212
9: 121212
より、3ずつにまとめて、
 ?
 □?
 □□?
のような構図である。


LET N=20
DIM R$(0 TO 2),Q$(0 TO 2)
DATA "","1","2" !?
DATA "12","12","21" !□
MAT READ R$
MAT READ Q$
LET X=MOD(N,3)
FOR K=1 TO INT(N/3)
   PRINT Q$(X);
NEXT K
IF X>0 THEN PRINT R$(X) ELSE PRINT
END




類題
123432123432123432123…と123432を繰り返した数字が記入された紙テープがあります。
1桁の数として和を求めて、1,2,3,4,5,6,7,8,9,…となるように、はさみで順に切り取っていきす。
 1,2,3,4,32,123,43,2123,432,…
このようにして50になるように切り取ったとき、その並びを求めなさい。

答え
 321234 321234 321234  32

 

Re: 素因数分解

 投稿者:山中和義  投稿日:2015年 3月12日(木)10時08分33秒
  > No.3604[元記事へ]

> 類題
> □□□□□×□□□□□=123456789

みんな「社会人になると、因数分解することはなくなるね。」
今年卒業する総監督「46,48グループ全員で、恋する...(^^♪」

11111×11111=123454321<123456789<12346×10000より、11111<a<12346
元の数の一の位が9なので、1×9=9、3×3=9、7×7=49より、Aの一の位を1,3,7,9で検証する。

FOR A=11113 TO 12346-1 STEP 2
   LET B=123456789/A
   IF B=INT(B) THEN PRINT A;B
NEXT A
END


別解
総監督「神7にお願い!フライングゲット♪」

a≧bとして、n=abとする。x=(a+b)/2、y=(a-b)/2とおくと、n=x^2-y^2、a=x+y、b=x-y
11111×11111=123454321<123456789<12346×10000より、(11111+11111)/2=11111<x<(12346+10000)/2=11173
平方数を扱う必要があるが、
平方数の一の位は、0,1,4,5,6,9となる
より、いきなり素因数分解する必要はない。

FOR X=11111+1 TO 11173-1
   LET Y2=X*X-123456789
   LET Y=INT(SQR(Y2))
   IF Y*Y=Y2 THEN PRINT X+Y;X-Y
NEXT X
END


みんなで協力(分担作業)して解きました。

 

お! π の計算

 投稿者:山中和義  投稿日:2015年 3月14日(土)09時54分30秒
  円周率の近似値の日に思う、、、

#01
コナン「ぼく、わかっちゃった! おっぱいでしょ」
元太「おっきいのかな、ちっちぇえのかな」
灰原「今日はホワイドデー!」
(終わり)


次の式を計算してください。
(1)  (2+i)/(2-i) * (3+i)/(3-i)
(2)  ((2+i)/(2-i))^2 * (7-i)/(7+i)
(3)  ((3+i)/(3-i))^2 * (7+i)/(7-i)
(4)  ((5+i)/(5-i))^4 * (239-i)/(239+i)

答え
(1+i)/(1-i)、または分母を実数化して、iでもよい。


OPTION ARITHMETIC COMPLEX !複素数の計算
LET i=COMPLEX(0,1) !虚数単位
PRINT (1+i)/(1-i); i
PRINT (2+i)/(2-i) * (3+i)/(3-i)
PRINT ((2+i)/(2-i))^2 * (7-i)/(7+i)
PRINT ((3+i)/(3-i))^2 * (7+i)/(7-i)
PRINT ((5+i)/(5-i))^4 * (239-i)/(239+i)
END

実行結果
( 0  1) ( 0  1)
(-3.33121117496171E-17  1)
(-9.32549393609095E-17  1)
( 9.32549393609095E-17  1)
( 9.94840196550176E-19  1)


・式の創作について
計算式を、
 (A+i)/(A-i) → ArcTan(1/A)
 べき乗 ((A+i)/(A-i))^K → 定数倍 K*ArcTan(1/A)
 積 * → 和 +
と対応させて、
  ArcTan(1/1)
=  ArcTan(1/2)+ArcTan(1/3)
=2*ArcTan(1/2)-ArcTan(1/7)
=2*ArcTan(1/3)+ArcTan(1/7)
=4*ArcTan(1/5)-ArcTan(1/239)
   :
=π/4(ArcTan系の公式)

∵ArcTan(1/A)=αとすると、arg( (A+i)^k )=kα、arg( ((A+i)/(A-i))^k )=k(2α)

 

ディオファントス方程式

 投稿者:永野護  投稿日:2015年 3月14日(土)15時59分2秒
  不定方程式 a^3 + b^3 =c^7 を解く事を考えます。(解は自然数のみ)。
a=p^5:b=p^3:c=2*(p^2)と仮定します。
これらを与式に代入すると p^15 + p^15-128*(p^14)=0(指数の差を1にするのがこつ)となります。これは(p^14)*(p + p -128)=0となり結局 2*p=128:p=64となります。
答え a=64^5 b=64^3 c=2*(64^2)。
同様な算法でa^3 + b^5 +c^7 =d^4 なども解くことができるようです。
--------------------------------------------------------------------------------
ここからが質問です。
同様な算法でa^3 + b^3 =341を解くことはできるでしょうか。(右辺が定数の場合)。
答えはもちろんa=5 :b=6 なのですが。
 

Re: ディオファントス方程式

 投稿者:山中和義  投稿日:2015年 3月14日(土)19時04分29秒
  > No.3608[元記事へ]

永野護さんへのお返事です。

> 不定方程式 a^3 + b^3 =c^7 を解く事を考えます。(解は自然数のみ)。

a^3+b^5=c^7ですね。


> 同様な算法でa^3 + b^3 =341を解くことはできるでしょうか。(右辺が定数の場合)。
> 答えはもちろんa=5 :b=6 なのですが。


a^3+b^3=nを、(a+b)(a^2-ab+b^2)=pqと因数分解する。
a+b=pかつa^2-ab+b^2=qのとき、
a^2-ab+b^2=(a+b)^2-3abなので、ab=(p^2-q)/3
解と係数の関係より、2次方程式t^2-pt+(p^2-q)/3=0を得るので、自然数解a,bを求める。
a+b=qかつa^2-ab+b^2=pのときも同様にする。


LET N=341

FOR P=1 TO SQR(N) !p≦q、n=pq
   IF MOD(N,P)=0 THEN
      LET Q=N/P

      LET W=(P^2-Q)/3 !abは整数なので
      IF W=INT(W) THEN
         LET D=P^2-4*W !判別式
         IF D>=0 THEN PRINT (P-SQR(D))/2; (P+SQR(D))/2
      END IF

      LET W=(Q^2-P)/3 !p,qを入れ替えて
      IF W=INT(W) THEN
         LET D=Q^2-4*W
         IF D>=0 THEN PRINT (Q-SQR(D))/2; (Q+SQR(D))/2
      END IF

   END IF
NEXT P

END

 

フォント名読み出し(TTFファイル)

 投稿者:しばっち  投稿日:2015年 3月15日(日)11時00分7秒
  SET TEXT FONT文で指定するフォント名を直接TTFファイルから読み出します。
TTFファイルから"name"タグを読み込み、シークして目標とする文字列(フォント名)を読み込みます。
但し、IDの種類がいくつもあり、またシステム(OS)がどのIDで認識しているのか不明であるため
プログラムでは、

Platform_ID=1,Name_ID=1 及び Platform_ID=1,Name_ID=2
存在するなら

Platform_ID=1,Name_ID=4 の文字列を優先的に読み込んでいます。

IDが見つからない、オフセット値がおかしい等の理由により読み込みに失敗した場合
リードエラーを起こすので、エラー処理で飛ばし「Error File」としています。
TTFファイル以外のフォント形式には対応していません。(TTCファイルは分割するとTTFファイルになる)
読み込みには時間がかかるため、読み出したフォント名はDATA文形式で書き出します。

●TTFファイルの中身を知りたい方(解析に使用したツール)

下記URLより「fonttools.exe」(自己解凍形式)をダウンロード
実行して、その中から「TTFDump.zip」を解凍し、コマンドラインから
ttfdump TTFファイル名 > out.txt
のようにタイプすると巨大なテキストファイルが出来る。
(ttfdump のみでhelp表示)
バイトオーダーにご注意(big-endian)

http://www.microsoft.com/typography/tools/tools.aspx

●フリーフォントサイト

文字だけでなく、図形やキャラクターなどがある。
http://ja.fonts2u.com/top-downloads.html


LET PASS$="C:\WINDOWS\FONTS\" !'フォントフォルダ
LET FILTER$="*.TTF" !' TTFファイル
LET FONTDIR$=PASS$&FILTER$
LET N=FILES(FONTDIR$)
DIM FONTFILE$(N)
FILE LIST FONTDIR$,FONTFILE$
FOR I=1 TO N
!'  PRINT "No.";I;"ファイル名:";FONTFILE$(I),"フォント名:";GETFONTNAME$(PASS$&FONTFILE$(I))
   PRINT "DATA ";CHR$(34);GETFONTNAME$(PASS$&FONTFILE$(I));CHR$(34);" ! ";FONTFILE$(I)
NEXT I
END

EXTERNAL  FUNCTION GETFONTNAME$(F$)
IF POS(UCASE$(F$),".TTF")=0 THEN
   LET GETFONTNAME$=""
   EXIT FUNCTION
END IF
OPTION CHARACTER BYTE
DIM A$(12)
WHEN EXCEPTION IN !'エラー処理
   OPEN #1:NAME F$,ACCESS INPUT
   FOR I=1 TO 12
      CHARACTER INPUT #1:A$(I)
      LET ADR=ADR+1
   NEXT I
   LET SFNTVER=CVI(A$(1)&A$(2))
   LET NUMTABLES=CVL(A$(3)&A$(4)&A$(5)&A$(6))
   LET SEARCHRANGE=CVI(A$(7)&A$(8))
   LET ENTERYSELECTOR=CVI(A$(9)&A$(10))
   LET RANGESHIFT=CVI(A$(11)&A$(12))
   FOR I=1 TO NUMTABLES
      LET TAG$=""
      FOR J=1 TO 4
         CHARACTER INPUT #1:S$
         LET ADR=ADR+1
         LET TAG$=TAG$&S$
      NEXT J
      FOR J=1 TO 12
         CHARACTER INPUT #1:A$(J)
         LET ADR=ADR+1
      NEXT J
      IF TAG$="name" THEN !' 'name'タグ
         LET NAMEOFFSET=CVL(A$(5)&A$(6)&A$(7)&A$(8))
         LET NAMELENGTH=CVL(A$(9)&A$(10)&A$(11)&A$(12))
         EXIT FOR
      END IF
   NEXT I
   DO
      CHARACTER INPUT #1:S$ !'シーク
      LET ADR=ADR+1
   LOOP UNTIL ADR=NAMEOFFSET
   FOR J=1 TO 6
      CHARACTER INPUT #1:A$(J)
      LET ADR=ADR+1
   NEXT J
   LET FORMAT=CVI(A$(1)&A$(2))
   LET COUNT=CVI(A$(3)&A$(4))
   LET STRINGOFFSET=CVI(A$(5)&A$(6))
   FOR I=1 TO COUNT
      FOR J=1 TO 12
         CHARACTER INPUT #1:A$(J)
         LET ADR=ADR+1
      NEXT J
      LET PLATFORM_ID=CVI(A$(1)&A$(2))
      LET SPECIFIC_ID=CVI(A$(3)&A$(4))
      LET LANGUAGE_ID=CVI(A$(5)&A$(6))
      LET NAME_ID=CVI(A$(7)&A$(8))
      LET LENGTH=CVI(A$(9)&A$(10))
      LET OFFSET=CVI(A$(11)&A$(12))
      IF PLATFORM_ID=1 AND NAME_ID=1 THEN
         LET LENGTH1=LENGTH
         LET OFFSET1=OFFSET
      ELSEIF PLATFORM_ID=1 AND NAME_ID=2 THEN
         LET LENGTH2=LENGTH
         LET OFFSET2=OFFSET
      ELSEIF PLATFORM_ID=1 AND NAME_ID=4 THEN
         LET LENGTH1=LENGTH
         LET OFFSET1=OFFSET
         LET LENGTH2=-1
         LET OFFSET2=-1
         EXIT FOR
      END IF
      IF LANGUAGE_ID=1033 AND SPECIFIC_ID=1 THEN
         IF LENGTH1=0 AND PLATFORM_ID=3 AND NAME_ID=1 THEN
            LET LENGTH1=LENGTH
            LET OFFSET1=OFFSET
         ELSEIF LENGTH2=0 AND PLATFORM_ID=3 AND NAME_ID=2 THEN
            LET LENGTH2=LENGTH
            LET OFFSET2=OFFSET
         ELSEIF LENGTH2=0 AND PLATFORM_ID=3 AND NAME_ID=4 THEN
            LET LENGTH1=LENGTH
            LET OFFSET1=OFFSET
            LET LENGTH2=-1
            LET OFFSET2=-1
            EXIT FOR
         END IF
      END IF
   NEXT I
   DO UNTIL ADR=NAMEOFFSET+STRINGOFFSET+OFFSET1
      CHARACTER INPUT #1:S$
      LET ADR=ADR+1
   LOOP
   FOR J=1 TO LENGTH1 !'フォント名読み込み
      CHARACTER INPUT #1:S$
      LET ADR=ADR+1
      IF S$<>CHR$(0) THEN  LET F1$=F1$&S$
   NEXT J
   IF OFFSET2>0 THEN
      DO UNTIL ADR=NAMEOFFSET+STRINGOFFSET+OFFSET2
         CHARACTER INPUT #1:S$
         LET ADR=ADR+1
      LOOP
      FOR J=1 TO LENGTH2 !'フォント名読み込み
         CHARACTER INPUT #1:S$
         LET ADR=ADR+1
         IF S$<>CHR$(0) THEN  LET F2$=F2$&S$
      NEXT J
   END IF
   IF UCASE$(F2$)<>"REGULAR" AND F2$<>"" THEN !' "regular"は除外?
      LET GETFONTNAME$=F1$&" "&F2$
   ELSE
      LET GETFONTNAME$=F1$
   END IF
USE
   LET GETFONTNAME$="(Error File)" !'リードエラー(読み出し失敗)
END WHEN
CLOSE #1
END FUNCTION

EXTERNAL FUNCTION CVI(A$) !'Big-Endian(2byte整数)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A$=LEFT$(A$,2)
LET A=ORD(A$(2:2))+ORD(A$(1:1))*256
IF A>32767 THEN LET A=A-65536
LET CVI=A
END FUNCTION

EXTERNAL FUNCTION CVL(A$) !'Big-Endian(4byte整数)
OPTION CHARACTER BYTE
DECLARE NUMERIC A
LET A$=LEFT$(A$,4)
LET A=ORD(A$(4:4))+ORD(A$(3:3))*256+ORD(A$(2:2))*256^2+ORD(A$(1:1))*256^3
IF A>=2^31-1 THEN LET A=A-2^32
LET CVL=A
END FUNCTION

読み出したDATA文は下記のプログラムとマージすると簡易フォントビューワになります。(0x00~0xFF)
前回表示と変化がない場合、読み出しに失敗している可能性があります。
(SET TEXT FONT文で存在しないフォント名を指定してもエラーにはならない)

OPTION CHARACTER BYTE
CALL GINIT(700,700)
LET SIZE=40
SET TEXT JUSTIFY "LEFT" , "TOP"
DO
   SET TEXT COLOR 4
   SET TEXT FONT "MS 明朝",SIZE*.7
   FOR X=0 TO 15
      PLOT TEXT ,AT 50+X*SIZE,0:RIGHT$("0"&BSTR$(X,16),2)
   NEXT X
   FOR Y=0 TO 15
      PLOT TEXT ,AT 0,50+Y*SIZE:RIGHT$("0"&BSTR$(Y*16,16),2)
   NEXT  Y
   FOR X=0 TO 16
      CALL LINE(50+X*SIZE,50,50+X*SIZE,50+16*SIZE,6)
   NEXT X
   FOR Y=0 TO 16
      CALL LINE(50,50+Y*SIZE,50+16*SIZE,50+Y*SIZE,6)
   NEXT Y
   READ IF MISSING THEN EXIT DO:FONTNAME$
   PRINT FONTNAME$
   SET TEXT FONT FONTNAME$,SIZE*.6
   SET TEXT COLOR 7
   FOR I=0 TO 15
      FOR J=0 TO 15
         PLOT TEXT ,AT 50+J*SIZE,50+I*SIZE :CHR$(I*16+J)
      NEXT  J
   NEXT I
   INPUT S$ !'一時停止
   CLEAR
LOOP
!ここからDATA文を置く


END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
SET TEXT JUSTIFY "LEFT","TOP"
CLEAR
END SUB

EXTERNAL SUB LINE(XS,YS,XE,YE,C)
SET COLOR C
PLOT LINES
PLOT LINES:XS,YS;XE,YE
END SUB
 

ディオファントス方程式

 投稿者:永野護  投稿日:2015年 3月15日(日)11時29分7秒
  急いでいたので間違いました。
ごめんなさい。
問題の文中、不定方程式 a^3 + b^3 =c^7 を解く事を考えます。(解は自然数のみ)。----
はa^3 + b^5=c^7
でした。
まことに申し訳ございません。ありがとうございました。
 

タクシー数

 投稿者:山中和義  投稿日:2015年 3月17日(火)10時14分40秒
  問題 一橋大学 2009年前期
2以上の整数m,nはm^3+1^3=n^3+10^3を満たす。m,nを求めよ。

参考サイト http://ja.wikipedia.org/wiki/タクシー数


考察
その1
因数分解して、2次方程式を解く。
その2
a^3+b^3=nとして、1^3, 2^3, 3^3, 4^3, …, 10^3, 11^2, 12^3=1728 の中から2つ選ぶ。
2通り以上のものを探す。
(終わり)


OPTION ARITHMETIC RATIONAL

FOR N=1 TO 10000

   LET K=0 !k^3≦nを満たす最大の値
   DO WHILE K^3<=N
      LET K=K+1
   LOOP
   LET K=K-1

   LET S=0
   FOR B=K TO 0 STEP -1 !減少列
      LET W=N-B^3
      FOR A=B TO 0 STEP -1 !a^3≦b^3
         LET T=A^3
         IF T=W THEN !題意を満たす
            LET S=S+1
            IF S=1 THEN
               LET AA=A !save it
               LET BB=B
            ELSEIF S=2 THEN
               PRINT N; AA;BB
               PRINT N; A;B
            ELSE
               PRINT N; A;B
            END IF
            EXIT FOR
         ELSEIF T<W THEN !以降は可能性なし
            EXIT FOR
         END IF
      NEXT A
      IF B=A THEN EXIT FOR !以降は可能性なし
   NEXT B

NEXT N

END


実行結果
1729  1  12
1729  9  10
4104  2  16
4104  9  15



「特徴のない、つまらない数字だったよ。」
「それは2つの立方数の和で2通りに表せる最小の数なのです。」

「1729=19×91」

 

カードの並べ替え

 投稿者:山中和義  投稿日:2015年 3月18日(水)13時05分17秒
  問題
1から13までのトランプのカードがあります。
この13枚のカードは順番に並んでいませんので、並べ替えてください。

参考サイト http://ja.wikipedia.org/wiki/ソート  バケットソート


DATA 10, 5, 13, 11, 9, 3, 6, 1, 4, 7, 2, 8, 12
!DATA 8, 5, 12, 3, 11, 13, 6, 10, 1, 4, 7, 2, 9
DIM A(13)
MAT READ A
LET S=0 !既に並んでいるカードの枚数
LET P=1
DO
   PRINT P
   LET T=A(P) !p番目のカードの番号
   IF T=P THEN
      LET S=S+1
      IF S=13 THEN EXIT DO !すべて昇順に並んだ
   ELSE
      LET A(P)=A(T) !既定位置へ移動させる
      LET A(T)=T
      MAT PRINT A; !進捗状況
   END IF

   LET P=P+1 !次の位置へ
   IF P>13 THEN LET P=1
LOOP
END


実行結果

1
7  5  13  11  9  3  6  1  4  10  2  8  12

2
7  9  13  11  5  3  6  1  4  10  2  8  12

3
7  9  12  11  5  3  6  1  4  10  2  8  13

4
7  9  12  2  5  3  6  1  4  10  11  8  13

5
6
7  9  3  2  5  12  6  1  4  10  11  8  13

7
7  9  3  2  5  6  12  1  4  10  11  8  13

8
1  9  3  2  5  6  12  7  4  10  11  8  13

9
1  9  3  4  5  6  12  7  2  10  11  8  13

10
11
12
1  9  3  4  5  6  12  8  2  10  11  7  13

13
1
2
1  2  3  4  5  6  12  8  9  10  11  7  13

3
4
5
6
7
1  2  3  4  5  6  7  8  9  10  11  12  13

8
9
10
11


 

電卓の日

 投稿者:山中和義  投稿日:2015年 3月20日(金)15時57分36秒
  問題
次の自然数の和を電卓を使って計算する課題にAさんは取り組んでいる。
  43+46+49+52+55+58+61+64+67+70+73+76+79+82
ところが、いつもそそっかしいAさんは、どこか一ヶ所で「+」キーを押し忘れたようで、答えが「6914」となった。
どことどこの間で、Aさんは「+」キーを押し忘れたのだろうか?

答え
x,yの間で押し忘れたとすると、
   …,100x,y,… = 6914
-) …,   x,y,… =  875
------------------------
       99x      = 6039
           ∴ x = 61
よって、61と64との間となる。

DATA 43,46,49,52,55,58,61,64,67,70,73,76,79,82, 6914
LET S=0 !正答
FOR K=1 TO 14
   READ A
   LET S=S+A
NEXT K
READ W !誤答
PRINT (W-S)/99
END


別解 シミュレーション

DATA 43,46,49,52,55,58,61,64,67,70,73,76,79,82
DIM A(14)
MAT READ A
FOR K=1 TO 14-1 !忘れた位置
   LET S=0 !和を求める
   FOR J=1 TO 14
      IF J=K THEN LET S=S+A(J)*100 ELSE LET S=S+A(J)
   NEXT J
   IF S=6914 THEN PRINT A(K) !題意を満たす
NEXT K
END



類題
次の自然数の和を電卓を使って計算する課題にAさんは取り組んでいる。
  43+46+49+52+55+58+61+64+67+70+73+76+79+82
ところが、いつもそそっかしいAさんは、どこか一ヶ所で「-」キーを押したようで、答えが「753」となった。
どことどこの間で、Aさんは「-」キーを押したのだろうか?

答え
(x+y)-(x-y)=875-753 ∴2y=122 ∴y=61

DATA 43,46,49,52,55,58,61,64,67,70,73,76,79,82
DIM x(14)
MAT READ x
DIM A(14,14) !行列の積、ベクトルの内積
DATA 1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1,-1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1,-1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1,-1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1,-1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
MAT READ A
DIM b(14)
MAT b=A*x !シミュレーション
MAT PRINT b;
END


類題
次の自然数の和を関数電卓を使って計算する課題にAさんは取り組んでいる。
  43+46+49+52+55+58+61+64+67+70+73+76+79+82
ところが、いつもそそっかしいAさんは、どこか一ヶ所で「×」キーを押したようで、答えが「3628」となった。
どことどこの間で、Aさんは「×」キーを押したのだろうか?

答え
xy-(x+y)=3628-875 ∴(x-1)(y-1)=2754=51×54 ∴x=52,y=55

DATA 43,46,49,52,55,58,61,64,67,70,73,76,79,82, 3628
DIM A(14)
MAT READ A
READ W
LET S=0 !和を求める
FOR K=1 TO 14
   LET S=S+A(K)
NEXT K
FOR K=1 TO 13
   IF (A(K)-1)*(A(K+1)-1)=W-S+1 THEN PRINT A(K);A(K+1)
NEXT K
END


 

k-ハノイの塔

 投稿者:山中和義  投稿日:2015年 3月23日(月)19時39分23秒
  4本の棒のハノイの塔 最小手数

考察
初期状態を、
   ▲
  △△ ┴ ┴ ┴
とする。

これを、△△ ▲ ┴ ┴ と移動することを考える。
上からm個の▲の移動は4-hanoi[m]となる。
続いて、
┴ ▲ ┴ △△
残り(n-m)個の△△の移動は3-hanoi[n-m]となる。
最後に、
     ▲
┴ ┴ ┴ △△
▲の移動は4-hanoi[m]となる。
(終わり)

参考サイト http://oeis.org/A007664
参考サイト http://mathworld.wolfram.com/TowerofHanoi.html


OPTION ARITHMETIC RATIONAL
DECLARE EXTERNAL FUNCTION HANOI.H
FOR N=1 TO 50
   PRINT N; H(N,4)
NEXT N
END

MODULE HANOI !n枚の板、k本の棒のハノイの塔をH(n,k)と表す
OPTION ARITHMETIC RATIONAL
SHARE NUMERIC F(1000,10)
MAT F=ZER

PUBLIC FUNCTION H
EXTERNAL FUNCTION H(N,K)
   OPTION ARITHMETIC RATIONAL
   IF F(N,K)>0 THEN !算出している場合
      LET H=F(N,K) !restore it
   ELSE
      IF K=3 THEN !3本の場合、(2^n-1)回
         IF N=1 THEN
            LET T=1
         ELSE
            LET T=2*H(N-1,3)+1 !漸化式
         END IF
      ELSE !4本以上
         IF N=1 THEN
            LET T=1
         ELSE
            LET T=2*H(1,K)+H(N-1,K-1) !最小のもの
            FOR M=2 TO N-1
               LET W=2*H(M,K)+H(N-M,K-1) !m本はk-hanoi、(n-m)本は(k-1)-hanoi
               IF W<T THEN LET T=W
            NEXT M
         END IF
      END IF
      LET H=T
      LET F(N,K)=T !save it
   END IF
END FUNCTION
END MODULE


実行結果

1  1
2  3
3  5
4  9
5  13
6  17
7  25
8  33
9  41
10  49
11  65
12  81
13  97
14  113
15  129
16  161
17  193
18  225
19  257
20  289
21  321
22  385
23  449
24  513
25  577
26  641
27  705
28  769
29  897
30  1025
31  1153
32  1281
33  1409
34  1537
35  1665
36  1793
37  2049
38  2305
39  2561
40  2817
41  3073
42  3329
43  3585
44  3841
45  4097
46  4609
47  5121
48  5633
49  6145
50  6657


 

CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月28日(土)10時31分25秒
  問題
A+B=15、A+2B=35です。
このときA+B+Cはいくつでしょう?


A,B,Cの文字式と解釈して苦戦!(思い込み)

考察
13進法,14進法,15進法,… と見ていき、16進法で題意を満たす。
(終わり)

PRINT BSTR$(10+11,16), BSTR$(10+(2*16+11),16)
PRINT BSTR$(10+11+12,16)
END


たとえば、
0123456789aABCDEFfとする18進法の場合、A+B=15、A+2B=35なので、A+B+C=20となる。

0123456789ABCDEFも思い込みなのか!?

 

Re: CodeIQの問題

 投稿者:Takao Kosugi  投稿日:2015年 3月29日(日)20時22分20秒
  > No.3616[元記事へ]

条件としてのCを使う文字式が欠けています。
A+B+Cを、このままじゃ導けません。




山中和義さんへのお返事です。

> 問題
> A+B=15、A+2B=35です。
> このときA+B+Cはいくつでしょう?
>
>
> A,B,Cの文字式と解釈して苦戦!(思い込み)
>
> 考察
> 13進法,14進法,15進法,… と見ていき、16進法で題意を満たす。
> (終わり)
>
> PRINT BSTR$(10+11,16), BSTR$(10+(2*16+11),16)
> PRINT BSTR$(10+11+12,16)
> END
>
>
> たとえば、
> 0123456789aABCDEFfとする18進法の場合、A+B=15、A+2B=35なので、A+B+C=20となる。
>
> 0123456789ABCDEFも思い込みなのか!?
>
>
 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月30日(月)10時28分50秒
  > No.3616[元記事へ]

問題 几帳MEN
30個のみかんがあります。
3人で10個ずつ分けようと思いますが、不公平にならないように、
みかんの重さの合計が均一になるように分けてください。


考察
まず、

 問題
 9個のみかんがあります。
 3人で3個ずつ分けようと思いますが、不公平にならないように、
 みかんの重さの合計が均一になるように分けてください。

の場合、
組み合わせで考えると、C(9,3)、C(6,3)と選んでいく。


DATA 9 !個数
DATA 86,106,85,128,95,96,91,102,108 !重さ
READ N
DIM B(N)
MAT READ B

LET S=0
FOR i=1 TO N
   LET S=S+B(i)
NEXT i
PRINT S; S/3 !合計

DIM F(N) !選択されたかどうか
MAT F=ZER
FOR P=1 TO N-2 !1つ目を選ぶ(組み合わせの基準とする)
   IF F(P)=0 THEN

      LET X=P+1 !2つ目を選ぶ
      DO WHILE X<=N-1
         IF F(X)=0 THEN

            FOR Y=X+1 TO N !3つ目を選ぶ
               IF F(Y)=0 THEN

                  IF B(P)+B(X)+B(Y)=S/3 THEN !題意を満たす
                     LET F(X)=1
                     LET F(Y)=1
                     PRINT B(P);B(X);B(Y)

                     !!!EXIT DO !解の1つ
                  END IF

               END IF
            NEXT Y

         END IF
         LET X=X+1
      LOOP

   END IF
NEXT P
END


実行結果

897  299
86  85  128
106  91  102
95  96  108


30個なら、C(30,10)、C(20,10)となって、検索範囲が増大する。

そこで、

ほぼ均等に分けると、それぞれ1回程度の交換で完成させることが期待できる。これを使って、1つの解を得る。
(終わり)


答え
85,86,91,95,96,102,106,108,128と昇順に並べる。
次のように、ほぼ均等に分ける。
 A: 1番目 6番目 7番目
 B: 2番目 5番目 8番目
 C: 3番目 4番目 9番目
すなわち、
 A: 85,102,106 =293
 B: 86, 96,108 =290
 C: 91, 95,128 =314

Aから順に、揃えていく。

・Aの85を移動させることを考える。299-293=6なので、85+6=91
 A: (91), 102 , 106 =299
 B:  86 ,  96 , 108 =290
 C: (85),  95 , 128 =308
 続いて、Bの86を移動させることを考える。299-290=9なので、86+9=95
  A:  91 , 102 , 106 =299
  B: (95),  96 , 108 =299
  C:  85 , (86), 128 =299
 続いて、Bの96,108を移動させることを考える。105,117になるので、移動できるものがない。

・Aの102を移動させることを考える。299-293=6なので、102+6=108
 A:  85 , (108),  106  =299
 B:  86 ,   96 , (102) =284
 C:  91 ,   95 ,  128  =314
 続いて、Bの86,96,102を移動させることを考えるが、これらは移動できない。
  A:  85 ,  108 ,  106  =299
  B:  86 ,   96 ,  102  =284
  C:  91 ,   95 ,  128  =314

・Aの106を移動させることを考える。
 299-293=6なので、106+6=112になるので、移動できるものがない。
(終わり)



DATA 9 !個数
DATA 86,106,85,128,95,96,91,102,108 !重み

!DATA 30 !個数
!DATA 138,104,139,124,157,128,134,150,157, 81 !重み
!DATA 159,159, 98,134,147,154,113,117,138,156
!DATA 116,147, 81,150, 95,131,156, 91,105,132

READ N
DIM D(N)
MAT READ D
LET S=0
FOR i=1 TO N
   LET S=S+D(i)
NEXT i
PRINT S; S/3


FOR i=1 TO N-1 !並べ替える
   FOR J=i+1 TO N
      IF D(i)>D(J) THEN
         LET T=D(i) !swap it
         LET D(i)=D(J)
         LET D(J)=T
      END IF
   NEXT J
NEXT i
MAT PRINT D;


DATA 3 !ほぼ均等に分ける
DATA 1,6,7
DATA 2,5,8
DATA 3,4,9

!DATA 10 !ほぼ均等に分ける
!DATA 1,6,7,12,13,18,19,24,25, 28
!DATA 2,5,8,11,14,17,20,23,26, 29
!DATA 3,4,9,10,15,16,21,22,27, 30

READ K
DIM A(N)
FOR i=1 TO N
   READ T
   LET A(i)=D(T)
NEXT i
MAT PRINT USING REPEAT$(" ###",K): A


FOR P=1 TO N/K
   LET T=0 !p番目の人の合計
   FOR i=1 TO K
      LET T=T+A((P-1)*K+i)
   NEXT i
   PRINT T
NEXT P
PRINT


CALL try(1,N,A,K,S/3) !移動を試みる

END


EXTERNAL SUB try(P,N,A(),K,S) !1つ移動させる
LET T=0 !p番目の人の合計
FOR i=1 TO K
   LET T=T+A((P-1)*K+i)
NEXT i
PRINT T !debug

IF P=N/K THEN !最後の人なら
   MAT PRINT USING REPEAT$(" ###",K): A
ELSE
   FOR i=1 TO K !p番目の人のi番目のみかんを入れ替える
      LET X=(P-1)*K+i
      FOR J=P*K+1 TO N !(p+1)番目以降の人のみかんが対象である
         IF T-A(X)+A(J)=S THEN !可能なら
            PRINT P; X;J !debug
            LET W=A(X) !swap it
            LET A(X)=A(J)
            LET A(J)=W
            CALL try(P+1,N,A,K,S) !次の人へ

            LET W=A(X) !元に戻す
            LET A(X)=A(J)
            LET A(J)=W
         END IF
      NEXT J
   NEXT i
END IF
END SUB


実行結果

897  299
85  86  91  95  96  102  106  108  128

  85 102 106
  86  96 108
  91  95 128
293
290
314

293
1  1  7
290
2  4  8
299
  91 102 106
  95  96 108
  85  86 128
1  2  6
284


 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 3月31日(火)10時26分10秒
  > No.3618[元記事へ]

問題 不思議な数字
次の条件を満たす数を求めなさい。
・0を除く全ての一桁の数で割り切れる。
・この数に含まれる任意の隣り合う二桁でも割ることができる。
・数字の0から9までを一度ずつ使っている数である。

答え

OPTION ARITHMETIC RATIONAL

DIM F(0 TO 9)

LET M=2^3*3^2*5*7 !条件1
PRINT M !debug
FOR N=CEIL(1023456789/M)*M TO 9876543210 STEP M

   LET T=N
   MAT F=ZER !条件3
   DO WHILE T>=10
      LET P=MOD(T,10)
      IF F(P)=1 THEN EXIT DO
      LET F(P)=1

      LET W=MOD(T,100) !条件2
      IF W=0 THEN EXIT DO !…00…の並び
      IF MOD(N,W)<>0 THEN EXIT DO

      LET T=INT(T/10)
   LOOP
   IF T<10 AND F(T)=0 THEN PRINT N !答え

NEXT N

END



実行結果

2520
3912657840


 

三角形の分割

 投稿者:山中和義  投稿日:2015年 4月 1日(水)10時34分35秒
  問題
ある三角形を合同なN個の三角形で分割してください。

考察
次のようなピラミッド状に並べることで、任意の三角形は、n^2個に分割できる。
   △
  △△
 △△△
1,4,9,16,25,36,49,…

正三角形の場合、中線(重心)または垂線を考えると、
2,3,6個(それぞれ直角三角形、2等辺三角形、直角三角形)に分割できる。

これを組み合わせると(上記の△が正三角形なら)、
   1, 4, 9,16,25,36,49,…
×2 2, 8,18,32,50,…
×3 3,12,27,48,…
×6 6,24,36,…

また、
直角をはさむ2辺の長さが1:nの直角三角形は、(n^2+1)個に分割できる。
2,5,10,17,26,37,50,…


元の三角形と相似の場合
1:1:√2の直角二等辺三角形の場合、2^k個
1:√3:2の直角三角形の場合、3^k個
(終わり)


OPTION ARITHMETIC COMPLEX !複素平面
LET N=3
SET WINDOW -1,N+1,-1,N+1
DRAW grid
LET Oo=COMPLEX(0,0) !三角形OAB
LET OA=COMPLEX(1,0)
LET OB=COMPLEX(0,1/N)
FOR K=1 TO N !n^2個
   FOR i=0 TO K-1
      DRAW triangle(Oo,OA,OB) WITH SHIFT(i,1-K/N)
   NEXT i
NEXT K
DRAW triangle(Oo,OA,OB) WITH ROTATE(RAD(90))*SHIFT(0,0) !(+1)個
END
EXTERNAL PICTURE triangle(Oo,OA,OB) !三角形OABを描く
OPTION ARITHMETIC COMPLEX !複素平面
PLOT LINES: Oo; OA; OB; Oo
END PICTURE


 

部分和

 投稿者:山中和義  投稿日:2015年 4月 2日(木)10時27分20秒
  問題
商品券が10枚ある。
1000円の商品を買いたい。ただし、おつりは出ない。
ぴったりの組合せはあるか。

答え
その1 2^10通り

DATA 50,80,130,190,230,250,280,310,390,440

DIM B(0 TO 2^10-1) !添え字がビットパターンとなる
LET B(0)=0
FOR K=0 TO 10-1 !ひとつずつ取り出す
   READ D
   LET Y=2^(K+1)-1 !部分和を求める
   FOR X=2^K-1 TO 0 STEP -1
      LET B(Y)=B(X)+D
      LET B(Y-1)=B(X)
      LET Y=Y-2
   NEXT X
   !!!MAT PRINT B; !debug
NEXT K

FOR i=0 TO 2^10-1 !答え(すべて)
   IF B(i)=1000 THEN PRINT RIGHT$("000000000"&BSTR$(i,2),10)
NEXT i

END

実行結果

0000010101  ← 50,80,130,190,230,250,280,310,390,440
0010110010
0100011010
0100110001
0110110100
1000010110
1000101001
1001111000
1010101100
1100110010



その2 動的計画法(Dynamic Programming)による

DATA 50,80,130,190,230,250,280,310,390,440

DIM A(1000)
MAT A=ZER

LET S=0
FOR i=1 TO 10 !ひとつずつ取り出す
   READ D
   FOR P=MIN(S,1000) TO 1 STEP -1 !部分和を求める
      IF A(P)>0 THEN
         LET T=P+D
         IF T<=1000 THEN LET A(T)=A(T)+A(P)
      END IF
   NEXT P
   LET A(D)=A(D)+1
   LET S=S+D
NEXT i

PRINT A(1000);"通り" !答え(場合の数)
END

実行結果

10 通り



その3 動的計画法(Dynamic Programming)による

DATA 50,80,130,190,230,250,280,310,390,440

DIM A(1000)
MAT A=ZER

LET S=0
FOR i=1 TO 10 !ひとつずつ取り出す
   READ D
   FOR P=MIN(S,1000) TO 1 STEP -1 !部分和を求める
      IF A(P)>0 THEN !リンクを形成する(上書きされる)
         LET T=P+D
         IF T<=1000 THEN LET A(T)=D
      END IF
   NEXT P
   LET A(D)=D
   LET S=S+D
NEXT i

LET T=1000 !答え(解の1つ)
DO WHILE T>0
   PRINT A(T);
   LET T=T-A(T) !リンクをたどる
LOOP
PRINT

END

実行結果

440  310  250

 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 4月 3日(金)18時31分39秒
  > No.3619[元記事へ]

問題
a≦bのとき、最小公倍数が50!(50の階乗)となるような組(a,b)は全部で何組あるでしょうか。

説明
最小公倍数が24になるような数の組 (a,b) を考えましょう。
a≦b のとき、そのような組は全部で11組あることが分かります。
 (1,24) (2,24) (3,8) (3,24) (4,24) (6,8)
 (6,24) (8,12) (8,24) (12,24) (24,24)
また、a≦b のとき、最小公倍数が6!(6の階乗、つまり720)となるような組(a,b)は全部で68組あります。
(終わり)


答え

OPTION ARITHMETIC RATIONAL

LET N=50

!まず、n!(nの階乗)を素因数分解する。

DIM F(N) !添え字p、値eで、p^eを表す
FOR i=1 TO N !1,2,3,4,5,…
   LET F(i)=i
NEXT i

FOR i=1 TO N !因子i
   LET T=F(i)
   LET F(i)=0 !個数
   IF T>1 THEN
      LET S=1
      FOR K=2*i TO N STEP i !割っていく
         LET S=S+1
         LET F(K)=F(K)/T
      NEXT K
      LET F(T)=F(T)+S !累積する
   END IF
NEXT i
MAT PRINT F;


!p,q,…,rを素数、e,f,…,gを自然数とする。
!2つの自然数A,B(A<B)の最小公倍数が、m=(p^e)(q^f)…(r^g)となるようなA,Bの組は、
!{(2e+1)(2f+1)…(2g+1)-1}/2 通りである。

!参考サイト
! 私的数学塾 http://www004.upp.so-net.ne.jp/s_honma/index.htm 内
!  投稿一覧
!   ある場合の数

LET T=1
FOR i=1 TO N
   LET T=T*(2*F(i)+1)
NEXT i
PRINT (T-1)/2 +1; "通り" !A=Bすなわち(m,m)を加味する

END


実行結果

0  47  22  0  12  0  8  0  0  0  4  0  3  0  0  0  2  0  2  0  0  0  2  0  0  0  0  0  1  0  1  0  0  0  0  0  1  0  0  0  1  0  1  0  0  0  1  0  0  0

5215226132813 通り


 

Re: CodeIQの問題

 投稿者:山中和義  投稿日:2015年 4月 4日(土)09時45分37秒
  > No.3622[元記事へ]

受付中の問題一覧 https://codeiq.jp/q/search?combine=

「設問チラ見!」で問題を閲覧することができます。また、受付が終了すると、見れなくなるみたいです。


 

30人31脚

 投稿者:山中和義  投稿日:2015年 4月 5日(日)20時13分49秒
  問題
「2人3脚」ならぬ「30人31脚」を考えます。
女の子が続いて並ぶと体力的に不利なので、女の子は隣り合わないようにします。
(男の子は何人並んでもよいものとします)
30人を一列に並べるとき、その並び方が何通りあるかを求めてください。
(男女の並び方だけを考えるものとして、誰がどの位置ということは考えないものとします。

説明
例えば、4人(4人5脚)の場合は以下の8通りがあります。
 男男男男
 男男男女
 男男女男
 男女男男
 女男男男
 男女男女
 女男男女
 女男女男
(終わり)



類題 大相撲本場所
15日間連敗しない勝ち負けの起こり方は何通りあるでしょうか。ただし、連敗とは2連敗をさします。
参考サイト http://math.a.la9.jp/sumo2.htm


答え
・場合の数

考察
左側から並べていき、k人の並びを考える。最初の1人を特定すれば、
 男と(k-1)人の並び
 女と男と(k-2)人の並び
と考えられる。
これより、漸化式F(n)=F(n-1)+F(n-2)を得る。
(終わり)


DECLARE EXTERNAL FUNCTION CALC.F
LET N=30
PRINT F(N);"通り"
END

MODULE CALC !F(n)=F(n-1)+F(n-2)、F(0)=1、F(1)=2
SHARE NUMERIC D(0 TO 50)
MAT D=ZER

PUBLIC FUNCTION F
EXTERNAL FUNCTION F(N)
   IF D(N)>0 THEN !計算済みなら
      LET T=D(N)
   ELSE
      IF N=0 THEN
         LET T=1 !φの1通り
      ELSEIF N=1 THEN
         LET T=2 !0,1の2通り
      ELSE
         LET T=F(N-1)+F(N-2) !0**,10*
      END IF
   END IF
   LET F=T
   LET D(N)=T
END FUNCTION
END MODULE



考察
4人5脚を考える。
女が0人、男が4人の場合
 男男男男 の1通り
女が1人、男が3人の場合
 ○男○男○男○ と並べて、女は4個の○から1つを選ぶ。 C(4,1)=4通り
女が2人、男が3人の場合
 ○男○男○ と並べて、女は3個の○から2つを選ぶ。 C(3,2)=3通り
女が3人以上は題意を満たさない。
以上より、1+4+3=8通り
(終わり)


LET N=30
LET S=1 !女が0人
FOR K=1 TO (N+1)/2 !女がk人
   LET S=S+COMB(N-K+1,K) !男を(n-k)人並べて、その間に並べる
NEXT K
PRINT S;"通り"
END




・並びの列挙


LET N=30
PUBLIC NUMERIC C !場合の数
LET C=0
DIM A(0 TO N) !※0番目は番兵
MAT A=ZER
CALL try(1,N,A)
PRINT C;"通り"
END

EXTERNAL SUB try(P,N,A()) !シミュレーション
IF P>N THEN
   LET C=C+1
   !!PRINT "No.";C !並びを表示する
   !!MAT PRINT A;
ELSE
   LET A(P)=0 !男
   CALL try(P+1,N,A)
   IF A(P-1)=0 THEN !1つ前が男なら
      LET A(P)=1 !女
      CALL try(P+1,N,A)
   END IF
END IF
END SUB


 

順列の生成

 投稿者:山中和義  投稿日:2015年 4月 7日(火)19時39分24秒
  問題
1からnまでの数字が書かれたn枚のカードを並べ替えて、n!通りの順列を求めてください。

答え
・挿入法

手順の確認
1を並べる。
①
2を並べる。1の前後に挿入する。
②1、1②
3を並べる。たとえば、21の並びなら、○2○1○の3か所に挿入する。
21に対して、③21、2③1、21③
12に対して、③12、1③2、12③
4を並べる。
321に対して、④321、3④21、32④1、321④
231に対して、④231、2④31、23④1、231④
213に対して、④213、2④13、21④3、213④
312に対して、④312、3④12、31④2、312④
132に対して、④132、1④32、13④2、132④
123に対して、④123、1④23、12④3、123④
(終り)


LET N=4
DIM A(N) !並び
CALL try(1, N,A)
END
EXTERNAL SUB try(K, N,A())
IF K>N THEN
   MAT PRINT A; !答え
ELSE
   DIM B(N)
   LET B(1)=K !kを1番目に挿入する
   FOR i=1 TO K-1 !k,a[1],a[2],…,a[k-1] ※a[1..k-1]
      LET B(i+1)=A(i)
   NEXT i
   CALL try(K+1, N,B) !次へ
   FOR P=2 TO K !kをp番目に挿入する
      LET T=B(P-1) !swap it
      LET B(P-1)=B(P)
      LET B(P)=T
      CALL try(K+1, N,B) !次へ
   NEXT P
END IF
END SUB



・並びの反転

手順の確認
(k+1)個の並びを考える。a[1] a[2] … a[k] と a[k+1] に分割される。
0から(k!-1)回で、先頭のk個の並び a[1] a[2] … a[k] の順列を生成する。(辞書順ではない)
具体的には、1≦m<kとして、m!の倍数のとき、先頭の(m+1)個の並びを反転させる。
最後の並びは、a[k] … a[2] a[1] a[k+1] となる。
続いて、(k!)回目で、a[k+1] a[1] a[2] … a[k]
すなわち、
 ┌───── ← ────┐
a[k+1] a[1] a[2] … → … a[k]

これを、計(k+1)回繰り返すと、右端がa[k+1] a[k] … a[2] a[1]となって、全順列を生成する。
(終り)


LET N=4
DIM A(N) !並び 1234…n
FOR i=1 TO N
   LET A(i)=i
NEXT i
MAT PRINT A;
FOR i=1 TO FACT(N)-1 !場合の数
   LET T=i
   LET K=2
   DO WHILE MOD(T,K)=0
      LET T=T/K
      LET K=K+1
   LOOP
   PRINT i;K !debug
   CALL Reverse(A,1,K) !先頭のk個
   MAT PRINT A;
NEXT i
END
EXTERNAL SUB reverse(A(),L,R) !指定された範囲の並びを逆順にする
LET i=L !左端
LET J=R !右端
DO WHILE i<J !交換位置は半分まで ※全部すると元に戻る
   LET t=A(i) !swap it
   LET A(i)=A(J)
   LET A(J)=t
   LET i=i+1 !次へ
   LET J=J-1
LOOP
END SUB


 

ゲーム開発

 投稿者:GAI  投稿日:2015年 4月10日(金)08時29分33秒
  トランプで1~13のカードをシャッフルして
テーブルに上から一枚ずつカードを左から右に並べていく。
次のカードが並んだカードの右端にあるカードの数字より少なければこのカードは横には
並べず捨てる。
ただし、1(エースカード)は特別な役目を持ち
右端がどんなカードでも捨てずに横に並べて置けて、次のカードはどんなものでも場から
捨て去る。ただしこの次のカードからは上記の通常のルールで進行していく。

例:シャッフル後のカードの配列
{13, 1, 9, 2, 5, 8, 7, 11, 3, 4, 6, 10, 12}

==>

テーブルに並ぶカード
{13,1,2,5,8,11,12}


こうして最後までテーブルに残るカードの中に数字1~13がそれぞれ残る確率が知りたい。
もちろんP(数字1)=1 は明らかですが、他のものはどれ位なものか知りたい?

このゲームをシュミレートできるプログラムを考えていたんですが、惜し所までは行くんですがいろいろなパターンが生じて全てに対応できていないことが起こり、行き詰まっています。
よろしくお願いします。
 

箱詰め問題(bin-packing problem)

 投稿者:山中和義  投稿日:2015年 4月12日(日)09時19分37秒
  > No.3618[元記事へ]

問題
33個のみかんを箱に詰める。1個の箱には、総重量が524gまで詰めることができる。
なるべく箱の個数を少なくしたい。どのように詰めればよいか。

考察
重さが大きいものから順に詰めていく。近似解を得る。
(終り)


DATA 524 !最大収納量
DATA 33 !個数
DATA 442 !重さ
DATA 252,252,252,252,252,252,252
DATA 127,127,127,127,127
DATA 106,106,106,106
DATA 85
DATA 84
DATA 46
DATA 37,37
DATA 12,12,12
DATA 10,10,10,10,10,10
DATA 9,9

READ M,N
DIM D(N)
MAT READ D
LET S=0 !全重量
FOR i=1 TO N
   LET S=S+D(i)
NEXT i
PRINT S; S/M

FOR i=1 TO N-1 !大きい順に並べ替える
   FOR J=i+1 TO N
      IF D(i)<D(J) THEN
         LET T=D(i) !swap it
         LET D(i)=D(J)
         LET D(J)=T
      END IF
   NEXT J
NEXT i
MAT PRINT D; !debug

DIM X(N) !収納した箱の番号
DIM B(10) !箱の総重量
MAT B=ZER
LET P=0 !詰めた箱の個数
FOR i=1 TO N !順番に箱詰めする
   FOR K=1 TO P
      IF B(K)+D(i)<=M THEN !収納する
         LET X(i)=K
         !!!PRINT i;K !debug
         LET B(K)=B(K)+D(i) !累積
         EXIT FOR
      END IF
   NEXT K
   IF K>P THEN !新しい箱を用意する
      LET P=P+1
      LET X(i)=P
      !!!PRINT i;P !debug
      LET B(P)=D(i)
   END IF
NEXT i
!!!MAT PRINT B; !debug
!!!MAT PRINT X; !debug

FOR i=1 TO P !内訳を表示する
   PRINT STR$(i);":"; !箱番号
   FOR K=1 TO N
      IF X(K)=i THEN PRINT D(K); !収納した重さ
   NEXT K
   PRINT "=";B(i)
NEXT i

END


実行結果

3668  7
442  252  252  252  252  252  252  252  127  127  127  127  127  106  106  106  106  85  84  46  37  37  12  12  12  10  10  10  10  10  10  9  9

1: 442  46  12  12  12 = 524
2: 252  252  10  10 = 524
3: 252  252  10  10 = 524
4: 252  252  10  10 = 524
5: 252  127  127  9  9 = 524
6: 127  127  127  106  37 = 524
7: 106  106  106  85  84  37 = 524




考察
空きが少ないものから順に詰めていく。近似解を得る。
(終り)



DATA 524 !最大収納量
DATA 33 !個数
DATA 442 !重さ
DATA 252,252,252,252,252,252,252
DATA 127,127,127,127,127
DATA 106,106,106,106
DATA 85
DATA 84
DATA 46
DATA 37,37
DATA 12,12,12
DATA 10,10,10,10,10,10
DATA 9,9

READ M,N
DIM D(N)
MAT READ D
LET S=0 !全重量
FOR i=1 TO N
   LET S=S+D(i)
NEXT i
PRINT S; S/M

!FOR i=1 TO N-1 !大きい順に並べ替える
!   FOR J=i+1 TO N
!      IF D(i)<D(J) THEN
!         LET T=D(i) !swap it
!         LET D(i)=D(J)
!         LET D(J)=T
!      END IF
!   NEXT J
!NEXT i
!!!MAT PRINT D; !debug

DIM X(N) !収納した箱の番号
DIM B(10) !箱の総重量
MAT B=M*CON
LET P=0 !詰めた箱の個数
FOR i=1 TO N !順番に箱詰めする
   LET Q=P+1
   FOR K=1 TO P !空きが最小のもの
      IF B(K)>=D(i) AND B(K)<B(Q) THEN LET Q=K
   NEXT K
   IF Q>P THEN LET P=Q !新しい箱を用意する
   LET X(i)=Q
   !!!PRINT i;Q !debug
   LET B(Q)=B(Q)-D(i) !残り
NEXT i
!!!MAT PRINT B; !debug
!!!MAT PRINT X; !debug

FOR i=1 TO P !内訳を表示する
   PRINT STR$(i);":"; !箱番号
   FOR K=1 TO N
      IF X(K)=i THEN PRINT D(K); !収納した重さ
   NEXT K
   PRINT "=";M-B(i)
NEXT i

END


実行結果

3668  7
1: 442  46  10  10  10 = 518
2: 252  252  12 = 516
3: 252  252  12 = 516
4: 252  252  10  10 = 524
5: 252  127  127  12 = 518
6: 127  127  127  106  37 = 524
7: 106  106  106  85  84  37 = 524
8: 10  9  9 = 28


 

Re: ゲーム開発

 投稿者:山中和義  投稿日:2015年 4月13日(月)10時12分22秒
  > No.3626[元記事へ]

GAIさんへのお返事です。

> トランプで1~13のカードをシャッフルして
> テーブルに上から一枚ずつカードを左から右に並べていく。
> 次のカードが並んだカードの右端にあるカードの数字より少なければこのカードは横には
> 並べず捨てる。
> ただし、1(エースカード)は特別な役目を持ち
> 右端がどんなカードでも捨てずに横に並べて置けて、次のカードはどんなものでも場から
> 捨て去る。ただしこの次のカードからは上記の通常のルールで進行していく。

13!では、一日仕事ですね。


LET N=13
DIM A(N) !並び
PUBLIC NUMERIC F(100) !各数字の残った回数
MAT F=ZER(N)
CALL try(1, N,A)
MAT PRINT F;
END

EXTERNAL SUB try(K, N,A()) !全順列を生成する(辞書順ではない)
IF K>N THEN
!!!MAT PRINT A; !答え
   CALL game(A,N)
ELSE
   DIM B(N)
   LET B(K)=K !kをk番目に挿入する
   FOR i=1 TO K-1 !a[1],a[2],…,a[k-1],k ※a[1..k-1]
      LET B(i)=A(i)
   NEXT i
   CALL try(K+1, N,B) !次へ
   FOR P=K-1 TO 1 STEP -1 !kをp番目に挿入する
      LET T=B(P) !swap it
      LET B(P)=B(P+1)
      LET B(P+1)=T
      CALL try(K+1, N,B) !次へ
   NEXT P
END IF
END SUB

EXTERNAL SUB game(A(),N) !ゲームを行う
LET R=0 !右端
LET i=1
DO WHILE i<=N !i枚目
   LET T=A(i)
   IF T=1 THEN !1の場合
      LET F(T)=F(T)+1 !カウントする
      LET R=1
      LET i=i+1 !a[i+1]を捨てる
   ELSE
      IF R>T THEN !捨てる
      ELSE !並べる
         LET F(T)=F(T)+1 !カウントする
         LET R=T
      END IF
   END IF
   LET i=i+1
LOOP
END SUB





> トランプで1~13のカードをシャッフルして
> テーブルに上から一枚ずつカードを左から右に並べていく。
> 次のカードが並んだカードの右端にあるカードの数字より少なければこのカードは横には
> 並べず捨てる。

1からnまでの数字を並べるとき、
数字kが残る場合の数
k=1のとき、
 1番目に配置した場合、1○…○の並びで、(n-1)!
 2番目以上に配置した場合、1より前に1より大きな数字が少なくとも1つあるので、1は残らない。
k=2のとき、
 1番目に配置した場合、2○…○の並びで、(n-1)!
 2番目に配置した場合、12○…○の並びで、1×(n-2)!
 3番目以上に配置した場合、2より前に2より大きな数字が少なくとも1つあるので、2は残らない。
 よって、(n-1)!+(n-2)!={(n-1)+1}×(n-2)!=n×(n-2)!
k=3のとき、
 1番目に配置した場合、3○…○の並びで、(n-1)!
 2番目に配置した場合、13○…○、23○…○の並びで、2×(n-2)!
 3番目に配置した場合、123○…○、213○…○の並びで、2!×(n-3)!
 4番目以上に配置した場合、3より前に3より大きな数字が少なくとも1つあるので、3は残らない。
 よって、(n-1)!+2×(n-2)!+2!×(n-3)!={(n-1)(n-2)+2(n-2)+2!}×(n-3)!=n(n-1)×(n-3)!
k=4のとき、(一般的な記述にすると)
 1番目に配置した場合、(1,2,3から0個)4(残りの数字)の並びで、P(3,0)×(n-1)!
 2番目に配置した場合、(1,2,3から1個)4(残りの数字)の並びで、P(3,1)×(n-2)!
 3番目に配置した場合、(1,2,3から2個)4(残りの数字)の並びで、P(3,2)×(n-3)!
 4番目に配置した場合、(1,2,3から3個)4(残りの数字)の並びで、P(3,3)×(n-4)!
 5番目以上に配置した場合、4より前に4より大きな数字が少なくとも1つあるので、4は残らない。
 よって、n(n-1)(n-2)×(n-4)!=n!/(n-3)
k=5のとき、
 :
 :


一般的に、n!/(n+1-k)個残る。(予想)



LET N=4
FOR K=1 TO N
   LET S=0
   FOR M=1 TO K !数字kをm番目に配置した場合
      LET S=S+PERM(K-1,M-1)*FACT(N-M)
   NEXT M
   PRINT K; S; FACT(N)/(N+1-K)
NEXT K
END


シミュレーションの場合、以下の部分を差し替えてください。


EXTERNAL SUB game(A(),N) !ゲームを行う
LET R=0 !右端
LET i=1
DO WHILE i<=N !i枚目
   LET T=A(i)
   IF R>T THEN !捨てる
   ELSE !並べる
      LET F(T)=F(T)+1 !カウントする
      LET R=T
   END IF
   LET i=i+1
LOOP
END SUB

 

分数の大小

 投稿者:山中和義  投稿日:2015年 4月13日(月)15時01分32秒
  問題
分数 23/67 と 33/97 の大小を判定せよ。

答え
3倍した値で考えると、
3×(23/67)=69/67=1+2/67
3×(33/97)=99/97=1+2/97
2/67>2/97なので、23/67>33/97
(終わり)

LET A=23 !a/b
LET B=67
LET K=3
PRINT INT(A*K/B);"+";MOD(A*K,B);"/";B
LET A=33 !a/b
LET B=97
LET K=3
PRINT INT(A*K/B);"+";MOD(A*K,B);"/";B
END


別解
23/67-33/97を計算する。分母を通分すると、分子は23×97-33×67である。
面積図
 ┌─┐
30│あ│
 ├─┼─┐
67│ │い│
 └─┴─┘
  23 10
より、分子の値は、
あ-い=23×30-10×67=690-670=20>0なので、23/67>33/97
(終わり)

OPTION ARITHMETIC RATIONAL
PRINT 23/67-33/97
END


別解
23/67-33/97を計算する。分母を通分すると、分子は行列式
| 23 33 |=| 23 10 |=23×30-10×67=690-670=20>0
| 67 97 | | 67 30 |
なので、23/67>33/97
(終わり)

DATA 23,33
DATA 67,97
DIM A(2,2)
MAT READ A
PRINT DET(A)
END


別解
XY平面上の点O(0,0)、点A(67,23)、点B(97,33)を考える。
線分ABの傾きは、(33-23)/(97-67)=10/30=1/3
線分OAの傾きは、23/67>23/69=1/3
よって、23/67>33/97
(終わり)
0<A<C、0<B<Dのとき、A/B>(C-A)/(D-B)なら、A(D-B)>B(C-A) ∴AD-BC>0
これは、A/B-C/D=(AD-BC)/(BD)>0を表すので、A/B>C/Dとなる。
また、A/B<(C-A)/(D-B)なら、A/B<C/Dとなる。



------------------------------------

類題
分数 40/59 と 44/67 の大小を判定せよ。

答え
2倍した値で考える。
2×(40/59)=80/59=1+21/59
2×(44/67)=88/67=1+21/67
21/59>21/67なので、40/59>44/67
(終わり)

答え
40/59-44/67を計算する。分母を通分すると、分子は行列式
| 40 44 |=| 40 4 |=| 40 4 |=(40-19)×4=84>0
| 59 67 | | 59 8 | | 19 4 |
なので、40/59>44/67

面積図
 ┌─┐
4 │あ│
 ├─┤
4 │う│
 ├─┼─┐
 │ │う│40
59│ ├─┤
 │ │い│19
 └─┴─┘
  40  4
(終わり)

答え
40/59>(44-40)/(67-59)=4/8=40/80より、40/59>44/67
(終わり)



 

Re: 分数の大小

 投稿者:山中和義  投稿日:2015年 4月17日(金)14時45分19秒
  この場合、どれが計算しやすいだろうか。


類題
分数 33/53 と 38/61 の大小を判定せよ。

答え 小数点による
33/53=0.62264…
38/61=0.62295…
なので、33/53<38/61
(終り)

答え 1との大小
(33/53)÷(38/61)=(33×61)/(53×38)=2013/2014<1
なので、33/53<38/61
(終わり)

答え k倍
53倍の値を考える。
53×(33/53) = 33
53×(38/61) = 2014/61 = (2013+1)/61 = (3×11×61+1)/61 = 33+1/61
または
61倍の値を考える。
61×(33/53) = (60+1)×33/53 = 2013/53 = (2014-1)/53 = (2×19×53-1)/53 = 38-1/53
61×(38/61) = 38
なので、33/53<38/61
(終り)

答え ad-bcの正負
33/53-38/61を計算する。分母を通分すると、分子は行列式
  | 33 38 |
  | 53 61 |
= | 33 38-1×33 |=| 33 5 |
  | 53 61-1×53 | | 53 8 |
= | 33-6×5 5 |=| 3 5 |=3×8-5×5=-1<0
  | 53-6×8 8 | | 5 8 |
さらに続けて、
= | 3 5-1×3 |=| 3 2 |
  | 5 8-1×5 | | 5 3 |
= | 3-1×2 2 |=| 1 2 |
  | 5-1×3 3 | | 2 3 |
= | 1 2-1×1 |=| 1 1 |
  | 2 3-1×2 | | 2 1 |
= | 1-1×1 1 |=| 0 1 |
  | 2-1×1 1 | | 1 1 |
なので、33/53<38/61
(終り)

答え
(38-33)/(61-53)=5/8=(5×33)/(8×33)=(5×33)/264
33/53=(33×5)/(53×5)=(33×5)/265
または
(38-33)/(61-53)=5/8=(5×53)/(8×53)=265/(8×53)
33/53=(33×8)/(53×8)=264/(53×8)
なので、33/53<38/61
(終り)
 

Re: 分数の大小

 投稿者:山中和義  投稿日:2015年 4月19日(日)11時08分45秒
  > No.3630[元記事へ]

問題
次の分数式が成立するとき、□に入る整数を求めなさい。
7/9<15/□<6/7

答え
分子を通分すると、((15/7)×7)/((15/7)×9)<15/□<((15/6)×6)/((15/6)×7)
∴15/(15×9/7))<15/□<15/(15×7/6)
∴15/19.28…<15/□<15/17.5
∴17.5<□<19.28…
よって、□は18,19である。
(終り)

LET A=7 !a/b
LET B=9
LET C=6 !c/d
LET D=7
LET X=15 !x/□
FOR Y=INT(X*D/C)+1 TO X*B/A
   PRINT Y
NEXT Y
END


 

近畿大学 数学コンテスト

 投稿者:山中和義  投稿日:2015年 5月 2日(土)19時44分44秒
  問題B-3
pを奇素数、nを自然数とし、f(x)=(x+1)^n-x^n とする。
xが自然数全体を動くとき、f(x)をpで割った余りが0,1,2,…,p-1のすべての値をとることを、
f(x)は全域性をもつと呼ぶことにする。
このとき、pに対してf(x)が全域性をもつnの値をすべて求めよ。
(nが求めた値のときf(x)は全域性をもつこと。およびそれ以外の値のときf(x)は全域性をもたないことを証明すること)

参考サイト
近畿大学 数学コンテスト 問題B-3 http://www.math.kindai.ac.jp/assets/files/mathcon/MC17problems.pdf


まずは探してみる。


OPTION ARITHMETIC RATIONAL
LET P=3 !素数
DIM F(0 TO P-1) !数字0から(p-1)
FOR N=1 TO 50
   PRINT STR$(N);": ";
   MAT F=ZER
   FOR X=1 TO P
      LET T=1 !1+Σ[r=1,n-1]C(n,r)x^r
      FOR R=1 TO N-1
         LET T=T+MOD(COMB(N,R),P)*MOD(X^R, P)
      NEXT R
      LET T=MOD(T,P)
      PRINT T; !debug
      IF F(T)=1 THEN EXIT FOR !既出なら
      LET F(T)=1
   NEXT X
   IF X>P-1 THEN PRINT "←題意を満たす";
   PRINT
NEXT N
END



考察
p=3のとき、
n=1の場合、f(x)=(x+1)^1-x^1=1
 常に1で0,2が現れないので、題意を満たさない。
n=2の場合、f(x)=(x+1)^2-x^2=2x+1
 x=1,2,3,4,5,6,7,8,9,…に対して、
 f(x)=3,5,7,9,11,13,15,17,19,…(奇数列)なので、0,2,1,0,2,1,0,2,1,…

この並びは、他の奇素数に対しても題意を満たす。
先頭からp個までのxで、f(x)≡3,5,7,9,…,0,2,4,6,8,…,(p-1),1 (mod p)となる。
                   ↑
                    p
具体的には、
p=5の場合、3,0,2,4,1
p=7の場合、3,5,0,2,4,6,1
p=11の場合、3,5,7,9,0,2,4,6,8,10,1
 :


他の解を見つけることを考える。

xのべき乗について
    x  x^2 x^3 x^4 x^5 x^6 x^7 x^8 …  (mod 3)
 1: ① 1   1   1   1   1   1   1   …
 2: 2  ①  2   1   2   1   2   1   …
 3: 0  0   0   0   0   0   0   0   …
 4: ① 1   1   1   1   1   1   1   …
 5: 2  ①  2   1   2   1   2   1   …
 6: 0  0   0   0   0   0   0   0   …
     :
すなわち
 k=0,1,2,3,…として、x^(2k+1)≡x、x^(2k+2)≡x^2
なので、
n=3の場合
 f(x)=(x+1)^3-x^3=3x^2+3x+1≡1 (mod 3)
n=4の場合
 f(x)=(x+1)^4-x^4=4x^3+6x^2+4x+1≡4x+6x^2+4x+1≡6x^2+8x+1≡2x+1 (mod 3)
n=5の場合
 f(x)=(x+1)^5-x^5=5x^4+10x^3+10x^2+5x+1≡5x^2+10x+10x^2+5x+1≡15x^2+15x+1≡1 (mod 3)
n=6の場合
 f(x)=(x+1)^6-x^6=6x^5+15x^4+20x^3+15x^2+6x+1
   ≡6x+15x^2+20x+15x^2+6x+1≡30x^2+32x+1≡2x+1 (mod 3)
n=7の場合
 f(x)=(x+1)^7-x^7=7x^6+21x^5+35x^4+35x^3+21x^2+7x+1
   ≡7x^2+21x+35x^2+35x+21x^2+7x+1≡63x^2+63x+1≡1 (mod 3)
n=8の場合
 f(x)=(x+1)^8-x^8=8x^7+28x^6+56x^5+70x^4+56x^3+28x^2+8x+1
   ≡8x+28x^2+56x+70x^2+56x+28x^2+8x+1≡126x^2+128x+1≡2x+1 (mod 3)
:

p=3の場合、f(x)は、1、2x+1の繰り返しとなる。

以上より、f(x)=(x+1)^n-x^n≡2x+1 (mod 3)を満たすnを見つける。
これを満たすものは、n=2,4,6,8,…である。


p=5の場合、f(x)は、1、2x+1、3x^2+3x+1、4x^3+x^2+4x+1の繰り返しとなる。



一般に、
f(x)=(x+1)^n-x^n≡2x+1 (mod p)を満たすnを見つける。

xのべき乗について
x=0,1,2,3,…,(p-1)に対して、x,x^2,x^3,…,x^(p-1)を考える。

(1+x)^n=Σ[r=0,n]{C(n,r)x^r}=1+Σ[r=1,n-1]{C(n,r)x^r}+x^nより、
f(x)=(x+1)^n-x^n=1+Σ[r=1,n-1]{C(n,r)x^r}

k=0,1,2,3,…、m=1,2,3,…,(p-1)として、x^((p-1)k+m)≡x^mなので、
x^mの係数をまとめると、Σ[r=(p-1)k+m≦n-1]C(n,r) (mod p)
これが、2x+1すなわち2,0,0,…,0となれば題意を満たす。

2x+1の確認は、n=1,2,3,…,(p-1)の範囲でよい。(p-1)種類の多項式が繰り返される。
よって、n=(p-1)k+2である。
(終り)



OPTION ARITHMETIC RATIONAL
LET P=3 !素数
FOR N=1 TO 15
   PRINT "N=";N
   FOR M=1 TO P-1 !x^(k(p-1)+m)に対する
      LET C=0
      FOR R=M TO N-1 STEP P-1 !係数をまとめる
         LET C=C+COMB(N,R)
      NEXT R
      PRINT "x^";STR$(M); C; MOD(C,P)
   NEXT M
   PRINT
NEXT N
END



 

数列

 投稿者:山中和義  投稿日:2015年 5月 3日(日)18時40分27秒
  問題
S={1,5,11,13,17,29}として、{a[n]}は次の条件(1),(2),(3)を満たす数列とする。
条件
 (1) a[1]∈S
 (2) 個々の正整数nに対して(a[n+1]-1)/(a[n]+1)∈S
 (3) 10以下のある正整数nに対してa[n]=2015

このような条件を満たす数列{a[n]}において、それまでの和
 a[1]+a[2]+a[3]+ … +a[n] (n≦10,a[n]=2015)
はいくつになることができるか。


答え
バックトラック法で検索する。


DIM A(10),S(6)
DATA 1,5,11,13,17,29
MAT READ S
FOR N=10 TO 2 STEP -1 !逆からたどる
   LET A(N)=2015 !条件3
   CALL try(N-1,N,A,6,S)
NEXT N
END

EXTERNAL SUB try(P,N,A(),M,S())
FOR K=1 TO M !条件2
   LET T=(A(P+1)-1)/S(K)-1
   IF T>0 AND T=INT(T) THEN !これより、a[n]は正の整数
      IF P=1 THEN
         FOR i=1 TO M !条件1
            IF T=S(i) THEN EXIT FOR
         NEXT i
         IF i<=M THEN !結果を表示する
            PRINT STR$(T);
            FOR J=2 TO N
               LET T=T+A(J)
               PRINT "+";STR$(A(J));
            NEXT J
            PRINT "=";STR$(T)
         END IF
      ELSE
         LET A(P)=T
         CALL try(P-1,N,A,M,S) !次へ
      END IF
   END IF
NEXT K
END SUB


実行結果

1+35+181+2003+2005+2007+2009+2011+2013+2015=14280
29+151+153+2003+2005+2007+2009+2011+2013+2015=14396
29+391+393+395+397+399+401+2011+2013+2015=8444
29+31+33+35+397+399+401+2011+2013+2015=7364
5+31+33+35+397+399+401+2011+2013+2015=7340
13+71+73+75+77+79+401+2011+2013+2015=6828
1+3+117+2007+2009+2011+2013+2015=10176
1+35+397+399+401+2011+2013+2015=7272
1+3+5+79+401+2011+2013+2015=6528
5+79+401+2011+2013+2015=6524


 

分母の有理化

 投稿者:山中和義  投稿日:2015年 5月 5日(火)10時15分22秒
  問題
1/{1+2^(1/3)-4^(1/3)}を有理化せよ。
答え [3+2^(1/3)+2*4^(1/3)}/5

問題
1/{1+2^(1/4)-8^(1/4)}を有理化せよ。
答え {5+2^(1/4)+3*4^(1/4)+2*8^(1/4)}/7

問題
1/{1+64^(1/5)-4^(1/5)}を有理化せよ。
答え {25+9*4^(1/5)+29*16^(1/5)+4*64^(1/5)-5*256^(1/5)}/161

問題
1/{1+2*2^(1/3)+3*2^(2/3)}を有理化せよ。
答え {-11+16*2^(1/3)+2^(2/3)}/89


考察
x=a^(1/3)とおく。
1/(A+Bx+Cx^2)=P+Qx+Rx^2と表されるとすると、x^3=aに注意して、
1=(A+Bx+Cx^2)(P+Qx+Rx^2)=(AP+CaQ+BaR)+(BP+AQ+CaR)x+(CP+BQ+AR)x^2
xの恒等式として、左辺が1なので、
P,Q,Rの連立方程式
 AP+CaQ+BaR=1
 BP +AQ+CaR=0
 CP +BQ +AR=0
を解けばよい。
(終り)


考察
x=a^(1/3)とおく。x^3=aに注意して、
分母は、A+Bx+Cx^2 ← ①
そのx倍は、Ca+Ax+Bx^2 ← ②
そのx^2倍は、Ba+Cax+Ax^2 ← ③
P×①+Q×②+R×③=1となる有理数P,Q,Rを見つける。
  P×①+Q×②+R×③
=P(A+Bx+Cx^2)+Q(Ca+Ax+Bx^2)+R(Ba+Cax+Ax^2)
=(AP+CaQ+BaR)+(BP+AQ+CaR)x+(CP+BQ+AR)x^2
なので、
連立方程式
 AP+CaQ+BaR=1
 BP +AQ+CaR=0
 CP +BQ +AR=0
を解けばよい。
(終り)


考察
P,Q,Rの求め方
次の要領で、係数行列をつくる。
・1行目に分母、2行目以降は1列ずつ右へずらす。左下三角行列部分をa倍する。
 これは①,②,③の各係数と一致する。
      1   x   x^2
  1倍:  A   B   C
  x倍:  Ca  A   B
 x^2倍:  Ba  Ca  A

連立方程式(xA=bの形)の右辺は(1,0,…,0)なので、逆行列を求めて、1行目がP,Q,Rとなる。
(終り)


OPTION ARITHMETIC RATIONAL !有理数
!DATA 3,2 !x^3=2
!DATA 1,1,-1 !1+x-x^2
!DATA 4,2 !x^4=2
!DATA 1,1,0,-1 !1+x-x^3
DATA 5,4 !x^5=4
DATA 1,-1,0,1,0 !1+x^3-x
!DATA 5,2 !x^5=2
!DATA 1,2,-1,0,0 !1+2x-x^2
!DATA 3,2 !x^3=2
!DATA 1,2,3 !1+2x+3x^2
READ K,P !x^k=p
DIM M(K,K) !連立方程式 tM=n
FOR J=1 TO K !1行目 Σc[r]x^r
   READ M(1,J)
NEXT J
FOR i=2 TO K !2行目以降
   LET M(i,1)=M(i-1,K)*P !1列目 x^k=pを適用する
   FOR J=2 TO K !2列目以降 右へずらす
      LET M(i,J)=M(i-1,J-1)
   NEXT J
NEXT i
MAT PRINT M; !debug
DIM T(K,K) !連立方程式を解く
MAT T=INV(M)
MAT PRINT T; !連立方程式の右辺が(1,0,…,0)なので、解P,Q,Rは1行目
END



1/(1+√2-√3)=(2+√2+√6)/4 は2変数多項式になるので手強い。

略解
x=√2、y=√3とおく。
{1,x}×{1,y}={1,x,y,xy}を考える。

DATA 1,1,-1,0 !1倍 1+x-y
DATA 2,1,0,-1 !x倍 2+x-xy
DATA -3,0,1,1 !y倍 -3+y+xy
DATA 0,-3,2,1 !xy倍 -3x+2y+xy
DIM M(4,4)
MAT READ M
!!MAT PRINT M; !debug
DIM T(4,4)
MAT T=INV(M)
MAT PRINT T; !1行目 1,x,y,xyの係数
END

実行結果
1/2  1/4  0  1/4
1/2  1/2  1/2  0
0  3/4  1/2  1/4
3/2  0  1/2  1/2


 

試合結果の場合の数

 投稿者:山中和義  投稿日:2015年 5月 7日(木)10時08分1秒
  問題
A,Bが試合をする。1つの試合で、勝敗は決まるとする。
3試合勝ち越しとなった時点でそれ以降の試合はない。
11試合目でAが7勝4敗の成績で、Bに3試合勝ち越しとなるとき、
11試合の勝敗のパターンは何通りあるか。

答え
xy平面上で原点から出発する。
A,Bの勝ちに対して、
 Aが勝ったら、Yの正方向へ1つ進む
 Bが勝ったら、Xの正方向へ1つ進む
とすると、
格子点状の経路の問題に置き換えることができる。

数え上げると、


LET N=3 !n試合勝ち越し n≧2
LET K=4 !(n+k)勝k敗
SET WINDOW -1,N+K+1,-1,N+K+1
DRAW grid
SET LINE COLOR 4
PLOT LINES: 0,N; 0+50,N+50 !Aが勝ち越しで終わる
SET LINE COLOR 2
PLOT LINES: N,0; N+50,0+50 !Bが勝ち越しで終わる
SET LINE COLOR 1
DIM P(0 TO K) !点(x,y)を通過する場合の数
MAT P=ZER
FOR Y=0 TO (N+K)-1
   FOR X=0 TO K
      IF Y>X-N AND Y<X+N THEN !2直線の間なら
         IF X=0 THEN !左端
            LET P(X)=1
         ELSE
            LET P(X)=P(X)+P(X-1) !累計
         END IF
         DRAW disk WITH SCALE(0.1)*SHIFT(X,Y)
         PLOT TEXT ,AT X+0.1,Y+0.1: STR$(P(X))
      ELSE
         LET P(X)=0
      END IF
   NEXT X
NEXT Y
SET AREA COLOR 4 !最後にもう1勝する
DRAW disk WITH SCALE(0.1)*SHIFT(K,N+K)
PLOT TEXT ,AT K+0.1,(N+K)+0.1: STR$(P(K))
PRINT P(K);"通り"
END



別解
樹形図を描いて考える。
 1     3     5 試合目
 A─A─A *
     └B─A─A *
           └B
        └B─A
           └B
  └B─A
     └B
 B─A─A
     └B
  └B─A
     └B *

3試合目
 Aが3勝0敗でAが勝ち越す、Bが3勝0敗でBが勝ち越す がそれぞれ1通り
 3試合目で試合が終わらない、場合の数は6通り
5試合目
 たとえば、3試合がA-A-Bのとき、
  A-A-B-A-Aなら、Aが4勝1敗でAが勝ち越す
  A-A-B-A-B、A-A-B-B-A、A-A-B-B-Aの3通りは次へ続く
 となる。
 A-B-A、A-B-B、B-A-A、B-A-B、B-B-Aも同様である。
 Aが4勝1敗でAが勝ち越す、Bが4勝1敗でBが勝ち越す がそれぞれ3通り
 5試合目で試合が終わらない、場合の数は6×3=18通り
この構図は、7,9,11,…と続く。
よって、
7試合目で試合が終わらない、場合の数は18×3=54通り
9試合目で試合が終わらない、場合の数は54×3=162通り
11試合目で試合が終わるのは、162×1=162通り
Aが勝ち越すのはこの半分なので、81通り
(終り)


 

A地点からB地点へ

 投稿者:山中和義  投稿日:2015年 5月 8日(金)10時44分3秒
  左上がA地点、右下がB地点とする。

交差点の形状
 0       1       2       3
  ×   │   ×   │
 ×・  ×・  ─・  ─・
として、
各交差点での経路のマップをつくる。

例
 A─・─・
 │ │ │
 ・ ・─・
 │ │ │
 ・─・─B
の場合、
 0,2,2
 1,1,3
 1,3,3
となる。
交差点の個数は、縦3個、横3個となる。



DATA 8,5 !縦横の大きさ(交差点の数)
DATA 0,2,2,0,0 !マップ
DATA 1,3,3,2,0
DATA 1,3,3,3,2
DATA 0,1,3,3,3
DATA 0,0,1,3,3
DATA 0,0,0,1,3
DATA 0,0,0,0,1
DATA 0,0,0,0,1

READ M,N !縦横
SET WINDOW -1,MAX(M,N),-1,MAX(M,N)
DRAW grid
DIM P(0 TO N-1) !点(x,y)を通過する場合の数
MAT P=ZER
FOR Y=M-1 TO 0 STEP -1 !左上から右下へ
   FOR X=0 TO N-1
      READ R !交差点の形状
      SELECT CASE R
      CASE 0
         IF X=0 AND Y=M-1 THEN !始点Aなら
            LET P(X)=1
         ELSE
            LET P(X)=0
         END IF
      CASE 1
         PLOT LINES: X,Y+1; X,Y
      CASE 2
         LET P(X)=P(X-1)
         PLOT LINES: X-1,Y; X,Y
      CASE 3
         IF X=0 THEN !左端
            IF Y=M-1 THEN LET P(X)=1 !始点Aとつながっている
         ELSE
            LET P(X)=P(X)+P(X-1) !累計 ※パスカルの三角形
         END IF
         PLOT LINES: X,Y+1; X,Y !縦の経路
         PLOT LINES: X-1,Y; X,Y !横の経路
      END SELECT
      IF P(X)>0 OR R>0 THEN
         DRAW disk WITH SCALE(0.1)*SHIFT(X,Y)
         PLOT TEXT ,AT X+0.1,Y+0.1: STR$(P(X))
      END IF
   NEXT X
NEXT Y
PRINT P(N-1);"通り"
END



参考サイト 最短経路問題 http://www004.upp.so-net.ne.jp/s_honma/urawaza/route.htm

DATA 5,6 !例1
DATA 0,2,2,2,0,0
DATA 1,3,3,3,0,0
DATA 1,3,3,3,2,2
DATA 1,3,3,3,3,3
DATA 0,0,1,3,3,3



DATA 5,6 !例2
DATA 0,2,2,2,2,2
DATA 1,3,3,3,3,3
DATA 1,3,0,0,1,3
DATA 1,3,2,2,3,3
DATA 1,3,3,3,3,3



DATA 5,5 !例3
DATA 0,2,0,0,0
DATA 1,3,2,0,0
DATA 1,3,3,2,0
DATA 1,3,3,3,2
DATA 1,3,3,3,3



 

一筆書き

 投稿者:山中和義  投稿日:2015年 5月10日(日)14時04分32秒
 
!一筆書き

PUBLIC NUMERIC C !場合の数
LET C=0

!  1 ─ 2 ─ 3
! / \ / \ /
!4 ─ 5 ─ 6
DATA 9,6 !辺(経路)、点(交差点)の個数
!    1 2 3 4 5 6
DATA 0,1,0,1,1,0 !1
DATA 1,0,1,0,1,1 !2
DATA 0,1,0,0,0,1 !3
DATA 1,0,0,0,1,0 !4
DATA 1,1,0,1,0,1 !5
DATA 0,1,1,0,1,0 !6


READ K,N
DIM V(0 TO K) !経路
DIM M(N,N) !隣接行列(無向グラフ)
MAT READ M
FOR J=1 TO N !始点
   CALL visit(0,J,V, K,N,M)
NEXT J
IF C=0 THEN PRINT "解なし"
END

EXTERNAL SUB visit(P,R,V(), K,N,M(,)) !経路をたどる
LET V(P)=R
IF P=K THEN !結果を表示する
   LET C=C+1
   PRINT "No.";C
   MAT PRINT V;
ELSE
   FOR J=1 TO N !進行可能な交差点を選ぶ
      IF M(R,J)<>0 THEN
         LET M(R,J)=M(R,J)-1 !切り離す
         LET M(J,R)=M(J,R)-1
         CALL visit(P+1,J,V, K,N,M) !次の交差点へ
         LET M(R,J)=M(R,J)+1 !戻す
         LET M(J,R)=M(J,R)+1
      END IF
   NEXT J
END IF
END SUB




差し替え

!ケニスバーグの橋
!1
!|| \
!2 ─ 3
!|| /
!4
DATA 7,4 !辺(経路)、点(交差点)の個数
!    1 2 3 4
DATA 0,2,1,0 !1
DATA 2,0,1,2 !2
DATA 1,1,0,1 !3
DATA 0,2,1,0 !4



!ペントミノ F型
!1─2─3
!│ │ │
!4─5─6─7
!  │ │ │
!  8─9─10
!  │ │
!  11─12
DATA 16,12 !辺(経路)、点(交差点)の個数
!    1 2 3 4 5 6 7 8 9101112
DATA 0,1,0,1,0,0,0,0,0,0,0,0 !1
DATA 1,0,1,0,1,0,0,0,0,0,0,0 !2
DATA 0,1,0,0,0,1,0,0,0,0,0,0 !3
DATA 1,0,0,0,1,0,0,0,0,0,0,0 !4
DATA 0,1,0,1,0,1,0,1,0,0,0,0 !5
DATA 0,0,1,0,1,0,1,0,1,0,0,0 !6
DATA 0,0,0,0,0,1,0,0,0,1,0,0 !7
DATA 0,0,0,0,1,0,0,0,1,0,1,0 !8
DATA 0,0,0,0,0,1,0,1,0,1,0,1 !9
DATA 0,0,0,0,0,0,1,0,1,0,0,0 !10
DATA 0,0,0,0,0,0,0,1,0,0,0,1 !11
DATA 0,0,0,0,0,0,0,0,1,0,1,0 !12




 

2重根号

 投稿者:山中和義  投稿日:2015年 5月12日(火)19時17分49秒
  問題
次の式の2重根号をはずして簡単にせよ。
 √(A±K√B)
例
√(5±2√6)の2重根号をはずして簡単にせよ。

答え
α>βとして、√{(α+β)±2√(αβ)}=√{(√α±√β)^2}=√α±√β
α+β=A、αβ=K^2B/4として、、α,βはt^2-At+K^2B/4=0の実数解である。
(終り)

答え
α=√(A+K√B)、β=√(A-K√B)とおくと、α^2+β^2=2A、(αβ)^2=A^2-K^2B(=D^2とする)
恒等式(α±β)^2=α^2+β^2±2αβより、(α±β)^2=2A±2D ∴α±β=√(2A±2D)
2α=(α+β)+(α-β)より、α={√(2A+2D)+√(2A-2D)}/2 ∴α=√{(A+D)/2}+√{(A-D)/2}
(終り)

答え
α=√(A+K√B)、β=√(A-K√B)とおくと、α^2+β^2=2A、αβ=√(A^2-K^2B)
恒等式(α+β)^2=α^2+β^2+2αβより、α+βの2次方程式を得る。
d=√(A^2-K^2B)とおいて、(α+β)^2=(α^2+β^2)+2αβ=2(A+d)から、α+β=√{2(A+d)}
これより、α,βを2つの解にもつ2次方程式は、解と係数の関係より、t^2-√{2(A+d)}t+d=0となる。
解の公式より、t=(√{2(A+d)}±√{2(A+d)-4d})/2=√{(A+d)/2}±√{(A-d)/2}
(終わり)

答え
x=√(A+K√B)とおく。
x^2-A=K√B
(x^2-A)^2=(K√B)^2
x^4-2Ax^2+A^2-K^2B=0 ← x^4+px^2+q=0の形

この4次方程式を、Ferrariの方法で解いてみると、
x^4+2λx^2+λ^2=2Ax^2+K^2B-A^2 +2λx^2+λ^2
(x^2+λ)^2=2(λ+A)x^2+λ^2+K^2B-A^2
と式変形するとき、右辺が完全平方式になればよい。
判別式(こを分解方程式という)D=0^2-4*2(λ+A)(λ^2+K^2B-A^2)=0より、λ=-A,±√A^2-K^2B)

λ=±√(A^2-K^2B)のとき、
(x^2+λ)^2={√(2(λ+A))x}^2
x^2+λ=±√(2(λ+A))x
x^2干√(2(λ+A))x+2(λ+A)/4=-λ+2(λ+A)/4
{x干√(2(λ+A))/2}^2=(A-λ)/2
x干√((λ+A)/2)=±√((A-λ)/2)
x=±√((A+λ)/2)±√((A-λ)/2)
このとき、λすなわちA^2-K^2Bが平方数なら、2重根号がはずれている。
(終わり)


参考サイト
 私的数学塾 http://www004.upp.so-net.ne.jp/s_honma/index.htm 内
  私の備忘録
   数学・・・代数学分野
    2重根号 http://www004.upp.so-net.ne.jp/s_honma/rootjpg/doublerootsign.htm



OPTION ARITHMETIC RATIONAL

LET A=5 !√(5±2√6)
LET K=2
LET B=6

!LET A=2 !√((6+√35)/3)=(√42+√30)/6
!LET K=1/3
!LET B=35

!LET A=7 !7-4√3=7-2√12
!LET K=-4
!LET B=3

!LET A=-5 !√(-5-12i)=√(-5-12√(-1))=±(2-3i)
!LET K=-12
!LET B=-1

!LET A=0 !√i=(1+i)/√2
!LET K=1
!LET B=-1

LET DD=A^2-K^2*B !判別式
PRINT DD
LET P=NUMER(DD) !分子
LET Q=DENOM(DD) !分母
LET D=INTSQR(P)/INTSQR(Q)

IF DD>=0 AND D*D=DD THEN !平方数なら
   PRINT "√("; (A+D)/2; ")";
   IF K>=0 THEN PRINT " + "; ELSE PRINT " - ";
   PRINT "√("; (A-D)/2; ")"
ELSE
   PRINT "はずせない。"
   STOP
END IF

END


実行結果

1
√( 3 ) + √( 2 )


 

組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月14日(木)10時10分41秒
  問題
4つの相異なる4桁の正整数がある。
千の位は4つとも全て等しく、一の位も4つとも全て等しい。
また、このうち3つの数は、4つの数の和の約数になっている。
このような4つの数を求めよ。
答え
1080, 1170, 1350, 1800


FOR X=1 TO 9 !千の位 条件1
   FOR Y=0 TO 9 !一の位
      FOR A=0 TO 99-3 !百と十の位
         LET N1=X*1000+A*10+Y !xaay
         FOR B=A+1 TO 99-2
            LET N2=X*1000+B*10+Y !xbby
            FOR C=B+1 TO 99-1
               LET N3=X*1000+C*10+Y !xccy
               FOR D=C+1 TO 99
                  LET N4=X*1000+D*10+Y !xddy
                  LET S=N1+N2+N3+N4

                  IF MOD(S,N1)=0 THEN !条件2
                     IF MOD(S,N2)=0 THEN
                        IF MOD(S,N3)=0 THEN
                           PRINT N1;N2;N3;N4; "タイプ1"
                        ELSE
                           IF MOD(S,N4)=0 THEN PRINT N1;N2;N3;N4; "タイプ2"
                        END IF
                     ELSE
                        IF MOD(S,N3)=0 AND MOD(S,N4)=0 THEN PRINT N1;N2;N3;N4; "タイプ3"
                     END IF
                  ELSE
                     IF MOD(S,N2)=0 AND MOD(S,N3)=0 AND MOD(S,N4)=0 THEN PRINT N1;N2;N3;N4; "タイプ4"
                  END IF

               NEXT D
            NEXT C
         NEXT B
      NEXT A
   NEXT Y
NEXT X
END




問題
A={1,2,3,4,5,6,7,8,9}とするとき、次の条件を満たすAの部分集合Sを求めよ。
(1) Sの要素は5個である。
(2) Sの相異なる2つの要素を取り出して和を作ると、その一位の数が1から9までの数がすべて現れる。
答え
(1,3,4,5,8), (1,5,6,7,8), (2,3,4,5,9), (2,5,6,7,9)


DIM F(0 TO 9) !一の位の数字

DIM S(5) !集合S
FOR A=1 TO 9 !条件1 C(9,5)=126通り
   LET S(1)=A
   FOR B=A+1 TO 9-3
      LET S(2)=B
      FOR C=B+1 TO 9-2
         LET S(3)=C
         FOR D=C+1 TO 9-1
            LET S(4)=D
            FOR E=D+1 TO 9
               LET S(5)=E

               MAT F=ZER !条件2 C(5,2)=10通り
               FOR X=1 TO 5-1
                  FOR Y=X+1 TO 5
                     LET T=MOD(S(X)+S(Y),10)
                     LET F(T)=1
                  NEXT Y
               NEXT X
               FOR i=1 TO 9
                  IF F(i)=0 THEN EXIT FOR
               NEXT i
               IF F(0)=0 AND i>9 THEN MAT PRINT S;

            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

END


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月16日(土)19時11分46秒
  > No.3691[元記事へ]

問題 2008年灘中学入試
1個66円のかきと1個35円のみかんを、合わせて3890円分買いました。
かきとみかんはそれぞれ何個ずつ買いましたか。

答え
かき 25個、みかん 64個



その1 (つる+かめ)算 - 両方の個数を仮定する

答え
35の倍数の一の位は、35は5の倍数なので、0または5である。
66は偶数なので、66の倍数は一の位が奇数5にはならない。
これより、3890の一の位は0なので、35の倍数の一の位は0でないといけない。
よって、yは0,2,4,6,8,…である。
同様に、
これより、3890の一の位は0なので、66の倍数の一の位は0でないといけない。
よって、xは0,5,10,15,20,…である。
(終り)

答え
かきをx個、みかんをy個買ったとする。
66x+35y=3890より、66x=3890-35y=5(778-7y)、35y=3890-66x=2(1945-33x)
xは5の倍数、yは2の倍数
(終り)


LET A=66
LET B=35
LET C=3890
FOR X=0 TO C/A STEP 5
   FOR Y=0 TO C/B STEP 2
      LET T=A*X+B*Y
      IF T>=C THEN EXIT FOR
   NEXT Y
   IF T=C THEN PRINT X;Y
NEXT X
END




その2 つる算(かめ算) - 一方の個数を仮定すると、他方は残りである

答え
かきをx個、みかんをy個買ったとすると、3890-66x=35y
(3890-66x)は、35=5×7なので、5の倍数となる。これより、一の位は0または5となる。
66は偶数なので、66の倍数は一の位が奇数5にはならない。
0となるのは、0,5,10,15,20,…と5の倍数の数をかけた場合である。
このとき、(3890-66x)が7の倍数となることを確認する。
(終り)


LET A=66
LET B=35
LET C=3890
FOR X=0 TO C/A STEP 5
   LET T=(C-A*X)/5
   IF MOD(T,7)=0 THEN PRINT X;T/7
NEXT X
END




その3 つるかめ算

66が偶数、35が奇数、3890が偶数なので、みかんは偶数個である。
これより、66x+70Y=3890と表される。
すべて安い方(かき)を買ったとすると、3890÷66=58あまり62
すべて高い方(みかん)を買ったとすると、3890÷70=55あまり40
なので、個数の合計は56,57,58個となる。
70-66=4円でかき1個をみかん2個に取り換えられる。
56個の場合、3890=66×56+194より、194÷4=48.5 取り替えられないので、不適である。
57個の場合、3890=66×57+128より、128÷4=32 みかんは32×2=64個 かきは57-32=25個
58個の場合、3890=66×58+62より、62÷4=15.5 取り替えられないので、不適である。


LET A=66
LET B=35
LET C=3890
LET M=CEIL(A/B)*B-A
PRINT M
LET P=MAX(A,2*B)
LET Q=MIN(A,2*B)
FOR T=CEIL(C/P) TO INT(C/Q) !置き換えていく
   LET R=C-Q*T
   !!!PRINT T;R
   IF MOD(R,M)=0 THEN !約数なら
      LET K=R/M
      PRINT T-K; 2*K !x,Y
   END IF
NEXT T
END


 

たすき掛けの因数分解

 投稿者:山中和義  投稿日:2015年 5月18日(月)10時12分16秒
  !2次式の因数分解 - たすき掛け

考察
a,b,cは互いに素な整数とする。
ax^2+bx+c=(Px+Q)(Sx+T)=PSx^2+(PT+QS)x+QT
PT+QS=b、(PT)(QS)=(PS)(QT)=acなので、PT,QSを2つの解にもつ2次方程式は、t^2-bt+ac=0
2解をα,βとして、
 P  Q  β=QS
 S  T  α=PT
 a  c
より、
P=gcd(a,α)として、S=a/P、T=α/P、Q=c/T
(終り)


OPTION ARITHMETIC RATIONAL

DATA 6,7,-3 !6x^2+7x-3=(2x+3)(3x-1)
!DATA 6,7,-5 !6x^2+7x-5=(3x+5)(2x-1)
!DATA 4,-23,15 !(4x-3)(x-5)
!DATA 3,10,3 !(x+3)(3x+1)
!DATA 12,-1,-6 !(3x+2)(4x-3)
!DATA 3,-8,4 !(3x-2)(x-2)
!DATA 3,5,7 !不可

READ A,B,C !係数を読み込む

LET D=B^2-4*A*C !判別式
PRINT D !debug
IF D>=0 AND INTSQR(D)^2=D THEN !平方数なら
   LET X1=(B+SQR(D))/2 !解の公式、連立方程式を解く
   LET X2=(B-SQR(D))/2
   PRINT X1;X2 !debug

   LET P=SGN(A)*GCD(A,X1) !(Px+Q)(Sx+T)
   LET S=A/P
   LET T=X1/P
   LET Q=C/T
   PRINT P;Q; S;T
ELSE
   PRINT "因数分解できません。"
END IF

END




その2 解の公式
ax^2+bx+c=0の2つの解をα,βとすると、ax^2+bx+c=a(x-α)(x-β)=(2ax-2aα)(2ax-2aβ)/(4a)



OPTION ARITHMETIC RATIONAL

DATA 6,7,-3 !6x^2+7x-3=(2x+3)(3x-1)
!DATA 6,7,-5 !6x^2+7x-5=(3x+5)(2x-1)
!DATA 4,-23,15 !(4x-3)(x-5)
!DATA 3,10,3 !(x+3)(3x+1)
!DATA 12,-1,-6 !(3x+2)(4x-3)
!DATA 3,-8,4 !(3x-2)(x-2)
!DATA 3,5,7 !不可

READ A,B,C !係数を読み込む

LET D=B^2-4*A*C !判別式
PRINT D !debug
IF D>=0 AND INTSQR(D)^2=D THEN !平方数なら
   LET X1=-B+SQR(D) !2つの解(2a倍)
   LET X2=-B-SQR(D)
   PRINT X1;X2 !debug

   LET G=SGN(A)*GCD(2*A,X1) !Px+Q
   PRINT 2*A/G; -X1/G
   LET G=GCD(2*A,X2) !Sx+T
   PRINT 2*A/G; -X2/G
ELSE
   PRINT "因数分解できません。"
END IF

END


 

線対称、点対称の図形

 投稿者:山中和義  投稿日:2015年 5月18日(月)10時23分17秒
  問題 点つなぎパズル
与えられた座標を順につないでできる図形が
・線対称なのか
・点対称なのか
を出力するプログラムを作成してください。


考察
線対称
 2点(選び方はC(n,2)通り)を結ぶ線分の垂直二等分線を対称軸として、
 各点を線対称変換させて、重複することなく元の点に重なる。
点対称
 各点を重心を中心に180°回転させて、重複することなく元の点に重なる。
(終り)



SET WINDOW -1,6,-1,6
DRAW grid

!DATA 4 !点の個数
!DATA 1,5, 1,3, 4,0, 4,2 !座標(x,y) 点対称
DATA 4
DATA 0,0, 0,2, 2,2, 2,0 !線対称、点対称
!DATA 5
!DATA 0,2, 1,0, 3,0, 4,2, 2,3 !線対称
!DATA 6
!DATA 0,0, 3,0, 3,1, 5,3, 2,3, 2,2 !点対称
!DATA 6
!DATA 0,1, 1,0, 4,0, 2,1, 3,2, 2,3 !error

!DATA 19 !花
!DATA 3,0, 2,1, 0,1, 1,0, 5,0, 6,1, 4,1, 3,0, 3,3, 4,3
!DATA 5,4, 5,6, 4,5, 3,6, 2,5, 1,6, 1,4, 2,3, 3,3

READ N
DIM X(N),Y(N)
FOR i=1 TO N !点の座標を読み込む
   READ X(i),Y(i)
   PLOT TEXT ,AT X(i)+0.1,Y(i)+0.1: STR$(i)
   DRAW disk WITH SCALE(0.1)*SHIFT(X(i),Y(i))
NEXT i
FOR i=1 TO N !点をつなぐ
   PLOT LINES: X(i),Y(i);
NEXT i
PLOT LINES: X(1),Y(1) !一筆書き


!線対称

FOR P=1 TO N-1 !対称軸となる2点
   FOR Q=P+1 TO N
      CALL gcP2LINE(X(P),Y(P),X(Q),Y(Q), A,B,C) !垂直二等分線
      SET AREA COLOR 2
      FOR i=1 TO N
         CALL gcSYMMETRY2(A,B,C,X(i),Y(i), XX,YY) !線対称
         FOR K=1 TO N !重なるかどうか確認する
            IF ABS(XX-X(K))<1E-10 AND ABS(YY-Y(K))<1E-10 THEN EXIT FOR
         NEXT K
         IF K>N THEN EXIT FOR !重ならない

         !!PLOT TEXT ,AT XX+0.1,YY-0.1: STR$(i)
         DRAW disk WITH SCALE(0.1)*SHIFT(XX,YY)
      NEXT i
      IF i>N THEN !すべての点が重なるなら
         SET LINE COLOR 4
         CALL gcDRAWLINE(A,B,C)
         PRINT "線対称な図形です。"; P;Q
      END IF
   NEXT Q
NEXT P


!点対称

LET GX=0 !重心を求める
LET GY=0
FOR i=1 TO N
   LET GX=GX+X(i)
   LET GY=GY+Y(i)
NEXT i
LET GX=GX/N
LET GY=GY/N
SET AREA COLOR 4
PLOT TEXT ,AT GX+0.1,GY+0.1: "G"
DRAW disk WITH SCALE(0.1)*SHIFT(GX,GY)

SET AREA COLOR 2
FOR i=1 TO N !重心で180°回転する
   CALL gcSYMMETRY(X(i),Y(i),GX,GY, XX,YY)

   FOR K=1 TO N !重なるかどうか確認する
      IF ABS(XX-X(K))<1E-10 AND ABS(YY-Y(K))<1E-10 THEN EXIT FOR
   NEXT K
   IF K>N THEN EXIT FOR !重ならない

   PLOT TEXT ,AT XX+0.1,YY-0.1: STR$(i)
   DRAW disk WITH SCALE(0.1)*SHIFT(XX,YY)
NEXT i
IF i>N THEN PRINT "点対称な図形です。"

END


!FV.LIB 抜粋

EXTERNAL SUB gcDRAWLINE(L,M,N) !直線Lx+My+N=0を描く
IF (L=0 AND M=0) THEN
   PRINT "L=M=0なので、直線が成立しません。"; L;M;N
ELSE
   ASK WINDOW x1,x2,y1,y2
   IF ABS(L)>ABS(M) THEN !y=±xの傾きより大きいなら ※y軸に平行な直線を含む
      PLOT LINES: -(M*y1+N)/L,y1; -(M*y2+N)/L,y2
   ELSE
      PLOT LINES: x1,-(L*x1+N)/M; x2,-(L*x2+N)/M
   END IF
END IF
END SUB

!点A(x1,y1), B(x2,y2)を結ぶ線分ABの垂直二等分線
! 線分ABの中点を通り、線分ABの傾きに垂直な直線 Y-(y1+y2)/2=-(x2-x1)/(y2-y1)(X-(x1+x2)/2) より
EXTERNAL SUB gcP2LINE(x1,y1,x2,y2, L,M,N)
IF (x1=x2 AND y1=y2) THEN
   PRINT "2点は同一点なので、線分が成立しません。"; x1;y1;x2;y2
ELSE
   LET L=x2-x1
   LET M=y2-y1
   LET N=-(L*(x1+x2)+M*(y1+y2))/2
END IF
END SUB

EXTERNAL SUB gcSYMMETRY(X,Y,PX,PY, QX,QY) !点Aに対する点対称の点
LET QX=2*PX-X !点(X,Y)と対称点(QX,QY)の中点が点(PX,PY)なので、PX=(X+QX)/2
LET QY=2*PY-Y
END SUB

!線対称(Lx+My+N=0)の点
! 点A(x1,y1)、対称点A'(x2,y2)とする。
! 点A,A'の中点は直線上の点なので、L((x1+x2)/2)+M((y1+y2)/2)+N=0 ∴Lx2+My2=-(Lx1+My1+2N) ←式1
! また、直線AA'と直線とは直交するので、傾き((y2-y1)/(x2-x1))(-L/M)=-1 ∴Mx2-Ly2=Mx1-Ly1 ←式2
! L*式1+M*式2より、(L^2+M^2)x2=-L(Lx1+My1+2N) +M(Mx1-Ly1)=(L^2+M^2)x1-2L(Lx1+My1+N)
! M*式1-L*式2より、(L^2+M^2)y2=-M(Lx1+My1+2N) -L(Mx1-Ly1)=(L^2+M^2)y1-2M(Lx1+My1+N)
EXTERNAL SUB gcSYMMETRY2(L,M,N,PX,PY, QX,QY) !線対称(Lx+My+N=0)の点
LET m3=L*L+M*M
IF m3=0 THEN
   PRINT "L=M=0なので、直線が成立しません。"; L;M;N
ELSE
   LET t=(L*PX+M*PY+N)/m3
   LET QX=PX-2*L*t
   LET QY=PY-2*M*t
END IF
END SUB



 

二進数の1の個数

 投稿者:山中和義  投稿日:2015年 5月19日(火)10時13分1秒
  問題
十進数の整数nに対し、1からnの整数を二進数で表したときの各々の1の個数の和をF(n)と定義します。
例えば、F(3)=4です。
十進数の1,2,3をそれぞれ二進数で表すと、1,10,11で、1が全部で4回現れるからです。
同様に、F(13)=25となることが確かめられます。

F(10^3)の値を(十進数で)求めて下さい。
F(10^10)の値を(十進数で)求めて下さい。


考察
n=13のとき、
  0: 0000
  1: 0001
  2: 0010
  3: 0011
  4: 0100
  5: 0101
  6: 0110
  7: 0111
  8: 1000
  9: 1001
 10: 1010
 11: 1011
 12: 1100
 13: 1101

0ビット目について、
 0,1の繰り返しなので、Q=[(n+1)/2^0]として、
 [Q/2]×2^0 と ( Qが奇数のときmod(n+1,2^0)=0、偶数のとき0 )
1ビット目について、
 0,0,1,1の繰り返しなので、Q=[(n+1)/2^1]として、
 [Q/2]×2^1 と ( Qが奇数のときmod(n+1,2^1)、偶数のとき0 )
2ビット目について、
 0,0,0,0,1,1,1,1の繰り返しなので、Q=[(n+1)/2^2]として、
 [Q/2]×2^2 と ( Qが奇数のときmod(n+1,2^2)、偶数のとき0 )
3ビット目について、
 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1の繰り返しなので、Q=[(n+1)/2^3]として、
 [Q/2]×2^3 と ( Qが奇数のときmod(n+1,2^3)、偶数のとき0 )
(終り)



LET N=13 !10^3 !F(n)

LET S=0 !1の個数

LET B=2^0 !kビット
DO WHILE B<=N
   LET Q=INT((N+1)/B) !2^k個ずつの0と1
   LET S=S+INT(Q/2)*B
   IF MOD(Q,2)=1 THEN LET S=S+MOD(N+1,B)
   LET B=B*2 !次へ
LOOP

PRINT S

END


 

Re: 二進数の1の個数

 投稿者:Takao kosugi  投稿日:2015年 5月19日(火)14時22分57秒
  > No.3695[元記事へ]

山中和義さんへのお返事です。

> 問題
> 十進数の整数nに対し、1からnの整数を二進数で表したときの各々の1の個数の和をF(n)と定義します。
> 例えば、F(3)=4です。
> 十進数の1,2,3をそれぞれ二進数で表すと、1,10,11で、1が全部で4回現れるからです。
> 同様に、F(13)=25となることが確かめられます。
>
> F(10^3)の値を(十進数で)求めて下さい。
> F(10^10)の値を(十進数で)求めて下さい。
>

十進BASICのpdfマニュアルを読んでやってみました。
※下記のnは、階乗表示を計算してからの形で入力しないとプログラムに、syntax errorが出ちゃいます。( -.-) =зフウー
F(n)の値は、実行されるプログラムの実行後の一番下に出ます。


INPUT PROMPT "題意のnを階乗の形でない形でinputせよ":n
LET s=0
DO
   LET q=INT(n/2)
   LET r=MOD(n,2)
   PRINT "二進数(下から読む)";r;
   LET s=s+r
   PRINT s
   IF q=0 THEN STOP
   LET n=q
LOOP
END
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月20日(水)09時37分57秒
  > No.3692[元記事へ]

問題 2008年 名古屋大学(文系)前期
3x+2y≦2008を満たす0以上の整数の組(x,y)の個数を求めよ。


その1
x=0,1,2,3,4,…として、それぞれyの個数を求める。


LET A=3
LET B=2
LET C=2008

LET S=0
FOR X=0 TO C/A
   LET Y=INT((C-A*X)/B)+1
   PRINT X;Y
   LET S=S+Y
NEXT X
PRINT S;"通り"

END




その2
上記で算出したyの値を、数列として考える。
差は、2,1,2,1,2,…となって、等差数列とはならないが、次のように考えるとうまくいく。
この規則性に気づくことで、小学生向けの問題となる。

偶数番目
 1005,1002,999,…,9,6,3
奇数番目
 1003,1000,997,…,7,4,1
それぞれ公差3、項数(669+1)/2=335の等差数列である。
よって、((1005+3)+(1003+1))×335÷2=337010
(終り)


DEF F(X)=INT((C-A*X)/B)+1 !x=Xのとき、yの個数

LET A=3
LET B=2
LET C=2008

LET S=0

LET K=CEIL(C/A) !K=B*Q+R
LET Q=INT(K/B)
LET R=MOD(K,B)
PRINT K;Q;R

FOR i=0 TO B-1 !B種類、共通な項数Qの部分
   LET W=F(i)
   PRINT W
   LET S=S+(2*W+(Q-1)*(-A))*Q/2  !公差d、p項の和は、{a[1]+(a[1]+(p-1)d)}p/2
NEXT i

FOR i=0 TO R !残り
   LET W=F(B*Q+i)
   PRINT W
   LET S=S+W
NEXT i

PRINT S;"通り"

END


 

格子状経路

 投稿者:山中和義  投稿日:2015年 5月20日(水)10時31分42秒
  問題
町が碁盤の目の様な道路になっており、座標平面上の格子点を動くように散歩するものとする。
その人の座標が(a,b)で
 a+b≡0 mod 4のとき、右へ1進む。
 a+b≡1 mod 4のとき、上へ1進む。
 a+b≡2 mod 4のとき、左へ1進む。
 a+b≡3 mod 4のとき、下へ1進む。
と進路をとって進むものとする。
このとき、ある格子点Pから散歩を始めた人が、
進路変更を9回繰り返したとき、格子点Q(0,10)に到着していたという。
さて出発点の格子点Pとして考えられるのはどこですか?

答え (5,5)


SET WINDOW -1,12,-1,12
DRAW grid
FOR A=-1 TO 12 !(a,b)
   FOR B=-1 TO 12
      DRAW AR WITH ROTATE((A+B)*(2*PI/4))*SHIFT(A,B)
   NEXT B
NEXT A
END
EXTERNAL PICTURE AR !矢印を描く
PLOT LINES: 0,0; 0.5,0 !→
PLOT LINES: 0.5,0; 0.3,0.1
PLOT LINES: 0.5,0; 0.3,-0.1
END PICTURE

 

Re: 格子状経路

 投稿者:GAI  投稿日:2015年 5月20日(水)20時50分1秒
  > No.3698[元記事へ]

山中和義さんへのお返事です。

>
> 答え (5,5)
>

(3,5)もOKです。
思考してた経緯が、プログラムで見れるのがとっても参考にできます。
これが自由にできるようになれば、あのめんどくさい作業が一瞬にできるのにと痛感します。
 

Re: 格子状経路

 投稿者:しばっち  投稿日:2015年 5月21日(木)23時50分4秒
  > No.3698[元記事へ]

山中和義さんへのお返事です。

FOR YS=1 TO 10
   FOR XS=1 TO 10
      LET X=XS
      LET Y=YS
      FOR I=0 TO 9
         SELECT CASE MOD(X+Y,4)
         CASE 0
            LET X=X+1
         CASE 1
            LET Y=Y+1
         CASE 2
            LET X=X-1
         CASE 3
            LET Y=Y-1
         END SELECT
      NEXT I
      IF X=0 AND Y=10 THEN PRINT XS;YS
      !' PRINT XS;YS;X;Y
   NEXT XS
NEXT YS
END
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月23日(土)09時25分4秒
  > No.3697[元記事へ]

おつりの硬貨の枚数を減らす


たかしさんは、お姉さんと買い物に行きました。品物の代金は630円でした。
たかしさんは、おつりの硬貨の枚数を少なくするために、
お金の出し方をくふうして、1000円札に30円を加えて出そうとしました。
すると、お姉さんが
 「1030円に、あと100円加えたら、おつりの硬貨の枚数がもっと少なくなるよ。」
と言いました。



LET A=630
PRINT "請求された金額=";A;"円"
PRINT

!ケース1
FOR K=1 TO 4 !1234のとき、1235,1250,1500,5000と払う
   LET W=10^K
   LET B=CEIL(A/W)*W-W/2
   IF B>=A THEN
      PRINT "支払った金額=";B;"円"
      PRINT "おつり=";B-A;"円"
      PRINT F(B)-F(B-A);"枚減る"
   END IF
   IF W>A THEN EXIT FOR !払いすぎた
NEXT K
PRINT


!ケース2
FOR K=1 TO 4 !1234のとき、1240,1300,2000,10000と払う
   LET W=10^K
   LET B=CEIL(A/W)*W
   PRINT "支払った金額=";B;"円"
   PRINT "おつり=";B-A;"円"
   PRINT F(B)-F(B-A);"枚減る"
   IF W>A THEN EXIT FOR !払いすぎた
NEXT K
PRINT


!ケース3
DATA 5,50,500,5000 !5,50,500,5000円がおつりになるようにする
DIM Q(4)
MAT READ Q
FOR P=0 TO 2^4-1 !2^4=16通り
   LET T=P
   LET B=0
   FOR K=1 TO 4
      IF MOD(T,2)=1 THEN LET B=B+Q(K)
      LET T=INT(T/2)
   NEXT K

   IF B>A THEN EXIT FOR !払いすぎた

   PRINT "支払った金額=";A+B;"円"
   PRINT "おつり=";B;"円"
   PRINT F(A+B)-F(B);"枚減る"
NEXT P

END


EXTERNAL FUNCTION F(N) !金額nに対する硬貨の枚数を返す
DATA 10000,5000,1000,500,100,50,10,5,1 !金種 ※大きい順
LET C=0
DO WHILE N>0
   READ P
   LET C=C+INT(N/P)
   LET N=MOD(N,P) !次へ
LOOP
LET F=C
END FUNCTION



実行結果

請求された金額= 630 円

支払った金額= 650 円
おつり= 20 円
1 枚減る

支払った金額= 630 円
おつり= 0 円
5 枚減る
支払った金額= 700 円
おつり= 70 円
0 枚減る
支払った金額= 1000 円
おつり= 370 円
-5 枚減る

支払った金額= 630 円
おつり= 0 円
5 枚減る
支払った金額= 635 円
おつり= 5 円
5 枚減る
支払った金額= 680 円
おつり= 50 円
5 枚減る
支払った金額= 685 円
おつり= 55 円
5 枚減る
支払った金額= 1130 円
おつり= 500 円
4 枚減る
支払った金額= 1135 円
おつり= 505 円
4 枚減る
支払った金額= 1180 円
おつり= 550 円
4 枚減る
支払った金額= 1185 円
おつり= 555 円


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月25日(月)10時54分46秒
  > No.3701[元記事へ]

電線にすずめが3羽とまってた(^^♪


問題
つがいのすずめがn組います。2n匹が電線に並びました。
オスはやきもち焼きで、つがいのメスが他のオスと(隣に自分がいても)隣り合うのを嫌います。
そうならないような並べ方は何通りありますか。
例
大文字をオス、小文字をメスとして、つがいをAとa、Bとbとする。
ABba、AabBは題意を満たすが、AaBb、AbBaは不適となる。

2組Aa,Bbの場合
 ABba、AabB、abBA、aABb
 BAab、BbaA、baAB、bBAa
の8通り

参考サイト http://oeis.org/A096121



LET N=3 !つがいの数

DIM A(N),B(N) !オス、メス
MAT A=CON !A,B,C,…
MAT B=CON !a,b,c,…

PUBLIC NUMERIC C !場合の数
LET C=0

DIM P(2*N) !並び

LET P(1)=1 !オス(A)から始まる ※オスは正、メスは負で表す
LET A(1)=0
CALL try(2,N,P,A,B)

PRINT C;"通り"
PRINT 2*N*C;"通り" !Aとa、n組

END

EXTERNAL SUB try(K,N,P(),A(),B()) !バックトラック法で検索する
IF K>2*N THEN !すべて並んだ
   LET C=C+1
   MAT PRINT P;

ELSE
   LET W=P(K-1) !1つ前

   IF W>0 THEN !オス(A)なら
      FOR i=1 TO N !他のオスを並べる
         IF A(i)>0 THEN
            LET P(K)=i !B
            LET A(i)=0
            CALL try(K+1,N,P,A,B) !次へ
            LET A(i)=1 !元に戻す
         END IF
      NEXT i
      IF B(W)>0 THEN !つがいのメスを並べる
         LET P(K)=-W !a
         LET B(W)=0
         CALL try(K+1,N,P,A,B)
         LET B(W)=1
      END IF

   ELSE !メス(a)なら
      FOR i=1 TO N !他のメスを並べる
         IF B(i)>0 THEN
            LET P(K)=-i
            LET B(i)=0 !b
            CALL try(K+1,N,P,A,B)
            LET B(i)=1
         END IF
      NEXT i
      IF A(-W)>0 THEN !つがいのオスを並べる
         LET P(K)=-W !A
         LET A(-W)=0
         CALL try(K+1,N,P,A,B)
         LET A(-W)=1
      END IF

   END IF

END IF
END SUB



実行結果

1  2  3 -3 -1 -2

1  2  3 -3 -2 -1

1  2 -2 -1 -3  3

1  3  2 -2 -1 -3

1  3  2 -2 -3 -1

1  3 -3 -1 -2  2

1 -1 -2 -3  3  2

1 -1 -2  2  3 -3

1 -1 -3 -2  2  3

1 -1 -3  3  2 -2

10 通り
60 通り


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月26日(火)15時34分50秒
  > No.3702[元記事へ]

問題 2010年度灘中学
6桁の整数ABCDEFで、
一番上の位の数字Aを一番下に移した数BCDEFAがもとの数の3倍になるものは、ちょうど2つあります。
このような数ABCDEFのうち大きい方をXとすると、Xはいくらになるでしょうか?
また、X/999999をできる限り約分した分数はいくらでしょうか。


問題 覆面算
  ABCDEF
×      3
----------
  BCDEFA


答え 乗算の筆算による

A=1のとき
  1BCDEF
 ×     3
 ---------
  BCDEF1

 一の位は、3×7=21より、
  1BCDE7
 ×     3
 ---------
  BCDE71

 十の位は、一の位から桁上がりに注意して、3×5+2=17より、
  1BCD57
 ×     3
 ---------
  BCD571

  :

A=2のとき
  :


DIM P(6) !順にA,B,C,D,E,F
FOR A=1 TO 9
   LET P(1)=A

   LET T=P(1)
   FOR M=6 TO 2 STEP -1 !一の位から順にうめていく
      FOR i=1 TO 9 !九九の3の段
         IF MOD(3*i,10)=T THEN EXIT FOR
      NEXT i
      IF i>9 THEN
         PRINT "解なし"
         STOP
      ELSE
         LET P(M)=i
         LET CY=INT(3*i/10)
         LET T=i-CY
      END IF
   NEXT M
   IF CY=P(1) THEN MAT PRINT P; !すべてうまったなら

NEXT A
END


実行結果

1  4  2  8  5  7

2  8  5  7  1  4




答え 不定方程式
3(100000A+10000B+1000C+100D+10E+F)=100000B+10000C+1000D+100E+10F+A
∴70000B+7000C+700D+70E+7F=299999A
∴10000B+1000C+100D+10E+F=42857A
左辺<100000だから、A=1,2
大きい方は、A=2なので、X=285714

また、285714/999999=(2×142857)/(7×142857)=2/7
(終り)


答え 循環小数
 ABCDEF0
-  BCDEFA
----------
 A000000-A=(10^6-1)×A=999999×A
また、ABCDEF0-BCDEFA=10×ABCDEF-3×ABCDEF=7×ABCDEF
これより、999999×A=7×ABCDEF ∴A/7=ABCDEF/999999
右辺は循環節がABCDEFの循環小数を分数で表したものである。
左辺は、分母が7の真分数を考えると、
 1/7=0.{142857}
 2/7=0.{285714}
 3/7=0.{428571}
 4/7=0.{571428}
 5/7=0.{714285}
 6/7=0.{857142}
から、3倍しても6桁のものは、分子が1,2のときとなる。
よって、大きい方Xは285714、X/999999は2/7となる。
(終り)


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月27日(水)10時09分16秒
  > No.3703[元記事へ]

問題
5で割ると2余り、7で割ると4余り、11で割ると8余るような自然数nで最小のものを求めよ。

答え
題意より、n=5*Q1+R1=7*Q2+R2=11*Q3+R3
これより、5*Q1=11*Q3+R3-R1、7*Q2=11*Q3+R3-R2
これを満たす整数の組Q1,Q2,Q3を求める。
(終わり)


LET R1=2
LET R2=4
LET R3=8
FOR Q3=0 TO 5*7
   LET N=11*Q3+R3
   LET Q1=(N-R1)/5
   LET Q2=(N-R2)/7
   IF Q1=INT(Q1) AND Q2=INT(Q2) THEN PRINT N
NEXT Q3
END



答え
5で割ると2余るので、3を加えると、5の倍数となる。
7で割ると4余るので、3を加えると、7の倍数となる。
11で割ると8余るので、3を加えると、11の倍数となる。
よって、5×7×11-3=382
(終り)

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月30日(土)10時21分54秒
  > No.3704[元記事へ]

問題
正多面体の各面に色を塗っていく。
隣接する面が同じ色にならないような塗り方は何通りありますか。
例
正4面体の場合、色数が1,2,3,4のとき、それぞれ0,0,0,1通り
正6面体の場合、色数が1,2,3,4,5,6のとき、それぞれ0,0,1,6,15,30通り

参考サイト http://izumi-math.jp/thema/nuriwake.htm
参考サイト http://www004.upp.so-net.ne.jp/s_honma/figure/color.htm



!正6面体
!・─・
!│1│
!・─・─・─・─・
!│2│3│4│5│
!・─・─・─・─・
!      │6│
!      ・─・
DATA 6 !面数
DATA 0,1,1,1,1,0 !面1 隣接行列
DATA 1,0,1,0,1,1 !面2
DATA 1,1,0,1,0,1 !面3
DATA 1,0,1,0,1,1 !面4
DATA 1,1,0,1,0,1 !面5
DATA 0,1,1,1,1,0 !面6



READ N
DIM M(N,N)
MAT READ M

PUBLIC NUMERIC C !場合の数
LET C=0

DIM Q(N) !各色数の場合の数
MAT Q=ZER

DIM P(N) !パターン
LET P(1)=1 !面1を固定する

CALL try(2,P,Q, N,M,N)
MAT PRINT Q;

END


EXTERNAL SUB try(X,P(),Q(), K,M(,),N) !バックトラック法で探索する
FOR i=1 TO K !k色
   FOR J=1 TO X-1 !隣接面を確認する
      IF M(X,J)>0 THEN
         IF i=P(J) THEN EXIT FOR !同じ色なら
      END IF
   NEXT J
   IF J>X-1 THEN !異なる色なら

      LET P(X)=i

      IF X=N THEN !全面塗ったなら
         DIM F(N) !使用された色数(k色中t色)を確認する
         MAT F=ZER
         FOR J=1 TO N
            LET F(P(J))=1
         NEXT J
         LET T=0
         FOR J=1 TO N
            LET T=T+F(J)
         NEXT J
         FOR J=1 TO T
            IF F(J)=0 THEN EXIT FOR
         NEXT J
         IF J>T THEN !1~t色 ※1,2,3の3色はOK、1,2,4や1,3,5などはNG

            CALL CF(N,P, OK)
            IF OK=-1 THEN !対称性を考慮する

               LET Q(T)=Q(T)+1 !記録する

               LET C=C+1
               PRINT"No.";C; T;"色" !パターンを表示する
               MAT PRINT P;

            END IF

         END IF
      ELSE
         CALL try(X+1,P,Q, K,M,N) !次の面へ
      END IF
   END IF
NEXT i
END SUB


EXTERNAL SUB CF(N,P(), OK) !6面体 バーンサイドの定理(コーシー・フロベニウスの定理)
!展開図を1つに固定する。 面1の部分が、面1から面nになるように展開する。

!正6面体
!・─・
!│1│
!・─・─・─・─・  → 1,2,3,4,5,6と表す
!│2│3│4│5│
!・─・─・─・─・
!      │6│
!      ・─・
DATA 24 !対称

DATA 1,2,3,4,5,6 !面1 0°回転
DATA 1,3,4,5,2,6 !    90°
DATA 1,4,5,2,3,6 !   180°
DATA 1,5,2,3,4,6 !   270°

DATA 2,1,5,6,3,4 !面2
DATA 2,5,6,3,1,4
DATA 2,6,3,1,5,4
DATA 2,3,1,5,6,4

DATA 3,4,1,2,6,5 !面3
DATA 3,1,2,6,4,5
DATA 3,2,6,4,1,5
DATA 3,6,4,1,2,5

DATA 4,6,5,1,3,2 !面4
DATA 4,5,1,3,6,2
DATA 4,1,3,6,5,2
DATA 4,3,6,5,1,2

DATA 5,4,6,2,1,3 !面5
DATA 5,6,2,1,4,3
DATA 5,2,1,4,6,3
DATA 5,1,4,6,2,3

DATA 6,5,4,3,2,1 !面6
DATA 6,4,3,2,5,1
DATA 6,3,2,5,4,1
DATA 6,2,5,4,3,1



LET OK=0

READ K

!数字の並びをn進法n桁で表す。
!元の値が最小なら(対称性を排除されるので)、採用する。

LET T=0
FOR i=1 TO N
   READ A
   LET T=T*N+(P(A)-1)
NEXT i

FOR J=1 TO K-1 !対称なもの
   LET W=0
   FOR i=1 TO N
      READ A
      LET W=W*N+(P(A)-1)
   NEXT i
   IF W<T THEN EXIT SUB
NEXT J

LET OK=-1
END SUB


実行結果

No. 1  3 色
1  2  3  2  3  1

No. 2  4 色
1  2  3  2  3  4

No. 3  4 色
1  2  3  2  4  1

No. 4  5 色
1  2  3  2  4  5

No. 5  5 色
1  2  3  2  5  4

No. 6  4 色
1  2  3  4  3  1

No. 7  5 色
1  2  3  4  3  5

No. 8  5 色
1  2  3  4  5  1

No. 9  6 色
1  2  3  4  5  6

No. 10  6 色
1  2  3  4  6  5

No. 11  5 色
1  2  3  5  3  4

No. 12  5 色
1  2  3  5  4  1

No. 13  6 色
1  2  3  5  4  6

No. 14  6 色
1  2  3  5  6  4

No. 15  6 色
1  2  3  6  4  5

No. 16  6 色
1  2  3  6  5  4

No. 17  4 色
1  2  4  2  4  3

No. 18  5 色
1  2  4  2  5  3

No. 19  4 色
1  2  4  3  4  1

No. 20  5 色
1  2  4  3  4  5

No. 21  5 色
1  2  4  3  5  1

No. 22  6 色
1  2  4  3  5  6

No. 23  6 色
1  2  4  3  6  5

No. 24  6 色
1  2  4  5  3  6

No. 25  5 色
1  2  4  5  4  3

No. 26  6 色
1  2  4  5  6  3

No. 27  6 色
1  2  4  6  3  5

No. 28  6 色
1  2  4  6  5  3

No. 29  6 色
1  2  5  3  4  6

No. 30  5 色
1  2  5  3  5  4

No. 31  6 色
1  2  5  3  6  4

No. 32  6 色
1  2  5  4  3  6

No. 33  5 色
1  2  5  4  5  3

No. 34  6 色
1  2  5  4  6  3

No. 35  6 色
1  2  5  6  3  4

No. 36  6 色
1  2  5  6  4  3

No. 37  6 色
1  2  6  3  4  5

No. 38  6 色
1  2  6  3  5  4

No. 39  6 色
1  2  6  4  3  5

No. 40  6 色
1  2  6  4  5  3

No. 41  6 色
1  2  6  5  3  4

No. 42  6 色
1  2  6  5  4  3

No. 43  4 色
1  3  4  3  4  2

No. 44  5 色
1  3  4  3  5  2

No. 45  5 色
1  3  4  5  4  2

No. 46  6 色
1  3  4  5  6  2

No. 47  6 色
1  3  4  6  5  2

No. 48  5 色
1  3  5  4  5  2

No. 49  6 色
1  3  5  4  6  2

No. 50  6 色
1  3  5  6  4  2

No. 51  6 色
1  3  6  4  5  2

No. 52  6 色
1  3  6  5  4  2

0  0  1  6  15  30



 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 5月30日(土)12時22分48秒
  > No.3705[元記事へ]

つづき

2箇所の赤色部分を置き換えます。


正4面体の場合、色数が1,2,3,4のとき、それぞれ0,0,0,1通り


1つ目

!正4面体
!    ・
!   /2\
!  ・───・
! /4\1/3\
!・───・───・
DATA 4 !面数
DATA 0,1,1,1 !面1 隣接行列
DATA 1,0,1,1 !面2
DATA 1,1,0,1 !面3
DATA 1,1,1,0 !面4



2つ目

!正4面体
!    ・
!   /2\
!  ・───・   → 1,2,3,4と表す
! /4\1/3\
!・───・───・
DATA 12 !対称

DATA 1,2,3,4 !面1 0°回転
DATA 1,3,4,2 !   120°
DATA 1,4,2,3 !   240°

DATA 2,1,4,3 !面2
DATA 2,4,3,1
DATA 2,3,1,4

DATA 3,4,1,2 !面3
DATA 3,1,2,4
DATA 3,2,4,1

DATA 4,3,2,1 !面4
DATA 4,2,1,3
DATA 4,1,3,2





正8面体の場合、色数が1,2,3,4,5,6,7,8のとき、それぞれ0,1,12,103,730,2400,3360,1680通り


1つ目

!正8面体
!    ・
!   /2\
!  ・───・───・───・
! /4\1/3\7/5\8/
!・───・───・───・
!         \6/
!          ・
DATA 8 !面数
DATA 0,1,1,1,0,0,0,0 !面1 隣接行列
DATA 1,0,0,0,0,0,1,1 !面2
DATA 1,0,0,0,0,1,1,0 !面3
DATA 1,0,0,0,0,1,0,1 !面4
DATA 0,0,0,0,0,1,1,1 !面5
DATA 0,0,1,1,1,0,0,0 !面6
DATA 0,1,1,0,1,0,0,0 !面7
DATA 0,1,0,1,1,0,0,0 !面8



2つ目

!正8面体
!    ・
!   /2\
!  ・───・───・───・  → 1,2,3,4,5,6,7,8と表す
! /4\1/3\7/5\8/
!・───・───・───・
!         \6/
!          ・
DATA 24 !対称

DATA 1,2,3,4, 5,6,7,8 !面1 0°回転
DATA 1,3,4,2, 5,8,6,7 !   120°
DATA 1,4,2,3, 5,7,8,6 !   240°

DATA 2,1,8,7, 6,5,4,3 !面2
DATA 2,8,7,1, 6,3,5,4
DATA 2,7,1,8, 6,4,3,5

DATA 3,6,1,7, 8,2,4,5 !面3
DATA 3,1,7,6, 8,5,2,4
DATA 3,7,6,1, 8,4,5,2

DATA 4,6,8,1, 7,2,5,3 !面4
DATA 4,8,1,6, 7,3,2,5
DATA 4,1,6,8, 7,5,3,2

DATA 5,6,7,8, 1,2,3,4 !面5
DATA 5,7,8,6, 1,4,2,3
DATA 5,8,6,7, 1,3,4,2

DATA 6,5,4,3, 2,1,8,7 !面6
DATA 6,4,3,5, 2,7,1,8
DATA 6,3,5,4, 2,8,7,1

DATA 7,2,5,3, 4,6,8,1 !面7
DATA 7,5,3,2, 4,1,6,8
DATA 7,3,2,5, 4,8,1,6

DATA 8,2,4,5, 3,6,1,7 !面8
DATA 8,4,5,2, 3,7,6,1
DATA 8,5,2,4, 3,1,7,6


 

写像変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時02分0秒
  !'写像変換テスト
LET XSIZE=600
LET YSIZE=600
LET XH=XSIZE/2
LET YH=YSIZE/2
CALL GINIT(XSIZE,YSIZE)
LET N=8
FOR Y=0 TO YSIZE-1 STEP N !'せん断変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=XS+TAN(RAD(10))*YS
      LET YY=YS+TAN(RAD(20))*XS
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$ !'一時停止
CLEAR
LET A=XSIZE/2
FOR Y=0 TO YSIZE-1 STEP N !'正方形変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=A*(XS/A)^2*SGN(XS)
      LET YY=A*(YS/A)^2*SGN(YS)
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET A=1/XSIZE
FOR Y=0 TO YSIZE-1 STEP N !'放物変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=XS+A*YS^2
      LET YY=YS
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET A=1/XSIZE
FOR Y=0 TO YSIZE-1 STEP N !'放物変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=XS+A*YS^2
      LET YY=YS+A*XS^2
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET A=XSIZE/8
FOR Y=0 TO YSIZE STEP N !'双曲変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=XS/(A+ABS(YS))*A
      LET YY=YS/(A+ABS(XS))*A
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET L=XSIZE
LET T=40
FOR Y=0 TO YSIZE-1 STEP N !'射影変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=L*XS/(L-YS*SIN(RAD(T)))
      LET YY=L*YS*COS(RAD(T))/(L-YS*SIN(RAD(T)))
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET L=XSIZE
LET T=60
FOR Y=0 TO YSIZE-1 STEP N !'三角形変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=2*TAN(RAD(T/2))*XS*(YS+YH)/L
      LET YY=YS
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET A=5
LET B=5
FOR Y=0 TO YSIZE-1 STEP N !'波形変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      LET XX=XS+A*SIN(RAD(B*YS))
      LET YY=YS+A*SIN(RAD(B*XS))
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
INPUT A$
CLEAR
LET R=XSIZE/2
FOR Y=0 TO YSIZE-1 STEP N !'球面反射変換
   LET YS=Y-YH
   FOR X=0 TO XSIZE-1 STEP N
      LET XS=X-XH
      IF XS^2+YS^2<R^2 THEN
         LET Z=(2*R*R)/(XS^2+YS^2+R*R)
         LET XX=XS*Z
         LET YY=YS*Z
      ELSE
         LET XX=XS
         LET YY=YS
      END IF
      LET C=7
      IF MOD(Y,3*N)=0 THEN LET C=2
      IF MOD(X,3*N)=0 THEN LET C=4
      CALL PSET(XX+XH,YY+YH,C)
   NEXT X
NEXT  Y
END

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

せん断変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時02分47秒
  !'せん断変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
INPUT  PROMPT "角度α(0 - 40)=":ALPHA
LET KX=TAN(RAD(ALPHA))
INPUT  PROMPT "角度β(0 - 40)=":BETA
LET KY=TAN(RAD(BETA))
LET XA=XSIZE-1+INT(KX*(YSIZE-1))
LET YA=YSIZE-1+INT(KY*(XSIZE-1))
CALL GINIT(XA,YA)
!'せん断変換
!' X'=X+KX*Y
!' Y'=Y+KY*X
!'逆変換
!' X=(X'-KX*Y')/(KX*KY-1)
!' Y=(X'*KY-Y')/(KX*KY-1)
FOR YS=0 TO YA-1
   LET Y=YS-YA/2
   FOR XS=0 TO XA-1
      LET X=XS-XA/2
      LET XX=(Y*KX-X)/(KX*KY-1)
      LET YY=(X*KY-Y)/(KX*KY-1)
      IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
         LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
         CALL RGB(C,R,G,B)
         CALL PSET(X+XA/2,Y+YA/2,R,G,B)
      END IF
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GETPOINT(X,Y,R,G,B)
ASK PIXEL VALUE(X,Y) C
CALL RGB(C,R,G,B)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

正方形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時03分18秒
  !' 正方形変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'正方形変換
!' X'=A*(X/A)^2
!' Y'=A*(Y/A)^2
!'逆変換
!' X=SQR(A)*SQR(X')
!' Y=SQR(A)*SQR(Y')
CLEAR
LET MODE=0
SELECT CASE MODE
CASE 0
   FOR YS=0 TO YSIZE-1
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1
         LET X=XS-XSIZE/2
         LET XX=SQR(XSIZE/2)*SQR(ABS(X))*SGN(X)
         LET YY=SQR(YSIZE/2)*SQR(ABS(Y))*SGN(Y)
         IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
            LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
            CALL RGB(C,R,G,B)
            CALL PSET(X+XSIZE/2,Y+YSIZE/2,R,G,B)
         END IF
      NEXT  XS
   NEXT  YS
CASE 1
   FOR YS=0 TO YSIZE-1
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1
         LET X=XS-XSIZE/2
         LET XX=X
         LET YY=SQR(YSIZE/2)*SQR(ABS(Y))*SGN(Y)
         IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
            LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
            CALL RGB(C,R,G,B)
            CALL PSET(X+XSIZE/2,Y+YSIZE/2,R,G,B)
         END IF
      NEXT  XS
   NEXT  YS
CASE 2
   FOR YS=0 TO YSIZE-1
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1
         LET X=XS-XSIZE/2
         LET XX=SQR(XSIZE/2)*SQR(ABS(X))*SGN(X)
         LET YY=Y
         IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
            LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
            CALL RGB(C,R,G,B)
            CALL PSET(X+XSIZE/2,Y+YSIZE/2,R,G,B)
         END IF
      NEXT  XS
   NEXT  YS
END SELECT
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

三角形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時03分50秒
  !' 三角形変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'三角形変換
!' X'=2*TAN(T/2)*X*Y/L
!' Y'=Y
!'逆変換
!' X=L*X'/(2*TAN(T/2)*Y')
!' Y=Y'
!'INPUT  PROMPT "L=":L
LET L=XSIZE-1
!'INPUT  PROMPT "角度(0 - 90)=":TH
!'LET T=RAD(TH)
LET T=2*ATN((XSIZE/2)/YSIZE)
CLEAR
FOR YS=1 TO YSIZE-1
   LET Y=YS-YSIZE/2
   FOR XS=0 TO XSIZE-1
      LET X=XS-XSIZE/2
      LET XX=L*X/(2*TAN(T/2)*(Y+YSIZE/2))
      LET YY=Y
      IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
         LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
         CALL RGB(C,R,G,B)
         CALL PSET(X+XSIZE/2,Y+YSIZE/2,R,G,B)
      END IF
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

波形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時04分35秒
  !' 波形変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
INPUT  PROMPT "A (1 - 10)=":A
INPUT  PROMPT "B (1 - 5)=":B
!' 波形変換
!' X'=X+A*SIN(B*Y)
!' Y'=Y+A*SIN(B*X)
!' 波形変換
!' X'=X+A*SIN(B*Y)
!' Y'=Y
!' 逆変換
!' X=X'-A*SIN(B*Y')
!' Y=Y'
LET MODE=0
CLEAR
SELECT CASE MODE
CASE 0
   FOR Y=0 TO YSIZE-1
      LET XX=MAX(XX,XSIZE-1+INT(A*SIN(B*Y*PI/180)))
   NEXT Y
   FOR X=0 TO XSIZE-1
      LET YY=MAX(YY,YSIZE-1+INT(A*SIN(B*X*PI/180)))
   NEXT X
   CALL GINIT(INT(XX),INT(YY))
   FOR Y=0 TO YSIZE-1 STEP .5
      FOR X=0 TO XSIZE-1 STEP .5
         LET XA=X+A*SIN(B*Y*PI/180)
         LET YA=Y+A*SIN(B*X*PI/180)
         LET C=M(X,Y)
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XA,YA,RR,GG,BB)
      NEXT X
   NEXT Y
CASE 1
   FOR Y=0 TO YSIZE-1
      FOR X=0 TO XSIZE-1
         LET XA=X
         LET YA=Y-A*SIN(B*X*PI/180)
         IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN
            LET C=M(XA,INT(YA))
            CALL RGB(C,RR,GG,BB)
            CALL PSET(X,Y,RR,GG,BB)
         END IF
      NEXT X
   NEXT Y
CASE 2
   FOR Y=0 TO YSIZE-1
      FOR X=0 TO XSIZE-1
         LET XA=X-A*SIN(B*Y*PI/180)
         LET YA=Y
         IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN
            LET C=M(INT(XA),YA)
            CALL RGB(C,RR,GG,BB)
            CALL PSET(X,Y,RR,GG,BB)
         END IF
      NEXT X
   NEXT Y
END SELECT
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

射影変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時05分17秒
  !'射影変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'射影変換
!' X'=L*X/(L-Y*SIN(T))
!' Y'=L*Y*COS(T)/(L-Y*SIN(T))
!'逆変換
!' X=L*COS(T)*X'/(SIN(T)*Y'+L*COS(T))
!' Y=L*Y'/(SIN(T)*Y'+L*COS(T))
!'INPUT  PROMPT "L=":L
LET L=XSIZE
INPUT  PROMPT "度(-90~90)=":T
CLEAR
FOR YS=0 TO YSIZE-1
   LET Y=YS-YSIZE/2
   FOR XS=0 TO XSIZE-1
      LET X=XS-XSIZE/2
      LET XX=L*COS(RAD(T))*X/(SIN(RAD(T))*Y+L*COS(RAD(T)))
      LET YY=L*Y/(SIN(RAD(T))*Y+L*COS(RAD(T)))
      IF XX>=-XSIZE/2 AND XX<=XSIZE/2-1 AND YY>=-YSIZE/2 AND YY<=YSIZE/2-1 THEN
         LET C=M(INT(XX+XSIZE/2),INT(YY+YSIZE/2))
         CALL RGB(C,R,G,B)
         CALL PSET(X+XSIZE/2,Y+YSIZE/2,R,G,B)
      END IF
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

扇形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時05分48秒
  !'扇形変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
CLEAR
!'INPUT  PROMPT "角度(0 - 180)=":T
FOR T=180 TO 0 STEP -1 !'最大角度探索
   LET TH=(XSIZE-1-XS)/(XSIZE-1)*T-(180-(180-T)/2)
   LET R=YSIZE-YS
   LET XX=R*COS(RAD(TH))
   IF XX+XSIZE/2>=0 AND XX+XSIZE/2<XSIZE THEN EXIT FOR
NEXT T
FOR YS=0 TO YSIZE-1 STEP .5
   FOR XS=0 TO XSIZE-1 STEP .5
      LET TH=(XSIZE-1-XS)/(XSIZE-1)*T-(180-(180-T)/2)
      LET R=YSIZE-YS
      LET XX=R*COS(RAD(TH))
      LET YY=R*SIN(RAD(TH))
      LET C=M(XS,YS)
      CALL RGB(C,RR,GG,BB)
      CALL PSET(XX+XSIZE/2,YY+YSIZE,RR,GG,BB)
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

放物変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時06分43秒
  !'放物変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'放物変換
!' X'=X+A*Y^2
!' Y'=Y+B*X^2
LET A=1/XSIZE
LET B=1/YSIZE
LET XA=XSIZE+A*(YSIZE/2)^2
LET YA=YSIZE+B*(XSIZE/2)^2
LET MODE=0
SELECT CASE MODE
CASE 0
   CALL GINIT(INT(XA),INT(YA))
   FOR YS=0 TO YSIZE-1 STEP .5
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1 STEP .5
         LET X=XS-XSIZE/2
         LET XX=X+A*Y^2
         LET YY=Y+B*X^2
         LET C=M(INT(XS),INT(YS))
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
      NEXT XS
   NEXT YS
CASE 1
   CALL GINIT(XSIZE,INT(YA))
   FOR YS=0 TO YSIZE-1 STEP .5
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1 STEP .5
         LET X=XS-XSIZE/2
         LET XX=X
         LET YY=Y+B*X^2
         LET C=M(INT(XS),INT(YS))
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
      NEXT XS
   NEXT YS
CASE 2
   CALL GINIT(INT(XA),YSIZE)
   FOR YS=0 TO YSIZE-1 STEP .5
      LET Y=YS-YSIZE/2
      FOR XS=0 TO XSIZE-1 STEP .5
         LET X=XS-XSIZE/2
         LET XX=X+A*Y^2
         LET YY=Y
         LET C=M(INT(XS),INT(YS))
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
      NEXT XS
   NEXT YS
END SELECT
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

双曲変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時07分18秒
  !'双曲変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'双曲変換
!' X'=X/(A+ABS(Y))
!' Y'=Y/(B+ABS(X))
!'INPUT  PROMPT "A=":A
!'INPUT  PROMPT "B=":B
LET A=XSIZE/8
LET B=YSIZE/8
CLEAR
FOR YS=0 TO YSIZE-1 STEP .5
   LET Y=YS-YSIZE/2
   FOR XS=0 TO XSIZE-1 STEP .5
      LET X=XS-XSIZE/2
      LET XX=X/(A+ABS(Y))*A
      LET YY=Y/(B+ABS(X))*B
      LET C=M(INT(X+XSIZE/2),INT(Y+YSIZE/2))
      CALL RGB(C,RR,GG,BB)
      CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

三角形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時08分5秒
  !'三角形変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
CLEAR
LET MODE=0
SELECT CASE MODE
CASE 0
   LET X1=XSIZE/2
   LET Y1=0
   LET X2=0
   LET Y2=YSIZE-1
   LET X3=XSIZE-1
   LET Y3=YSIZE-1
CASE 1
   LET X1=XSIZE/2
   LET Y1=YSIZE-1
   LET X2=0
   LET Y2=0
   LET X3=XSIZE-1
   LET Y3=0
END SELECT
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET XA=(X2-X1)/(Y2-Y1)*(Y-Y1)+X1
      LET XB=(X3-X1)/(Y3-Y1)*(Y-Y1)+X1
      LET XX=XA+(XB-XA)/XSIZE*X
      LET YY=Y
      LET C=M(X,Y)
      CALL RGB(C,R,G,B)
      CALL PSET(XX,YY,R,G,B)
   NEXT X
NEXT Y
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

円形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時08分48秒
  !' 方程式 x^n+y^n=r^n を使用して円形変換します(n=2の時)
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
CLEAR
LET N=1.5 !' N=2で円形変換
IF XSIZE>YSIZE THEN
   LET R=YSIZE/2
   FOR YS=0 TO YSIZE-1
      LET Y=YS-YSIZE/2
      LET R1=(R^N-ABS(Y)^N)^(1/N)
      FOR XS=0 TO XSIZE-1
         LET XX=-R1+XS*R1/R*YSIZE/XSIZE
         LET YY=Y
         LET C=M(XS,YS)
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
      NEXT XS
   NEXT YS
ELSE
   LET R=XSIZE/2
   FOR XS=0 TO XSIZE-1
      LET X=XS-XSIZE/2
      LET R1=(R^N-ABS(X)^N)^(1/N)
      FOR YS=0 TO YSIZE-1
         LET YY=-R1+YS*R1/R*XSIZE/YSIZE
         LET XX=X
         LET C=M(XS,YS)
         CALL RGB(C,RR,GG,BB)
         CALL PSET(XX+XSIZE/2,YY+YSIZE/2,RR,GG,BB)
      NEXT  YS
   NEXT  XS
END IF
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

楕円形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時09分17秒
  !'方程式 (x/a)^n+(y/b)^n=1 を使用して楕円形変換します(n=2の時)
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
CLEAR
LET HX=XSIZE/2
LET HY=YSIZE/2
LET MODE=0
LET N=.5 !'N=2の時、楕円形変換
FOR YS=0 TO YSIZE-1
   LET Y=YS-HY
   LET RY=(1-ABS(Y/HY)^N)^(1/N)
   FOR XS=0 TO XSIZE-1
      LET X=XS-HX
      LET RX=(1-ABS(X/HX)^N)^(1/N)
      IF MODE=0 THEN
         LET XX=-RY*HX+XS*RY
         LET YY=Y
      ELSE
         LET XX=X
         LET YY=-RX*HY+YS*RX
      END IF
      LET C=M(XS,YS)
      CALL RGB(C,RR,GG,BB)
      CALL PSET(XX+HX,YY+HY,RR,GG,BB)
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GETPOINT(X,Y,R,G,B)
ASK PIXEL VALUE(X,Y) C
CALL RGB(C,R,G,B)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

ドーナツ形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時09分50秒
  !'ドーナツ形変換 (R1>0の時)
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
CLEAR
LET R1=50 !' R1=0で円形変換
LET YYSIZE=YSIZE*2+2*R1
LET XXSIZE=YYSIZE
CALL GINIT(XXSIZE,YYSIZE)
FOR YS=0 TO YSIZE-1 STEP .25
   FOR XS=0 TO XSIZE-1 STEP .25
      LET TH=(XSIZE-1-XS)/(XSIZE-1)*359-90
      LET R=YS
      LET XX=(R+R1)*COS(RAD(TH))
      LET YY=(R+R1)*SIN(RAD(TH))
      LET C=M(XS,YS)
      CALL RGB(C,RR,GG,BB)
      CALL PSET(XX+XXSIZE/2,YY+YYSIZE/2,RR,GG,BB)
   NEXT XS
NEXT YS
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

球面反射変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時10分31秒
  !'球面反射変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
!'球面反射変換
!' Z=(2*R*R)/(X*X+Y*Y+R*R)
!' X'=X*Z
!' Y'=Y*Z
!' 逆変換
!' X=X'/Z
!' Y=Y'/Z
LET XO=XSIZE/2
LET YO=YSIZE/2
!'INPUT  PROMPT "半径=":R
LET R=MIN(XO,YO)
CLEAR
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF SQR((X-XO)^2+(Y-YO)^2)<R THEN
         LET Z=(2*R*R)/((X-XO)*(X-XO)+(Y-YO)*(Y-YO)+R*R)
         LET XX=X/Z
         LET YY=Y/Z
      ELSE
         LET XX=X
         LET YY=Y
      END IF
      LET C=M(INT(XX),INT(YY))
      CALL RGB(C,RR,GG,BB)
      CALL PSET(X,Y,RR,GG,BB)
   NEXT X
NEXT Y
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

 

自由形変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時11分17秒
  !'マスク画像(2値画像)を使用して、自由形(任意形)変換をします
OPTION BASE 0
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE) !'入力画像(XSIZE*YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY (0,0) M
FILE GETNAME F$,"マスク用画像|*.BMP;*.JPG;*.GIF;*.PNG" !'黒か黒以外
CALL PICTURELOAD(F$,XXSIZE,YYSIZE) !'マスク画像(XXSIZE*YYSIZE)
DIM MASK(0 TO XXSIZE-1,0 TO YYSIZE-1)
ASK PIXEL ARRAY (0,0) MASK
!'INPUT  PROMPT "出力画像サイズ XSIZE,YSIZE=":OXSIZE,OYSIZE
LET OXSIZE=XSIZE !'出力画像サイズ(OXSIZE*OYSIZE)
LET OYSIZE=YSIZE
DIM XR(OYSIZE),YR(OXSIZE),YA(OXSIZE)
CALL GINIT(OXSIZE,OYSIZE)
FOR Y=0 TO OYSIZE-1 !'マスク画像表示
   FOR X=0 TO OXSIZE-1
      LET C=MASK(INT(X*XXSIZE/OXSIZE),INT(Y*YYSIZE/OYSIZE))
      CALL RGB(C,RR,GG,BB)
      IF RR<>0 OR GG<>0 OR BB<>0 THEN CALL PSET(X,Y,255,255,255) !'黒以外なら白色へ(2値化)
   NEXT X
NEXT Y
FOR Y=0 TO OYSIZE-1 !'縮小率計算
   FOR X=0 TO OXSIZE-1
      CALL GETPOINT(X,Y,RR,GG,BB)
      IF RR=255 AND GG=255 AND BB=255 THEN !'白ならカウント
         LET XR(Y)=XR(Y)+1
         LET YR(X)=YR(X)+1
      END IF
   NEXT X
NEXT Y
FOR X=0 TO OXSIZE-1 !'ライン毎に比率計算
   LET YR(X)=YR(X)/OYSIZE
NEXT X
FOR Y=0 TO OYSIZE-1
   LET XR(Y)=XR(Y)/OXSIZE
NEXT  Y
FOR Y=0 TO OYSIZE-1
   LET XA=0
   FOR X=0 TO OXSIZE-1
      CALL GETPOINT(X,Y,RR,GG,BB)
      IF RR=255 AND GG=255 AND BB=255 THEN
         LET XX=XA/XR(Y)*XSIZE/OXSIZE
         LET YY=YA(X)/YR(X)*YSIZE/OYSIZE
         LET XA=XA+1
         LET YA(X)=YA(X)+1
         LET C=M(INT(XX),INT(YY))
         CALL RGB(C,RR,GG,BB)
         CALL PSET(X,Y,RR,GG,BB)
      END IF
   NEXT X
NEXT Y
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GETPOINT(X,Y,R,G,B)
ASK PIXEL VALUE(X,Y) C
CALL RGB(C,R,G,B)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
CALL BOXFULL(0,0,XSIZE-1,YSIZE-1,0,0,0)
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
IF N$="" THEN STOP
GLOAD N$
LET XSIZE=PIXELX(1)+1
LET YSIZE=PIXELY(1)+1
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB BOXFULL(X0,Y0,X1,Y1,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT AREA:X0,Y0;X1,Y0;X1,Y1;X0,Y1;X0,Y0
END SUB

 

マスク画像サンプル

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時12分10秒
  !'自由形変換で使用するマスク画像のサンプルを生成します
LET XSIZE=600 !'生成画像サイズ
LET YSIZE=600
CALL GINIT(XSIZE,YSIZE)
LET XX=XSIZE/2
LET YY=YSIZE/2
LET R=MIN(XX,YY)
CALL CIRCLEFULL(XX,YY,R,R,7)
CALL SAVE
CALL CIRCLEFULL(XX,YY,R,R/2,7)
CALL SAVE
CALL CIRCLEFULL(XX,YY,R/2,R,7)
CALL SAVE
CALL CIRCLEFULL(XX,YY,R,R,7)
CALL CIRCLEFULL(XX,YY,R*.3,R*.3,0)
CALL SAVE
FOR I=2 TO 4
   FOR T=0 TO 359 STEP 360/I
      LET X=XX+R/3*COS(RAD(T))
      LET Y=YY+R/3*SIN(RAD(T))
      CALL CIRCLEFULL(X,Y,R/1.5,R/1.5,7)
   NEXT T
   CALL SAVE
NEXT I
CALL SECTOR(XX,YSIZE,YSIZE,60,7)
CALL SAVE
CALL SECTOR(XX,YSIZE+YSIZE/4,YSIZE,60,7)
CALL SECTOR(XX,YSIZE+YSIZE/4,YSIZE/3,60,0)
CALL SAVE
FOR I=3 TO 6
   CALL POLY(XX,YY,R,7,90,450,360/I)
   PAINT XX,YY
   CALL SAVE
NEXT I
CALL POLY(XX,YY,R*.99,7,90,90+360*2,144)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*3,135)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*3,108)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*4,160)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*4,96)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*5,150)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*5,100)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*7,84)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*7,105)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*7,126)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*7,140)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*7,168)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*9,162)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*9,108)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*9,81)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*11,132)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*11,110)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*11,165)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*11,99)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*11,88)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*13,104)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*13,117)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*13,130)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*13,156)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*13,78)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*14,112)
CALL TRANS
CALL POLY(XX,YY,R*.99,7,90,90+360*16,128)
CALL TRANS
CALL CIRCLEFULL(XX,YY,R,R,7)
CALL CIRCLEFULL(XX+XX/2,YY,R,R,0)
CALL SAVE
DIM XO(10),YO(10)
SET AREA COLOR 7
LET XO(1)=XSIZE/3
LET YO(1)=YSIZE/3
LET XO(2)=0
LET YO(2)=YSIZE-1
LET XO(3)=XSIZE-1
LET YO(3)=YSIZE-1
LET XO(4)=XSIZE/3*2
LET YO(4)=YSIZE/3
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
LET XO(1)=XSIZE/3
LET YO(1)=0
LET XO(2)=XSIZE/3*2
LET YO(2)=0
LET XO(3)=XSIZE/3*2
LET YO(3)=YSIZE-1
LET XO(4)=XSIZE/3
LET YO(4)=YSIZE-1
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
LET XO(1)=0
LET YO(1)=YSIZE/3
LET XO(2)=0
LET YO(2)=YSIZE/3*2
LET XO(3)=XSIZE-1
LET YO(3)=YSIZE/3*2
LET XO(4)=XSIZE-1
LET YO(4)=YSIZE/3
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
LET XO(1)=XSIZE/3
LET YO(1)=YSIZE/3
LET XO(2)=XSIZE/3
LET YO(2)=YSIZE/3*2
LET XO(3)=XSIZE-1
LET YO(3)=YSIZE-1
LET XO(4)=XSIZE-1
LET YO(4)=0
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
LET XO(1)=XSIZE*.2
LET YO(1)=0
LET XO(2)=XSIZE*.8
LET YO(2)=0
LET XO(3)=XSIZE*.8
LET YO(3)=YSIZE-1
LET XO(4)=XSIZE*.2
LET YO(4)=YSIZE-1
MAT PLOT AREA,LIMIT 4:XO,YO
LET XO(1)=0
LET YO(1)=YSIZE*.2
LET XO(2)=XSIZE-1
LET YO(2)=YSIZE*.2
LET XO(3)=XSIZE-1
LET YO(3)=YSIZE*.8
LET XO(4)=0
LET YO(4)=YSIZE*.8
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
CALL LINE(XSIZE/3*2,0,0,YSIZE/3*2,7)
CALL LINE(XSIZE,(YSIZE+1)/3,(XSIZE+1)/3,YSIZE,7)
PAINT XX,YY
CALL SAVE
LET XO(1)=XSIZE*.3
LET YO(1)=YSIZE*.1
LET XO(2)=XSIZE*.8
LET YO(2)=YSIZE*.2
LET XO(3)=XSIZE*.9
LET YO(3)=YSIZE*.8
LET XO(4)=XSIZE*.1
LET YO(4)=YSIZE*.9
MAT PLOT AREA,LIMIT 4:XO,YO
CALL SAVE
LET SIZE=40
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF MOD(X,2*SIZE)<SIZE THEN LET C=7 ELSE LET C=0
      IF MOD(Y,2*SIZE)<SIZE THEN LET C=7-C
      CALL PSET(X,Y,C)
   NEXT X
NEXT Y
CALL SAVE
LET SIZE=50
LET RR=20
FOR Y=0 TO YSIZE-1+SIZE
   FOR X=0 TO XSIZE-1+SIZE
      LET X1=INT((X+SIZE/2)/SIZE)*SIZE
      LET Y1=INT((Y+SIZE/2)/SIZE)*SIZE
      IF (X-X1)^2+(Y-Y1)^2<RR^2 THEN  CALL PSET(X-SIZE/2,Y-SIZE/2,7) ELSE CALL PSET(X-SIZE/2,Y-SIZE/2,0)
   NEXT X
NEXT Y
CALL SAVE
DO !'画像検索で入手。原画像サイズ1024*1024 自作の専用プログラムにて2dot間隔でスキャン。データー化した。
   READ IF MISSING THEN EXIT DO:X,Y
   LET X1=X/1024*XSIZE
   LET Y1=Y/1024*YSIZE
   IF XS=0 THEN
      LET XS=X1
      LET YS=Y1
   END IF
   CALL LINE(XS,YS,X1,Y1,7)
   LET XA=(1023-X)/1024*XSIZE
   LET YA=Y/1024*YSIZE
   IF XB=0 THEN
      LET XB=XA
      LET YB=YA
   END IF
   CALL LINE(XA,YA,XB,YB,7)
   LET XS=X1
   LET YS=Y1
   LET XB=XA
   LET YB=YA
LOOP
PAINT XSIZE/2,YSIZE/2
DATA 512,324,510,322,508,320,506,318,504,316,502,312,500,310,498,308,496,306,494,304,492,302,490,300,488,298,486,294,484,292,482,290,480,288,478,286,476,286,474,284,472,282,470,280,468,278,466,276
DATA 464,274,462,272,460,270,458,268,456,268,454,266,452,264,450,262,448,260,446,260,444,258,442,256,440,256,438,254,436,252,434,252,432,250,430,248,428,248,426,246,424,246,422,244,420,242,418,242,416,240
DATA 414,240,412,238,410,238,408,238,406,236,404,236,402,234,400,234,398,232,396,232,394,232,392,230,390,230,388,230,386,228,384,228,382,228,380,228,378,226,376,226,374,226,372,226,370,224,368,224,366,224
DATA 364,224,362,224,360,224,358,224,356,222,354,222,352,222,350,222,348,222,346,222,344,222,342,222,340,222,338,222,336,222,334,222,332,222,330,222,328,222,326,222,324,222,322,224,320,224,318,224,316,224
DATA 314,224,312,224,310,226,308,226,306,226,304,226,302,228,300,228,298,228,296,228,294,230,292,230,290,230,288,230,286,232,284,232,282,234,280,234,278,234,276,236,274,236,272,238,270,238,268,240,266,240
DATA 264,242,262,242,260,244,258,244,256,246,254,246,252,248,250,248,248,250,246,252,244,252,242,254,240,256,238,258,236,258,234,260,232,262,230,264,228,266,226,268,224,270,222,272,220,274,218,276,216,278
DATA 214,280,212,284,210,286,208,288,206,292,204,294,202,298,200,300,198,304,196,308,194,312,192,316,190,322,188,326,186,332,184,340,182,348,180,358,178,374
DATA 178,386,178,388,178,390,178,392,178,394,178,396,178,398,178,400,178,402,178,404,178,406,178,408,178,410,178,412,178,414,179,416,179,418,179,420,179,422,179,424,180,426,180,428,180,430,181,432
DATA 181,434,181,436,182,438,182,440,183,442,183,444,183,446,184,448,184,450,185,452,186,454,186,456,186,458,187,460,188,462,188,464,189,466,189,468,190,470,191,472,191,474,192,476,193,478,194,480,194,482
DATA 195,484,196,486,197,488,197,490,198,492,199,494,200,496,201,498,202,500,203,502,204,504,205,506,206,508,207,510,208,512,209,514,210,516,211,518,212,520,213,522,214,524,216,526,217,528,218,530,219,532
DATA 220,534,222,536,223,538,224,540,226,542,227,544,228,546,230,548,231,550,232,552,234,554,235,556,236,558,238,560,239,562,241,564,242,566,243,568,245,570,246,572,248,574,249,576,251,578,252,580,254,582
DATA 255,584,257,586,258,588,260,590,261,592,263,594,265,596,266,598,268,600,269,602,271,604,272,606,274,608,276,610,277,612,279,614,281,616,282,618,284,620,286,622,287,624,289,626,291,628,292,630,294,632
DATA 296,634,297,636,299,638,300,640,302,642,304,644,306,646,308,648,309,650,311,652,313,654,314,656,316,658,318,660,320,662,321,664,323,666,325,668,327,670,329,672,330,674,332,676,334,678,336,680,337,682
DATA 339,684,341,686,343,688,345,690,347,692,348,694,350,696,352,698,354,700,356,702,358,704,359,706,361,708,363,710,365,712,367,714,369,716,371,718,372,720,374,722,376,724,378,726,380,728,382,730,384,732
DATA 386,734,388,736,389,738,391,740,393,742,395,744,397,746,399,748,401,750,403,752,405,754,407,756,409,758,410,760,412,762,414,764,416,766,418,768,420,770,422,772,424,774,426,776,428,778,430,780,431,782
DATA 433,784,435,786,437,788,439,790,441,792,443,794,445,796,447,798,449,800,450,802,452,804,454,806,456,808,458,810,460,812,462,814,464,816,466,818,468,820,470,822,471,824,473,826,475,828,477,830,479,832
DATA 481,834,483,836,485,838,487,840,489,842,491,844,492,846,494,848,496,850,498,852,500,854,502,856,504,858,506,860,508,862,510,864,511,866
CALL SAVE
FOR I=1 TO 5
   SELECT CASE I
   CASE 1
      LET M=.5
   CASE 2
      LET M=.8
   CASE 3
      LET M=1.5
   CASE 4
      LET M=3
   CASE 5
      LET M=8
   END SELECT
   FOR Y=0 TO YSIZE-1
      FOR X=0 TO XSIZE-1
         IF ABS((X-XX)/XX)^M+ABS((Y-YY)/YY)^M<1 THEN CALL PSET(X,Y,7)
      NEXT X
   NEXT Y
   CALL SAVE
NEXT I
FOR I=1 TO 5
   IF I=1 THEN LET M=3 ELSE LET M=M+1
   FOR Y=0 TO YSIZE-1
      FOR X=0 TO XSIZE-1
         IF X=XX AND Y=YY THEN LET TH=0 ELSE LET TH=ANGLE(X-XX,Y-YY)
         LET RR=R*.8+R*.2*COS(M*TH)
         IF SQR((Y-YY)^2+(X-XX)^2)<RR THEN CALL PSET(X,Y,7)
      NEXT X
   NEXT Y
   CALL SAVE
NEXT I
LET RR=XSIZE/4
LET TH=0
FOR I=1 TO 3
   IF I=1 THEN LET B=2 ELSE LET B=3
   IF I=3 THEN LET TH=180
   FOR Y=0 TO YSIZE-1
      LET X1=RR/2+RR/2*SIN(RAD(B*Y))
      LET X2=XSIZE-RR/2+RR/2*SIN(RAD(B*Y+TH))
      FOR X=INT(X1) TO INT(X2)
         CALL PSET(X,Y,7)
      NEXT X
   NEXT Y
   CALL SAVE
NEXT I
FOR I=1 TO 2
   FOR Y=0 TO YSIZE-1
      LET X1=XSIZE/4*SIN(RAD(Y/(YSIZE/180)))
      IF I=2 THEN
         LET X2=XSIZE-XSIZE/4*SIN(RAD(Y/(YSIZE/180)))
      ELSE
         LET X2=XSIZE*.75+XSIZE/4*SIN(RAD(Y/(YSIZE/180)))
      END IF
      FOR X=INT(X1) TO INT(X2)
         CALL PSET(X,Y,7)
      NEXT X
   NEXT Y
   CALL SAVE
NEXT I
FOR I=1 TO 2
   FOR X=0 TO XSIZE-1
      LET Y1=YSIZE/4+YSIZE/4*SIN(RAD(X/(XSIZE/180)+180))
      IF I=2 THEN
         LET Y2=YSIZE*.75-YSIZE/4*SIN(RAD(X/(XSIZE/180)+180))
      ELSE
         LET Y2=YSIZE+YSIZE/4*SIN(RAD(X/(XSIZE/180)+180))
      END IF
      FOR Y=INT(Y1) TO INT(Y2)
         CALL PSET(X,Y,7)
      NEXT  Y
   NEXT  X
   CALL SAVE
NEXT I
FOR Y=0 TO YSIZE-1
   LET X1=XSIZE/4+R/2*SIN(RAD(Y/(YSIZE/180)+180))
   LET X2=XSIZE*.75-XSIZE/4*SIN(RAD(Y/(YSIZE/180)+180))
   FOR X=INT(X1) TO INT(X2)
      CALL PSET(X,Y,7)
   NEXT X
NEXT Y
CALL SAVE
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF X=XX AND Y=YY THEN LET TH=0 ELSE LET TH=ANGLE(X-XX,Y-YY)
      LET RR=MIN(XSIZE/5,YSIZE/5)*(1+COS(5*TH+PI/2))
      IF SQR((Y-YY)^2+(X-XX)^2)<RR THEN CALL PSET(X,Y,7)
   NEXT X
NEXT Y
CALL SAVE
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF X=XX AND Y=YY THEN LET TH=0 ELSE LET TH=ANGLE(X-XX,Y-YY)
      LET RR=MIN(XSIZE/6,YSIZE/6)*(2+COS(5*TH))
      IF SQR((Y-YY)^2+(X-XX)^2)<RR THEN CALL PSET(X,Y,7)
   NEXT X
NEXT Y
CALL SAVE
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF ((X-XX)*(X-XX)+SQR(2)*(X-XX)*(Y-YY)+(Y-YY)*(Y-YY)-R/2*R/2)<0 OR ((X-XX)*(X-XX)-SQR(2)*(X-XX)*(Y-YY)+(Y-YY)*(Y-YY)-R/2*R/2)<0 THEN CALL PSET(X,Y,7)
   NEXT X
NEXT Y
CALL SAVE
FOR I=2 TO 5
   CALL NAMI(XX,YY,R*.6,R/4,I,7)
   PAINT XX,YY
   CALL SAVE
NEXT I
CALL NAMI(XX,YY,R*.9,20,20,7)
PAINT XX,YY
CALL SAVE
CALL HAGURUMA(XX,YY,R*.9,20,20,7)
PAINT XX,YY
CALL SAVE
LET XO(1)=0
LET YO(1)=0
LET XO(2)=XX
LET YO(2)=YSIZE-1
LET XO(3)=XSIZE-1
LET YO(3)=0
LET X1=XO(1)
LET Y1=YO(1)
FOR X=0 TO XSIZE-1
   LET Y=LARGRANGE(XO,YO,3,X)
   CALL LINE(X1,Y1,X,Y,7)
   LET X1=X
   LET Y1=Y
NEXT  X
PAINT XX,YY
CALL SAVE
LET XO(1)=0
LET YO(1)=0
LET XO(2)=XSIZE/4
LET YO(2)=YSIZE-1
LET XO(3)=XX
LET YO(3)=YSIZE*.75
LET XO(4)=XSIZE*.75
LET YO(4)=YSIZE-1
LET XO(5)=XSIZE-1
LET YO(5)=0
LET X1=XO(1)
LET Y1=YO(1)
FOR X=0 TO XSIZE-1
   LET Y=LARGRANGE(XO,YO,5,X)
   CALL LINE(X1,Y1,X,Y,7)
   LET X1=X
   LET Y1=Y
NEXT  X
PAINT XX,YY
CALL SAVE
DIM TT(10)
LET XO(1)=0
LET YO(1)=0
LET TT(1)=0
LET XO(2)=XSIZE*.2
LET YO(2)=YY
LET TT(2)=.5
LET XO(3)=0
LET YO(3)=YSIZE-1
LET TT(3)=1
FOR T=0 TO 1 STEP 1/16
   LET X=LARGRANGE(TT,XO,3,T)
   LET Y=LARGRANGE(TT,YO,3,T)
   IF T=0 THEN
      LET X1=X
      LET Y1=Y
   END IF
   CALL LINE(X1,Y1,X,Y,7)
   CALL LINE(XSIZE-X1,Y1,XSIZE-X,Y,7)
   LET X1=X
   LET Y1=Y
NEXT  T
LET XO(1)=0
LET YO(1)=0
LET TT(1)=0
LET XO(2)=XX
LET YO(2)=YSIZE*.2
LET TT(2)=.5
LET XO(3)=XSIZE-1
LET YO(3)=0
LET TT(3)=1
FOR T=0 TO 1 STEP 1/16
   LET X=LARGRANGE(TT,XO,3,T)
   LET Y=LARGRANGE(TT,YO,3,T)
   IF T=0 THEN
      LET X1=X
      LET Y1=Y
   END IF
   CALL LINE(X1,Y1,X,Y,7)
   CALL LINE(X1,YSIZE-Y1,X,YSIZE-Y,7)
   LET X1=X
   LET Y1=Y
NEXT  T
PAINT XX,YY
CALL SAVE
SET TEXT HEIGHT MIN(XSIZE,YSIZE)*.8
SET TEXT COLOR 7
SET TEXT JUSTIFY "LEFT" , "TOP"
PLOT TEXT ,AT 0,0:"A"
CALL SAVE

SUB SAVE
   LET NUM=NUM+1
   GSAVE STR$(NUM)&".gif"
   PRINT NUM
   WAIT DELAY 1
   CLEAR
END SUB

SUB TRANS
   SET AREA COLOR 4
   PAINT 0,0
   FOR Y=0 TO YSIZE-1
      FOR X=0 TO XSIZE-1
         IF GETPOINT(X,Y)=4 THEN CALL PSET(X,Y,0) ELSE CALL PSET(X,Y,7)
      NEXT X
   NEXT Y
   CALL SAVE
END SUB
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL SUB POLY(X,Y,R,C,S,E,ST)
LET X0=X+R*COS(S*PI/180)
LET Y0=Y-R*SIN(S*PI/180)
FOR TH=S+ST TO E STEP ST
   LET X1=X+R*COS(TH*PI/180)
   LET Y1=Y-R*SIN(TH*PI/180)
   CALL LINE(X0,Y0,X1,Y1,C)
   LET X0=X1
   LET Y0=Y1
NEXT TH
END SUB

EXTERNAL SUB CIRCLEFULL(X,Y,R1,R2,C)
SET COLOR C
DRAW DISK WITH SCALE(R1,R2)*SHIFT(X,Y)
END SUB

EXTERNAL SUB SECTOR(XX,YY,R,A,C)
DIM XO(90-A/2 TO 90+A/2+1),YO(90-A/2 TO 90+A/2+1)
FOR T=90-A/2 TO 90+A/2
   LET XO(T)=XX+R*COS(RAD(T))
   LET YO(T)=YY-R*SIN(RAD(T))
NEXT T
LET XO(90+A/2+1)=XX
LET YO(90+A/2+1)=YY
SET AREA COLOR C
MAT PLOT AREA,LIMIT A+2:XO,YO
END SUB
 

Re: マスク画像サンプル

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時13分4秒
  > No.3722[元記事へ]

続き

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL FUNCTION GETPOINT(X,Y)
ASK PIXEL VALUE(X,Y) C
LET GETPOINT=C
END FUNCTION

EXTERNAL SUB LINE(XS,YS,XE,YE,C)
SET COLOR C
PLOT LINES
PLOT LINES:INT(XS),INT(YS);INT(XE),INT(YE)
END SUB

EXTERNAL SUB NAMI(X,Y,R,R1,N,C)
IF R<R1 THEN LET R1=R
FOR TH=0 TO 360
   LET R2=R1*SIN(N*TH*PI/180+PI/2)
   LET X1=X+(R+R2)*COS(TH*PI/180+PI/2)
   LET Y1=Y-(R+R2)*SIN(TH*PI/180+PI/2)
   IF TH=0 THEN
      LET X0=X1
      LET Y0=Y1
      LET XS=X0
      LET YS=Y0
   END IF
   CALL LINE(X0,Y0,X1,Y1,C)
   LET X0=X1
   LET Y0=Y1
NEXT TH
CALL LINE(X1,Y1,XS,YS,C)
END SUB

EXTERNAL SUB HAGURUMA(X,Y,R,R1,N,C)
IF R<R1 THEN LET R1=R
FOR TH=0 TO 360
   LET R2=R1*SGN(SIN(N*TH*PI/180+PI/2))
   LET X1=X+(R+R2)*COS(TH*PI/180+PI/2)
   LET Y1=Y-(R+R2)*SIN(TH*PI/180+PI/2)
   IF TH=0 THEN
      LET X0=X1
      LET Y0=Y1
      LET XS=X0
      LET YS=Y0
   END IF
   CALL LINE(X0,Y0,X1,Y1,C)
   LET X0=X1
   LET Y0=Y1
NEXT TH
CALL LINE(X1,Y1,XS,YS,C)
END SUB

EXTERNAL FUNCTION LARGRANGE(X(),Y(),N,T)
FOR I=1 TO N
   LET R=Y(I)
   FOR J=1 TO N
      IF I<>J THEN LET R=R*(T-X(J))/(X(I)-X(J))
   NEXT J
   LET S=S+R
NEXT I
LET LARGRANGE=S
END FUNCTION
 

アフィン変換(回転変換)

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時13分54秒
  !'アフィン変換(回転変換)
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY(0,0) M
LET XM=INT(XSIZE/2) !'回転中心
LET YM=INT(YSIZE/2)
INPUT  PROMPT "回転角度=":TH
LET C=COS(RAD(TH))
LET S=SIN(RAD(TH))
LET XA=INT((0-XM)*C-(0-YM)*S+XM)
LET YA=INT((0-XM)*S+(0-YM)*C+YM)
LET XB=INT((0-XM)*C-(YSIZE-1-YM)*S+XM)
LET YB=INT((0-XM)*S+(YSIZE-1-YM)*C+YM)
LET XC=INT((XSIZE-1-XM)*C-(YSIZE-1-YM)*S+XM)
LET YC=INT((XSIZE-1-XM)*S+(YSIZE-1-YM)*C+YM)
LET XD=INT((XSIZE-1-XM)*C-(0-YM)*S+XM)
LET YD=INT((XSIZE-1-XM)*S+(0-YM)*C+YM)
LET XMIN=MIN(MIN(XA,XB),MIN(XC,XD))
LET YMIN=MIN(MIN(YA,YB),MIN(YC,YD))
LET XMAX=MAX(MAX(XA,XB),MAX(XC,XD))
LET YMAX=MAX(MAX(YA,YB),MAX(YC,YD))
CALL GINIT(XMAX-XMIN+1,YMAX-YMIN+1)
!' アフィン変換(回転変換)
!' X'=X*COS(T)-Y*SIN(T)
!' Y'=X*SIN(T)+Y*COS(T)
!' 逆変換
!' X=Y'*SIN(T)+X'*COS(T)
!' Y=Y'*COS(T)-X'*SIN(T)
FOR Y=YMIN TO YMAX
   FOR X=XMIN TO XMAX
      LET XA=(Y-YM)*SIN(RAD(TH))+(X-XM)*COS(RAD(TH))+XM
      LET YA=(Y-YM)*COS(RAD(TH))-(X-XM)*SIN(RAD(TH))+YM
      IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN
         CALL RGB(M(INT(XA),INT(YA)),RR,GG,BB)
         CALL PSET(X-XMIN,Y-YMIN,RR,GG,BB)
      END IF
   NEXT X
NEXT Y
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

アフィン変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時14分27秒
  !'アフィン変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
IF F$="" THEN STOP
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1),A(3,3),B(3),D(3,3)
DIM A1(2),B1(2),C1(2),D1(2),E1(2),F1(2),AX(2),BX(2),CX(2),AY(2),BY(2),CY(2)
ASK PIXEL ARRAY(0,0) M
!'入力画像
LET XA=XSIZE*.3 !'任意の四角形 左上(XA,YA)-右上(XB,YB)-右下(XC,YC)-左下(XD,YD)
LET YA=YSIZE*.1 !'三角形 (XA,YA)-(XB,YB)-(XC,YC)と
LET XB=XSIZE*.8 !'三角形 (XA,YA)-(XC,YC)-(XD,YD)に分割
LET YB=YSIZE*.05
LET XC=XSIZE*.9
LET YC=YSIZE*.8
LET XD=XSIZE*.1
LET YD=YSIZE*.9
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF AREA4(XA,YA,XB,YB,XC,YC,XD,YD,X,Y)=0 THEN CALL PSET(X,Y,0,0,0)
   NEXT X
NEXT Y
!'出力画像
LET X1=XSIZE*.1 !'任意の四角形 左上(X1,Y1)- 右上(X2,Y2)-右下(X3,Y3)-左下(X4,Y4)
LET Y1=YSIZE*.3 !'三角形 (X1,Y1)-(X2,Y2)-(X3,Y3)と
LET X2=XSIZE*.9 !'三角形 (X1,Y1)-(X3,Y3)-(X4,Y4)に分割
LET Y2=YSIZE*.1
LET X3=XSIZE*.7
LET Y3=YSIZE*.8
LET X4=XSIZE*.2
LET Y4=YSIZE*.9
!'INPUT  PROMPT "ROTATE (0 - 3)=":N
!'CALL ROTATE(N,X1,X2,X3,X4) !'座標回転 (X1,Y1)-(X2,Y2)-(X3,Y3)-(X4,Y4) → (X2,Y2)-(X3,Y3)-(X4,Y4)-(X1,Y1) →
!'CALL ROTATE(N,Y1,Y2,Y3,Y4) !'         (X3,Y3)-(X4,Y4)-(X1,Y1)-(X2,Y2) → (X4,Y4)-(X1,Y1)-(X2,Y2)-(X3,Y3)
!' アフィン変換
!' X'=A*X+B*Y+C
!' Y'=D*X+E*Y+F
!'三元連立方程式
!' (A)(XA YA 1) (X1)
!' (B)(XB YB 1)=(X2)
!' (C)(XC YC 1) (X3)
LET A(1,1)=XA
LET A(1,2)=YA
LET A(1,3)=1
LET A(2,1)=XB
LET A(2,2)=YB
LET A(2,3)=1
LET A(3,1)=XC
LET A(3,2)=YC
LET A(3,3)=1
LET B(1)=X1
LET B(2)=X2
LET B(3)=X3
LET AX(1)=B(1)
LET BX(1)=B(2)
LET CX(1)=B(3)
MAT D=INV(A)
MAT B=D*B
LET A1(1)=B(1)
LET B1(1)=B(2)
LET C1(1)=B(3)
!'三元連立方程式
!' (D)(XA YA 1) (Y1)
!' (E)(XB YB 1)=(Y2)
!' (F)(XC YC 1) (Y3)
LET B(1)=Y1
LET B(2)=Y2
LET B(3)=Y3
LET AY(1)=B(1)
LET BY(1)=B(2)
LET CY(1)=B(3)
MAT D=INV(A)
MAT B=D*B
LET D1(1)=B(1)
LET E1(1)=B(2)
LET F1(1)=B(3)
!'三元連立方程式
!' (A)(XA YA 1) (X1)
!' (B)(XC YC 1)=(X3)
!' (C)(XD YD 1) (X4)
LET A(1,1)=XA
LET A(1,2)=YA
LET A(1,3)=1
LET A(2,1)=XC
LET A(2,2)=YC
LET A(2,3)=1
LET A(3,1)=XD
LET A(3,2)=YD
LET A(3,3)=1
LET B(1)=X1
LET B(2)=X3
LET B(3)=X4
LET AX(2)=B(1)
LET BX(2)=B(2)
LET CX(2)=B(3)
MAT D=INV(A)
MAT B=D*B
LET A1(2)=B(1)
LET B1(2)=B(2)
LET C1(2)=B(3)
!'三元連立方程式
!' (D)(XA YA 1) (Y1)
!' (E)(XC YC 1)=(Y3)
!' (F)(XD YD 1) (Y4)
LET B(1)=Y1
LET B(2)=Y3
LET B(3)=Y4
LET AY(2)=B(1)
LET BY(2)=B(2)
LET CY(2)=B(3)
MAT D=INV(A)
MAT B=D*B
LET D1(2)=B(1)
LET E1(2)=B(2)
LET F1(2)=B(3)
WAIT DELAY 2
CLEAR
SET COLOR COLORINDEX (1,0,0)
PLOT AREA : X1,Y1;X2,Y2;X3,Y3
SET COLOR COLORINDEX (0,1,0)
PLOT AREA : X1,Y1;X3,Y3;X4,Y4
FOR YY=0 TO YSIZE-1
   FOR XX=0 TO XSIZE-1
      FOR I=1 TO 2
         IF AREA3(AX(I),AY(I),BX(I),BY(I),CX(I),CY(I),XX,YY)<>0 THEN
            CALL SOLVE(A1(I),B1(I),C1(I),D1(I),E1(I),F1(I),XX,YY,X,Y)
            IF X>=0 AND X<=XSIZE-1 AND Y>=0 AND Y<=YSIZE-1 THEN
               LET CC=M(INT(X),INT(Y))
               CALL RGB(CC,RR,GG,BB)
               CALL PSET(XX,YY,RR,GG,BB)
               EXIT FOR
            END IF
         END IF
      NEXT I
   NEXT XX
NEXT YY
END

EXTERNAL SUB SOLVE(A,B,C,D,E,F,XX,YY,X,Y)
!'A*X+B*Y+C=XX
!'D*X+E*Y+F=YY
LET X = -(B*(F-YY)+E*XX-C*E)/(B*D-A*E)
LET Y = (A*(F-YY)+D*XX-C*D)/(B*D-A*E)
END SUB

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL FUNCTION TRIANGLE(X1,Y1,X2,Y2,X3,Y3) !'三角形の面積
LET TRIANGLE=ABS(X1*Y2+X2*Y3+X3*Y1-X2*Y1-X3*Y2-Y3*X1)/2
END FUNCTION

EXTERNAL FUNCTION AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY) !'点(PX,PY)が三角形内か
LET T=TRIANGLE(X1,Y1,X2,Y2,X3,Y3)
LET A=TRIANGLE(X1,Y1,X2,Y2,PX,PY)
LET B=TRIANGLE(X2,Y2,X3,Y3,PX,PY)
LET C=TRIANGLE(X1,Y1,X3,Y3,PX,PY)
IF ABS(A+B+C-T)<1 THEN LET AREA3=-1 ELSE LET AREA3=0
END FUNCTION

EXTERNAL FUNCTION AREA4(X1,Y1,X2,Y2,X3,Y3,X4,Y4,PX,PY) !'点(PX,PY)が四角形内か
LET A=AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY)
LET B=AREA3(X1,Y1,X4,Y4,X3,Y3,PX,PY)
IF A<>0 OR B<>0 THEN LET AREA4=-1 ELSE LET AREA4=0
END FUNCTION

EXTERNAL  SUB ROTATE(N,A,B,C,D)
FOR I=1 TO N
   LET T=B
   LET B=A
   LET A=D
   LET D=C
   LET C=T
NEXT I
END SUB

 

共一次変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時15分5秒
  !'共一次変換(擬似アフィン変換)
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
IF F$="" THEN STOP
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1)
ASK PIXEL ARRAY(0,0) M
!' 共一次変換
!' X=A*S*T+B*S+C*T+D (0<=S<=1)(0<=T<=1)
!' Y=E*S*T+F*S+G*T+H
!'S=0,T=0 の時,左上(XA,YA) D=XA,H=YA
!'S=1,T=0 の時,右上(XB,YB) B+XA=XB,F+YA=YB   B=XB-XA,F=YB-YA
!'S=0,T=1 の時,左下(XD,YD) C+XA=XD,G+YA=YD   C=XD-XA,G=YD-YA
!'S=1,T=1 の時,右下(XC,YC) A+XB-XA+XD-XA+XA=XC,E+YB-YA+YD-YA+YA=YC   A=XC+XA-XD-XB,E=YA+YC-YD-YB
LET XA=XSIZE*.3 !'任意の四角形  左上(XA,YA)-右上(XB,YB)-右下(XC,YC)-左下(XD,YD)
LET YA=YSIZE*.1
LET XB=XSIZE*.8
LET YB=YSIZE*.05
LET XC=XSIZE*.9
LET YC=YSIZE*.8
LET XD=XSIZE*.1
LET YD=YSIZE*.9
CLEAR
SET COLOR COLORINDEX(1,0,0)
PLOT AREA : XA,YA;XB,YB;XC,YC;XD,YD
FOR YY=0 TO YSIZE-1
   FOR XX=0 TO XSIZE-1
      LET S=XX/(XSIZE-1)
      LET T=YY/(YSIZE-1)
      LET X=INT((XA+XC-XD-XB)*S*T+(XD-XA)*T+(XB-XA)*S+XA) !'共一次変換
      LET Y=INT((YA+YC-YD-YB)*S*T+(YD-YA)*T+(YB-YA)*S+YA)
      CALL RGB(M(XX,YY),R,G,B)
      CALL PSET(X,Y,R,G,B)
   NEXT XX
NEXT YY
END

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB
 

共一次変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時16分1秒
  !'共一次変換(擬似アフィン変換)
PUBLIC NUMERIC  XSIZE,YSIZE
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
IF F$="" THEN STOP
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1),A(4,4),D(4)
ASK PIXEL ARRAY(0,0) M
!'入力画像
LET XA=XSIZE*.3 !'任意の四角形 左上(XA,YA)-右上(XB,YB)-右下(XC,YC)-左下(XD,YD)
LET YA=YSIZE*.1
LET XB=XSIZE*.8
LET YB=YSIZE*.05
LET XC=XSIZE*.9
LET YC=YSIZE*.8
LET XD=XSIZE*.1
LET YD=YSIZE*.9
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF AREA4(XA,YA,XB,YB,XC,YC,XD,YD,X,Y)=0 THEN CALL PSET(X,Y,0,0,0)
   NEXT X
NEXT Y
!'出力画像
LET X1=XSIZE*.1 !'任意の四角形 左上(X1,Y1)- 右上(X2,Y2)-右下(X3,Y3)-左下(X4,Y4)
LET Y1=YSIZE*.3
LET X2=XSIZE*.9
LET Y2=YSIZE*.1
LET X3=XSIZE*.7
LET Y3=YSIZE*.8
LET X4=XSIZE*.2
LET Y4=YSIZE*.9
!'INPUT  PROMPT "ROTATE (0 - 3)=":N
!'CALL ROTATE(N,X1,X2,X3,X4) !'座標回転 (X1,Y1)-(X2,Y2)-(X3,Y3)-(X4,Y4) → (X2,Y2)-(X3,Y3)-(X4,Y4)-(X1,Y1) →
!'CALL ROTATE(N,Y1,Y2,Y3,Y4) !'         (X3,Y3)-(X4,Y4)-(X1,Y1)-(X2,Y2) → (X4,Y4)-(X1,Y1)-(X2,Y2)-(X3,Y3)
WAIT DELAY 2
CLEAR
SET COLOR COLORINDEX (1,0,0)
PLOT AREA : X1,Y1;X2,Y2;X3,Y3;X4,Y4
!'共一次変換(擬似アフィン変換)
!' X'=A*X*Y+B*X+C*Y+D
!' Y'=E*X*Y+F*X+G*Y+H
!'4元連立方程式
!'A*XA*YA+B*XA+C*YA+D=X1
!'A*XB*YB+B*XB+C*YB+D=X2
!'A*XC*YC+B*XC+C*YC+D=X3
!'A*XD*YD+B*XD+C*YD+D=X4
LET A(1,1)=XA*YA
LET A(1,2)=XA
LET A(1,3)=YA
LET A(1,4)=1
LET D(1)=X1
LET A(2,1)=XB*YB
LET A(2,2)=XB
LET A(2,3)=YB
LET A(2,4)=1
LET D(2)=X2
LET A(3,1)=XC*YC
LET A(3,2)=XC
LET A(3,3)=YC
LET A(3,4)=1
LET D(3)=X3
LET A(4,1)=XD*YD
LET A(4,2)=XD
LET A(4,3)=YD
LET A(4,4)=1
LET D(4)=X4
MAT A=INV(A)
MAT D=A*D
LET A1=D(1)
LET B1=D(2)
LET C1=D(3)
LET D1=D(4)
!'4元連立方程式
!'E*XA*YA+F*XA+G*YA+H=Y1
!'E*XB*YB+F*XB+G*YB+H=Y2
!'E*XC*YC+F*XC+G*YC+H=Y3
!'E*XD*YD+F*XD+G*YD+H=Y4
LET A(1,1)=XA*YA
LET A(1,2)=XA
LET A(1,3)=YA
LET A(1,4)=1
LET D(1)=Y1
LET A(2,1)=XB*YB
LET A(2,2)=XB
LET A(2,3)=YB
LET A(2,4)=1
LET D(2)=Y2
LET A(3,1)=XC*YC
LET A(3,2)=XC
LET A(3,3)=YC
LET A(3,4)=1
LET D(3)=Y3
LET A(4,1)=XD*YD
LET A(4,2)=XD
LET A(4,3)=YD
LET A(4,4)=1
LET D(4)=Y4
MAT A=INV(A)
MAT D=A*D
LET E1=D(1)
LET F1=D(2)
LET G1=D(3)
LET H1=D(4)
FOR YY=0 TO YSIZE-1
   FOR XX=0 TO XSIZE-1
      IF AREA4(X1,Y1,X2,Y2,X3,Y3,X4,Y4,XX,YY)<>0 THEN
         CALL SOLVE(A1,B1,C1,D1-XX,E1,F1,G1,H1-YY,XA,YA)
         IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN
            CALL RGB(M(XA,YA),R,G,B)
            CALL PSET(XX,YY,R,G,B)
         END IF
      END IF
   NEXT XX
NEXT YY
END

EXTERNAL SUB SOLVE(A,B,C,D,E,F,G,H,XA,YA)
!'  X,Yについて解く(逆変換)
!'   A*X*Y+B*X+C*Y+D=0...(1)
!'   E*X*Y+F*X+G*Y+H=0...(2)
!'     X*(A*Y+B)=-C*Y-D  (1)の式より...(3)
!'   E*X*Y*(A*Y+B)+F*X*(A*Y+B)+G*Y*(A*Y+B)+H*(A*Y+B)=0 (2)の式に(A*Y+B)を掛ける
!'   E*Y*(-C*Y-D) +F*(-C*Y-D) +G*Y*(A*Y+B)+H*(A*Y+B)=0 (3)の式を代入
!'   Y^2*(-E*C+A*G)+Y*(-E*D-F*C+G*B+A*H)+(-F*D+H*B)=0  Yについての2次方程式
!'   X=(-C*Y-D)/(A*Y+B) (3)の式より変形
LET AA=-E*C+A*G
LET BB=-E*D-F*C+G*B+A*H
LET CC=-F*D+H*B
LET DD=BB*BB-4*AA*CC
IF DD<0 THEN
   LET XA=-1
   LET YA=-1
   EXIT SUB
END IF
LET YA=INT((-BB+SQR(DD))/(2*AA))
LET XA=INT((-C*YA-D)/(A*YA+B))
IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN EXIT SUB
LET YA=INT((-BB-SQR(DD))/(2*AA))
LET XA=INT((-C*YA-D)/(A*YA+B))
IF XA>=0 AND XA<=XSIZE-1 AND YA>=0 AND YA<=YSIZE-1 THEN EXIT SUB
LET XA=-1
LET YA=-1
END SUB

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL FUNCTION TRIANGLE(X1,Y1,X2,Y2,X3,Y3) !'三角形の面積
LET TRIANGLE=ABS(X1*Y2+X2*Y3+X3*Y1-X2*Y1-X3*Y2-Y3*X1)/2
END FUNCTION

EXTERNAL FUNCTION AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY) !'点(PX,PY)が三角形内か
LET T=TRIANGLE(X1,Y1,X2,Y2,X3,Y3)
LET A=TRIANGLE(X1,Y1,X2,Y2,PX,PY)
LET B=TRIANGLE(X2,Y2,X3,Y3,PX,PY)
LET C=TRIANGLE(X1,Y1,X3,Y3,PX,PY)
IF ABS(A+B+C-T)<1 THEN LET AREA3=-1 ELSE LET AREA3=0
END FUNCTION

EXTERNAL FUNCTION AREA4(X1,Y1,X2,Y2,X3,Y3,X4,Y4,PX,PY) !'点(PX,PY)が四角形内か
LET A=AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY)
LET B=AREA3(X1,Y1,X4,Y4,X3,Y3,PX,PY)
IF A<>0 OR B<>0 THEN LET AREA4=-1 ELSE LET AREA4=0
END FUNCTION

EXTERNAL  SUB ROTATE(N,A,B,C,D)
FOR I=1 TO N
   LET T=B
   LET B=A
   LET A=D
   LET D=C
   LET C=T
NEXT I
END SUB
 

平面射影変換

 投稿者:しばっち  投稿日:2015年 5月30日(土)22時16分41秒
  !' 平面射影変換
FILE GETNAME F$,"BMP,JPG,GIF,PNGファイル|*.BMP;*.JPG;*.GIF;*.PNG"
IF F$="" THEN STOP
CALL PICTURELOAD(F$,XSIZE,YSIZE)
DIM M(0 TO XSIZE-1,0 TO YSIZE-1),A(8,8),D(8)
ASK PIXEL ARRAY(0,0) M
!'入力画像
LET XA=XSIZE*.3 !'任意の四角形 左上(XA,YA)-右上(XB,YB)-右下(XC,YC)-左下(XD,YD)
LET YA=YSIZE*.1
LET XB=XSIZE*.8
LET YB=YSIZE*.05
LET XC=XSIZE*.9
LET YC=YSIZE*.8
LET XD=XSIZE*.1
LET YD=YSIZE*.9
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      IF AREA4(XA,YA,XB,YB,XC,YC,XD,YD,X,Y)=0 THEN CALL PSET(X,Y,0,0,0)
   NEXT X
NEXT Y
!'出力画像
LET X1=XSIZE*.1 !'任意の四角形 左上(X1,Y1)- 右上(X2,Y2)-右下(X3,Y3)-左下(X4,Y4)
LET Y1=YSIZE*.3
LET X2=XSIZE*.9
LET Y2=YSIZE*.1
LET X3=XSIZE*.7
LET Y3=YSIZE*.8
LET X4=XSIZE*.2
LET Y4=YSIZE*.9
!'INPUT  PROMPT "ROTATE (0 - 3)=":N
!'CALL ROTATE(N,X1,X2,X3,X4) !'座標回転 (X1,Y1)-(X2,Y2)-(X3,Y3)-(X4,Y4) → (X2,Y2)-(X3,Y3)-(X4,Y4)-(X1,Y1) →
!'CALL ROTATE(N,Y1,Y2,Y3,Y4) !'         (X3,Y3)-(X4,Y4)-(X1,Y1)-(X2,Y2) → (X4,Y4)-(X1,Y1)-(X2,Y2)-(X3,Y3)
WAIT DELAY 2
CLEAR
SET COLOR COLORINDEX (1,0,0)
PLOT AREA : X1,Y1;X2,Y2;X3,Y3;X4,Y4
!'  平面射影変換
!'  X'=(A*X+B*Y+C)/(G*X+H*Y+1)
!'  Y'=(D*X+E*F+C)/(G*X+H*Y+1)

!'  A*X+B*Y+C-X'*(G*X+H*Y)=X'
!'  D*X+E*Y+F-Y'*(G*X+H*Y)=Y'
!' 八元連立方程式
!'(A)(XA, YA, 1, 0, 0, 0,-X1*XA,-X1*YA) (X1)
!'(B)(XB, YB, 1, 0, 0, 0,-X2*XB,-X2*YB) (X2)
!'(C)(XC, YC, 1, 0, 0, 0,-X3*XC,-X3*YC) (X3)
!'(D)(XD, YD, 1, 0, 0, 0,-X4*XD,-X4*YD) (X4)
!'(E)( 0,  0, 0,XA,YA, 1,-Y1*XA,-Y1*YA)=(Y1)
!'(F)( 0,  0, 0,XB,YB, 1,-Y2*XB,-Y2*YB) (Y2)
!'(G)( 0,  0, 0,XC,YC, 1,-Y3*XC,-Y3*YC) (Y3)
!'(H)( 0,  0, 0,XD,YD, 1,-Y4*XD,-Y4*YD) (Y4)
LET A(1,1)=XA
LET A(1,2)=YA
LET A(1,3)=1
LET A(1,7)=-X1*XA
LET A(1,8)=-X1*YA
LET D(1)=X1
LET A(2,1)=XB
LET A(2,2)=YB
LET A(2,3)=1
LET A(2,7)=-X2*XB
LET A(2,8)=-X2*YB
LET D(2)=X2
LET A(3,1)=XC
LET A(3,2)=YC
LET A(3,3)=1
LET A(3,7)=-X3*XC
LET A(3,8)=-X3*YC
LET D(3)=X3
LET A(4,1)=XD
LET A(4,2)=YD
LET A(4,3)=1
LET A(4,7)=-X4*XD
LET A(4,8)=-X4*YD
LET D(4)=X4
LET A(5,4)=XA
LET A(5,5)=YA
LET A(5,6)=1
LET A(5,7)=-Y1*XA
LET A(5,8)=-Y1*YA
LET D(5)=Y1
LET A(6,4)=XB
LET A(6,5)=YB
LET A(6,6)=1
LET A(6,7)=-Y2*XB
LET A(6,8)=-Y2*YB
LET D(6)=Y2
LET A(7,4)=XC
LET A(7,5)=YC
LET A(7,6)=1
LET A(7,7)=-Y3*XC
LET A(7,8)=-Y3*YC
LET D(7)=Y3
LET A(8,4)=XD
LET A(8,5)=YD
LET A(8,6)=1
LET A(8,7)=-Y4*XD
LET A(8,8)=-Y4*YD
LET D(8)=Y4
MAT A=INV(A)
MAT D=A*D
LET A1=D(1)
LET B1=D(2)
LET C1=D(3)
LET D1=D(4)
LET E1=D(5)
LET F1=D(6)
LET G1=D(7)
LET H1=D(8)
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
   !' X,Yについて解く(逆変換)
   !'  X'=(A*X+B*Y+C)/(G*X+H*Y+1)
   !'  Y'=(D*X+E*Y+F)/(G*X+H*Y+1)

   !'  A*X+B*Y+C-X'(G*X+H*Y+1)=0
   !'  D*X+E*Y+F-Y'(G*X+H*Y+1)=0
   !'  X,Yについてまとめる
   !'  X(A-G*X')+Y(B-X'*H)=X'-C
   !'  X(D-G*Y')+Y(E-Y'*H)=Y'-F
      IF AREA4(X1,Y1,X2,Y2,X3,Y3,X4,Y4,X,Y)<>0 THEN
         CALL SOLVE(A1-G1*X,B1-X*H1,X-C1,D1-G1*Y,E1-Y*H1,Y-F1,XA,YA)
         IF XA>=0 AND YA>=0 AND XA<=XSIZE-1 AND YA<=YSIZE-1 THEN
            CALL RGB(M(XA,YA),RR,GG,BB)
            CALL PSET(X,Y,RR,GG,BB)
         END IF
      END IF
   NEXT X
NEXT Y
END

EXTERNAL FUNCTION AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY)
LET T=TRIANGLE(X1,Y1,X2,Y2,X3,Y3)
LET A=TRIANGLE(X1,Y1,X2,Y2,PX,PY)
LET B=TRIANGLE(X2,Y2,X3,Y3,PX,PY)
LET C=TRIANGLE(X1,Y1,X3,Y3,PX,PY)
IF ABS(A+B+C-T)<3 THEN LET AREA3=-1 ELSE LET AREA3=0
END FUNCTION

EXTERNAL FUNCTION AREA4(X1,Y1,X2,Y2,X3,Y3,X4,Y4,PX,PY)
LET A=AREA3(X1,Y1,X2,Y2,X3,Y3,PX,PY)
LET B=AREA3(X1,Y1,X4,Y4,X3,Y3,PX,PY)
IF A<>0 OR B<>0 THEN LET AREA4=-1 ELSE LET AREA4=0
END FUNCTION

EXTERNAL SUB SOLVE(A1,B1,C1,A2,B2,C2,X,Y)
!'A1*X+B1*Y=C1
!'A2*X+B2*Y=C2
LET DD=A1*B2-A2*B1
IF DD=0 THEN
   LET X=-1
   LET Y=-1
ELSE
   LET X=(C1*B2-C2*B1)/DD
   LET Y=(A1*C2-A2*C1)/DD
END IF
END SUB

EXTERNAL FUNCTION TRIANGLE(X1,Y1,X2,Y2,X3,Y3)
LET TRIANGLE=ABS(X1*Y2+X2*Y3+X3*Y1-X2*Y1-X3*Y2-Y3*X1)/2
END FUNCTION

EXTERNAL SUB RGB(X,R,G,B)
LET B=MOD(INT(X/65536),256)
LET G=MOD(INT(X/256),256)
LET R=MOD(X,256)
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
SET COLOR COLORINDEX(R/255,G/255,B/255)
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB PICTURELOAD(N$,XSIZE,YSIZE)
CLEAR
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
GLOAD N$
LET XSIZE=PIXELX(1)
LET YSIZE=PIXELY(1)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL  SUB ROTATE(N,A,B,C,D)
FOR I=1 TO N
   LET T=B
   LET B=A
   LET A=D
   LET D=C
   LET C=T
NEXT I
END SUB
 

シリアルポート接続で正常にクローズされない?

 投稿者:yanyan  投稿日:2015年 6月 1日(月)14時41分13秒
  下記のようなサンプルでデバイスの動作確認したところ、1度目は正常動作するが、2度目はデバイスをリセットしないと、EXTYPE7101エラーが発生し、正常動作しない。またKernel32で直接DLL動作確認したところ正常でした。CLOSEで正常にクローズ(解放)していないようですが、何か回避方法がありますでしょうか?また64ビット機固有の問題でしょうか?

環境)
Win7 64ビット 7601

サンプル)
OPEN #1:NAME "COM4:"
PRINT #1:"AAAA"
LINE input #1:a$
PRINT a$
CLOSE  #1
END
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 1日(月)17時53分46秒
  以前はWindows機2台をRS-232Cケーブルで接続してテストしていたのですが,
最近はCOMポート自体が省かれていることが多くてテストできません。
関係しそうな部分のソースコードを貼っておきます。
手続きやメソッドはDelphiのものとWin32APIのものとが混在しています。

   TCommfile=class(TTextDevice1)
           FHandle:THandle;
           Limit:TDateTime;
       constructor create;
       destructor destroy;override;
       procedure open(FName:FNameStr; am:AccessMode; og:OrganizationType; len:integer );override;
       procedure close;override;
       procedure erase(rs:tpRecordSetter; insideofwhen:boolean);override;
       procedure initInput(LineNumb:integer;const prom:AnsiString; TimeLimit:double);override;
       procedure CharacterInput(var s:AnsiString; option:IOoptions);override;
       procedure flush;override;
       function DataFoundForRead:boolean;override;
       function DataFoundForWrite:boolean;override;
       function choose(i1,i2,i3,i4:integer):integer;override;
       function askpointer:Ansistring;override;
       function TrueFile:boolean;override;
       function AskCharacterPending:integer;override;
       function AskTypeAhead:boolean;override;
     private
       function readline:boolean;override;
       procedure PortOpen(const FName:string);
       procedure readchar(var c:char);
       procedure transstring(s:string);
       function GetReceiveLength: Integer;
       procedure ClearReceiveBuf;
       procedure PortClose;
       function ReadByte:char;override;
   end;


resourceString
s_FailedOpen= 'をオープンできませんでした';

procedure TCommFile.PortOpen(const FName:string);
var
  lpCC:TCOMMCONFIG;
  size:dWord;
  LPCommProp:TCommProp;
  LPCOMMTIMEOUTs:TCOMMTIMEOUTs;
  SubName:string;
begin
  if (FHandle <> INVALID_HANDLE_VALUE) or (FName='') then begin
    raise ECommError.Create('');
  end;

  subName:=ExtractPortName(FName);
  if (Length(subName)>=5) and (uppercase(copy(subName,1,3))='COM')
     and (subName[4] in ['1'..'9']) and (subName[5] in ['0'..'9'])
     and ((Length(subName)=5) or (subName[6] in ['0'..'9'])) then
     subName:='\\.\' + subName;

  FHandle := CreateFile(Pchar(SubName),
                        GENERIC_READ or GENERIC_WRITE,// 読み書きアクセス
                        0,                            // 共有の対象としない
                        Nil,                          // セキュリティ属性なし
                        OPEN_EXISTING,                // 通信では必ずこの設定
                        FILE_FLAG_OVERLAPPED,         // オーバーラップ入出力を行う
                        0);                           // テンプレートファイルアクセスなし

  if FHandle = INVALID_HANDLE_VALUE then begin
    raise ECommError.Create(FName+s_FailedOpen);
  end;

  //SetBufferLength;                               // 送受信バッファ長の設定

  GetCommState(FHandle,lpCC.DCB);
  size:=sizeOf(lpCC);
  if GetDefaultCommConfig(PChar(ExtractPortName(FName)),lpCC,size)
     and ((pos(':',Fname)=0) or BuildCommDCB(PChar(FName),lpCC.DCB))
     and SetCommState(FHandle,lpCC.DCB) then
  else
     begin
        PortClose;
        raise ECommError.Create(FName + s_FailedOpen);
     end;

  GetCommTimeOuts(FHandle,LPCOMMTIMEOUTs);
  LPCOMMTIMEOUTS.ReadIntervalTimeout:=0;
  LPCOMMTIMEOUTS.ReadTotalTimeoutConstant:=0;
  SetCommTimeOuts(FHandle,LPCOMMTIMEOUTs);


end;

procedure TCommFile.PortClose;
var
  Msg     : TMsg;
  Handle  : THandle;
begin
  if FHandle <> INVALID_HANDLE_VALUE then
  begin
    CloseHandle(FHandle);                               // 通信ポートをクローズ
    FHandle := INVALID_HANDLE_VALUE;
  end;
end;

procedure TCommFile.open(FName:FNameStr; am:AccessMode; og:OrganizationType; len:integer);
var
   ermess:ansistring;
   s:string;
begin
   if FName='' then setexception(7101);
   if isOpen   then setexception(7003);
   if (rectype=rcDISPLAY) and (og=orgSTREAM) then  setexception(7101);
   if len<=0 then setexception(7051);

   name:=uppercase(FName);
   leng:=len;
   margin:=len;

   AMode:=am;
   OrgType:=og;

   try
     portopen(name);
   except
     on E:exception do
     setexceptionWith(E.Message,7101);
   end;

   isOpen:=true;
   currentChar:='';
end;

BASICAccでも同様でしょうか?
BASICAccでも上とほぼ同じコードを使っているので,
Lazarusをインストールすることで,実機でのデバッグが可能になるかもしれません。
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 2日(火)21時53分59秒
  CLoseHandleの戻り値をチェックしていないので、クローズが正常に行えないのにBASICのCLOSE文が終了してしまっているのかもしれません。

受信バッファが空でないときにCloseHandleを実行するのが原因だとしたら、
DO
ASK CHARACTER PENDING #1:n
IF n=0 THEN EXIT DO
CHARACTER INPUT #1:s$
LOOP
みたいなコードをCLOSE文の直前に追加すれば改善されるはずです。
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:yanyan  投稿日:2015年 6月 3日(水)13時59分5秒
  白石 和夫さんへのお返事です。
齋藤です。
申し訳ありませんが、BASICACCでは確認しておりません。
下記の件について、残データがあるかどうか ASK #1: CHARACTER PENDING nで、確認しましたが、なにも残っていません
でした。また、LINE INPUTにSKIP RESTをオプション追加してみましたが変化ありませんでした。
対応として、Kernel32によるシリアルポート手順を組み込むことは無理でしょうか?なお、使用しているデバイスは、TriState社
のデジタル気圧計(USBで疑似RS-232C動作)です。32ビット環境なら、いろいろなアプリケーションで動いているようです。

> CLoseHandleの戻り値をチェックしていないので、クローズが正常に行えないのにBASICのCLOSE文が終了してしまっているのかもしれません。
>
> 受信バッファが空でないときにCloseHandleを実行するのが原因だとしたら、
> DO
> ASK CHARACTER PENDING #1:n
> IF n=0 THEN EXIT DO
> CHARACTER INPUT #1:s$
> LOOP
> みたいなコードをCLOSE文の直前に追加すれば改善されるはずです。
>
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 3日(水)21時00分24秒
  > No.3732[元記事へ]

64ビットWindowsであっても32ビットのWindows APIを利用することが可能ですので、
Win32 APIとDLLの利用
http://hp.vector.co.jp/authors/VA008683/ExtDLL.htm
を参照してください。
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:yanyan  投稿日:2015年 6月 3日(水)21時49分55秒
  > No.3733[元記事へ]

お世話になります。

当初のNO3729で報告しましたが、WinAPI(Kenel32.DLL)で直接記述したCOM通信では正常にクローズ
(CloseHandleで)しているようです。使い勝手から、マニュアル仕様のOPEN #~/CLOSE  #~で
実現することができませんでしょうか? それともデバイス固有の問題とあきらめるべきでしょうか?

なお、64ビット環境で本デバイスの動作を確認しているアプリは、teraterm-4.86(コンソールタイプ)と
Kenel32.DLLを使用したものです。(Mscomm32.ocx を使用したものはNG)
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 4日(木)07時49分11秒
  > No.3734[元記事へ]

正常にクローズしない原因がわかれば対応可能と思われます。
たとえば、共有フラッグの無指定が原因であるとかです。
お知らせください。
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:山中和義  投稿日:2015年 6月 4日(木)10時56分31秒
  > No.3734[元記事へ]

yanyanさんへのお返事です。

> WinAPI(Kenel32.DLL)で直接記述したCOM通信では正常にクローズ(CloseHandleで)しているようです。


Win32 APIで記述してみました。このプログラムは正しく動作しますか。
実機がありませんので、お手数ですが確認をお願いします。


テストプログラム  http://www.tristate.ne.jp/ftp/manu029.pdf


OPTION CHARACTER BYTE

DECLARE EXTERNAL FUNCTION CloseHandle
DECLARE EXTERNAL FUNCTION CreateFile
DECLARE EXTERNAL FUNCTION ReadFile
DECLARE EXTERNAL FUNCTION WriteFile

DECLARE EXTERNAL FUNCTION BuildCommDCB
DECLARE EXTERNAL FUNCTION GetCommState
DECLARE EXTERNAL FUNCTION GetCommTimeouts
DECLARE EXTERNAL FUNCTION SetCommState
DECLARE EXTERNAL FUNCTION SetCommTimeouts

LET  CONST_GENERIC_READ=BVAL("80000000",16)
LET  CONST_GENERIC_WRITE=BVAL("40000000",16)
LET  CONST_OPEN_EXISTING=3


LET hComm=CreateFile("COM1",CONST_GENERIC_READ+CONST_GENERIC_WRITE,0,0,CONST_OPEN_EXISTING,0,0) !ハンドルを得る
PRINT hComm

IF hComm<0 THEN
   PRINT "オープンできません。"
ELSE
   LET DCB$=REPEAT$("#",3*4+4*2+8*1)
   LET DCB$(1:2)=DWORD$(LEN(DCB$)) !サイズを設定する


   LET rc=GetCommState(hComm, DCB$) !既存の状態を得る
   PRINT rc
   LET rc=BuildCommDCB("9600,n,8,1,p", DCB$) !通信速度などの変更
   PRINT rc
   LET rc=SetCommState(hComm, DCB$) !設定する
   PRINT rc


   !コマンド・レスポンス(計測データを取得する)

   LET wData$="BARH"&CHR$(13)&CHR$(10) !データを送信する
   LET wLen$=REPEAT$("#",4)
   LET rc=WriteFile(hComm, wData$, LEN(wData$), wLen$, 0)
   PRINT rc; int32(wLen$,0) !結果と実際に送信した文字数

   LET rData$=REPEAT$("#",100) !データを受信する
   LET rLen$=REPEAT$("#",4)
   LET rc=ReadFile(hComm, rData$, LEN(rData$), rLen$, 0)
   PRINT rc; int32(rLen$,0) !結果と実際に受信した文字数
   FOR i=0 TO int32(rLen$,0)-1
      PRINT rData$(i:i); !1234.5hPa
   NEXT i


   LET rc=CloseHandle(hComm) !閉じる
   PRINT rc
END IF

END


!Win32 API シリアル伝送用(RS-232C)
EXTERNAL FUNCTION BuildCommDCB(lpDef$, lpDCB$)
ASSIGN "kernel32.dll","BuildCommDCBA"
END FUNCTION

EXTERNAL FUNCTION GetCommState(nCid, lpDCB$)
ASSIGN "kernel32.dll","GetCommState"
END FUNCTION

EXTERNAL FUNCTION GetCommTimeouts(hFile, lpCommTimeouts$)
ASSIGN "kernel32.dll","GetCommTimeouts"
END FUNCTION

EXTERNAL FUNCTION SetCommState(hCommDev, lpDCB$)
ASSIGN "kernel32.dll","SetCommState"
END FUNCTION

EXTERNAL FUNCTION SetCommTimeouts(hFile, lpCommTimeouts$)
ASSIGN "kernel32.dll","SetCommTimeouts"
END FUNCTION


!Win32 API ファイルI/O
EXTERNAL FUNCTION CloseHandle(hObject)
ASSIGN "kernel32.dll","CloseHandle"
END FUNCTION

EXTERNAL FUNCTION CreateFile(lpFileName$, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)
ASSIGN "kernel32.dll","CreateFileA"
END FUNCTION

EXTERNAL FUNCTION ReadFile(hFile, lpBuffer$, nNumberOfBytesToRead, lpNumberOfBytesRead$, lpOverlapped)
ASSIGN "kernel32.dll","ReadFile"
END FUNCTION

EXTERNAL FUNCTION WriteFile(hFile, lpBuffer$, nNumberOfBytesToWrite, lpNumberOfBytesWritten$, lpOverlapped)
ASSIGN "kernel32.dll","WriteFile"
END FUNCTION


!補助ルーチン

EXTERNAL FUNCTION int32(s$,p)
OPTION CHARACTER byte
LET n=0
FOR i=1 TO 4
   LET n=n+256^(i-1)*ORD(s$(p+i:p+i))
NEXT i
IF n<2^31 THEN LET int32=n ELSE LET int32=n-2^32
END FUNCTION


 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:yanyan  投稿日:2015年 6月 4日(木)12時49分18秒
  > No.3736[元記事へ]

山中和義さんへのお返事です。
お疲れさまです。

頂いたプログラムで、ポート番号は当方の環境に変更しましたが、下記の出力が得られ、何度か繰り返し
実行してもエラーとなりませんでした。
原因がわかりましたら、OPEN #~/CLOSE  #~に反映して頂くことが可能でしょうか?

出力結果)
904
1
1
0
1  6
1  12
1002.0hPa
1

> yanyanさんへのお返事です。
>
> > WinAPI(Kenel32.DLL)で直接記述したCOM通信では正常にクローズ(CloseHandleで)しているようです。
>
>
> Win32 APIで記述してみました。このプログラムは正しく動作しますか。
> 実機がありませんので、お手数ですが確認をお願いします。
>
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:山中和義  投稿日:2015年 6月 4日(木)15時13分6秒
  > No.3731[元記事へ]

白石 和夫さんへのお返事です。

> CLoseHandleの戻り値をチェックしていないので、クローズが正常に行えないのにBASICのCLOSE文が終了してしまっているのかもしれません。


非同期でOpenする場合、
受信がないとき、Readのスレッドの開放が必要とありますが、、、

http://ken-create.cocolog-nifty.com/blog/2008/09/post-f094.html
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 4日(木)21時20分24秒
  > No.3738[元記事へ]

山中和義さんへのお返事です。

> 白石 和夫さんへのお返事です。
>
> > CLoseHandleの戻り値をチェックしていないので、クローズが正常に行えないのにBASICのCLOSE文が終了してしまっているのかもしれません。
>
>
> 非同期でOpenする場合、
> 受信がないとき、Readのスレッドの開放が必要とありますが、、、
>
> http://ken-create.cocolog-nifty.com/blog/2008/09/post-f094.html
>

送信は同期で行っていますが、受信は非同期です。
そのあたりが関係しているかも知れません。
 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:山中和義  投稿日:2015年 6月 5日(金)11時15分35秒
  > No.3737[元記事へ]

yanyanさんへのお返事です。

> 原因がわかりましたら、OPEN #~/CLOSE  #~に反映して頂くことが可能でしょうか?
>
> 出力結果)
>  904
>  1
>  1
>  0
>  1  6
>  1  12
> 1002.0hPa
>  1


BASICの命令(OPEN#,CLOSE#文)に反映するには、BASIC本体を改修しないといけません。
現時点では、明確な原因は分かりません。


当面、Win32 APIでのプログラムを利用するといいでしょう。

デバッグするとき、途中で中断すると、Closeされていないので、続けて実行すると、Openできません。
そのときは、BASIC本体を再起動することになります、
または、1つ前の実行時のハンドル(最初に表示される値)でCloseしてください。(青色の文字)


BASICの命令との対応を書いておきます。


!テストプログラム

!!LET rc=CloseHandle(1234) !1つ前のハンドルを閉じる
!!PRINT rc



!-- OPEN #1:NAME "COM1:"

LET CONST_GENERIC_READ=BVAL("80000000",16)
LET CONST_GENERIC_WRITE=BVAL("40000000",16)
LET CONST_OPEN_EXISTING=3

LET FILE_ATTRIBUTE_NORMAL=BVAL("80",16)
!LET FILE_FLAG_OVERLAPPED=BVAL("40000000",16)

LET hComm=CreateFile("COM1",CONST_GENERIC_READ+CONST_GENERIC_WRITE,0,0,CONST_OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0) !ハンドルを得る
PRINT hComm

IF hComm<0 THEN
   PRINT "オープンできません。"
   STOP
END IF


!コマンド・レスポンス(計測データを取得する)

!-- PRINT #1:"BARH" !"BARH"+CR+LF

LET wData$="BARH"&CHR$(13)&CHR$(10) !データを送信する
LET wLen$=REPEAT$("#",4)
LET rc=WriteFile(hComm, wData$, LEN(wData$), wLen$, 0)
PRINT rc; int32(wLen$,0) !結果と実際に送信した文字数


!-- LINE INPUT #1: a$ !1234.5hPa (CR+LF)

LET rData$=REPEAT$("#",100) !データを受信する
LET rLen$=REPEAT$("#",4)
LET rc=ReadFile(hComm, rData$, LEN(rData$), rLen$, 0)
PRINT rc; int32(rLen$,0) !結果と実際に受信した文字数

LET a$=rData$(1:POS(rData$,CHR$(13))-1)


!-- PRINT a$

PRINT a$


!-- CLOSE #1

LET rc=CloseHandle(hComm) !閉じる
PRINT rc

END


※サブルーチン部分は省略する


 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:yanyan  投稿日:2015年 6月 5日(金)12時54分15秒
  > No.3740[元記事へ]

山中和義さんへのお返事です。

> BASICの命令(OPEN#,CLOSE#文)に反映するには、BASIC本体を改修しないといけません。
> 現時点では、明確な原因は分かりません。
>

ご確認と調査をありがとうこざいました。
要望としては、 BASICの命令(OPEN#,CLOSE#文)に反映して頂くことでした。Win32 APIでの動作は、
当方でも確認、完成しておりますが、使い勝手(他のデバイス等の併用、グラフ表示など計画)から、
BASIC命令でシンプルになることを期待しておりました。改修の優先順もあるかと思います。
しばらくWin32 APIのままでとのこと、よりDLLを扱いやすい他ツールで実現したいと思います。
お忙しい中、ご対応ありがとうございました。
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月 8日(月)10時40分46秒
  > No.3706[元記事へ]

少年ガウスは、
 1+2+3+4+ … +100
を
 (1+100)×100÷2
として求めた。
これに習って、次の問題を解いてみよう。


問題
1から1998までの整数のなかで、1998と互いに素の整数はいくつあるか。
また、その整数すべて和はいくつか。

答え
 0 1998
 1 1997
 2 1996
 3 1995
 4 1994
 5 1993
 6 1992
 7 1991
 8 1990
  :
  :
 1997 1
 1998 0
と組み合わせて、
1998=2×3^3×37なので、2,3,37の倍数で篩い法を適用する。
  1 1997
  5 1993
  7 1991
   :
  1997 1
 の648通り
より、
1998×648=647352
(終り)


OPTION ARITHMETIC RATIONAL

LET F=1998*(1-1/2)*(1-1/3)*(1-1/37) !1998=2×3^3×37より、オイラー関数φ(1998)
PRINT F
PRINT 1998*F/2


!シミュレーション
LET S=0 !場合の数
LET T=0 !和
FOR K=1 TO 1998
   IF GCD(1998,K)=1 THEN !互いに素
      LET S=S+1
      LET T=T+K
      !!!PRINT K !debug
   END IF
NEXT K
PRINT S;"通り"
PRINT "和=";T

END



---------------------------

問題
100円硬貨が4枚、10円硬貨が5枚、1円硬貨が6枚ある。
支払える金額が何通りあるか。 また、その合計はいくらか。

答え
7×6×5=210通り、たたし、いずれの硬貨1枚も使わない0円を含む。
その和は、
未使用の硬貨       使用した硬貨(支払える金額)
100円 10円 1円     100円 10円 1円
 4枚   5枚  6枚=456円      0枚   0枚  0枚=0円
 4枚   5枚  5枚=455円      0枚   0枚  1枚=1円
 4枚   5枚  4枚=454円      0枚   0枚  2枚=2円
 4枚   5枚  3枚=453円      0枚   0枚  3枚=3円
 4枚   5枚  2枚=452円      0枚   0枚  4枚=4円
 4枚   5枚  1枚=451円      0枚   0枚  5枚=5円
 4枚   5枚  0枚=450円      0枚   0枚  6枚=6円
 4枚   4枚  6枚=446円      0枚   1枚  0枚=10円
 4枚   4枚  5枚=445円      0枚   1枚  1枚=11円
 4枚   4枚  4枚=444円      0枚   1枚  1枚=12円
   :
   :
 0枚   0枚  1枚=1円      4枚   5枚  5枚=455円
 0枚   0枚  0枚=0円      4枚   5枚  6枚=456円
と組み合わせて、456×210÷2=47880円
(終り)


!シミュレーション
LET S=0 !場合の数
LET T=0 !和
FOR A=0 TO 4
   FOR B=0 TO 5
      FOR C=0 TO 6
         LET W=100*A+10*B+C
         PRINT W
         LET S=S+1
         LET T=T+W
      NEXT C
   NEXT B
NEXT A
PRINT S;"通り"
PRINT "和=";T
END



---------------------------

問題
数字1,2,3,4,5,6のうち異なる3つの数字を使って、3桁の整数をつくる。
3の倍数はいくつできるか。 また、それらの和はいくつか。

答え
3つの数の組は、
(1,2,3)、(1,2,6)、(1,3,5)、(1,5,6)、(2,3,4)、(2,4,6)、(3,4,5)、(4,5,6)
それぞれ3!通りに並べて、8×3!=48通り。
その和は、
123+654=777
126+651=777
135+642=777
234+543=777
と組み合わせて、777×(8×3!)÷2=18648
(終り)


!シミュレーション
LET S=0 !場合の数
LET T=0 !和
FOR A=1 TO 6 !異なる3つの数A,B,C
   FOR B=1 TO 6
      IF A-B<>0 THEN
         FOR C=1 TO 6
            IF (C-A)*(C-B)<>0 THEN
               LET W=100*A+10*B+C
               IF MOD(W,3)=0 THEN !3の倍数
                  LET S=S+1
                  PRINT W
                  LET T=T+W
               END IF
            END IF
         NEXT C
      END IF
   NEXT B
NEXT A
PRINT S;"通り"
PRINT "和=";T
END



 

Re: シリアルポート接続で正常にクローズされない?

 投稿者:白石 和夫  投稿日:2015年 6月 8日(月)10時47分50秒
  山中和義さんへのお返事です。

> 白石 和夫さんへのお返事です。
>
> > CLoseHandleの戻り値をチェックしていないので、クローズが正常に行えないのにBASICのCLOSE文が終了してしまっているのかもしれません。
>
>
> 非同期でOpenする場合、
> 受信がないとき、Readのスレッドの開放が必要とありますが、、、
>
> http://ken-create.cocolog-nifty.com/blog/2008/09/post-f094.html
>

受信のためのスレッドを起こしていないので無関係のようです。
Closeの前にPurgeComm(handle,PURGE_RXCLEAR)でバッファをクリアすべきことは関係があるかも知れませんが,報告されたテスト結果からは無関係のように思えます。
なお,Delphi版十進BASICのCOMポート対応部分は,
BASICAccのsourceフォルダにあるtextfile.pasのTCOMMFileとほぼ同じものです。

 

サウンドカードのI/Oについて

 投稿者:君津塵  投稿日:2015年 6月 9日(火)09時23分18秒
  パソコンのマイク入力端子を用いて±5Vの信号を入力し、10進BASICでオシログラフ様の表示をしたいのですが、サウンドカードのオープンとデータの取得方法をお教え願えませんでしょうか?  

格子状経路

 投稿者:山中和義  投稿日:2015年 6月 9日(火)18時58分54秒
  > No.3698[元記事へ]

問題
下図のような格子状経路の移動を考える。
左下(交差点1)からその右(交差点2)に進み、各交差点を1回のみ通って、
交差点20に進む道順は何通りあるか。

・─・─・─・─・
│ │ │ │ │
・─・─・─・─・
↓ │ │ │ │
20←・─・─・─・
↓ ↑ │ │ │
1→2→・─・─・

考察
四隅は一方通行となる。
・←●─・─○←・
↓ │ │ │ ↑
○─・─・─・─●
↓ │ │ │ │
20←・─・─・─○
↓ ↑ │ │ ↑
1→2→・─●→・

m=4、n=11以降は処理困難となる。

参考サイト http://oeis.org/A006864  4×n



LET M=4 !m行n列 ※交差点の個数
LET N=5
DIM A(M,N)
MAT A=ZER
LET A(M,1)=1 !始点
LET A(M,2)=2
PUBLIC NUMERIC C !場合の数
LET C=0
CALL try(3,M,2, M,N,A)
PRINT C;"通り"
END
EXTERNAL SUB try(P,Y,X, M,N,A(,))
IF Y=M-1 AND X=1 THEN !終点
   IF P>M*N THEN
      LET C=C+1 !結果を表示する
      PRINT "No.";C
      MAT PRINT USING REPEAT$(" ##",N): A
   END IF
ELSE
   DIM B(M,N)
   MAT B=A
   IF Y>1 AND A(Y-1,X)=0 THEN !上へ
      LET B(Y-1,X)=P
      CALL try(P+1,Y-1,X, M,N,B)
      LET B(Y-1,X)=0
   END IF
   IF Y<M AND A(Y+1,X)=0 THEN !下へ
      LET B(Y+1,X)=P
      CALL try(P+1,Y+1,X, M,N,B)
      LET B(Y+1,X)=0
   END IF
   IF X>1 AND A(Y,X-1)=0 THEN !左へ
      LET B(Y,X-1)=P
      CALL try(P+1,Y,X-1, M,N,B)
      LET B(Y,X-1)=0
   END IF
   IF X<N AND A(Y,X+1)=0 THEN !右へ
      LET B(Y,X+1)=P
      CALL try(P+1,Y,X+1, M,N,B)
      LET B(Y,X+1)=0
   END IF
END IF
END SUB


実行結果

No. 1
18 17 16 15 14
19  4  5 12 13
20  3  6 11 10
  1  2  7  8  9
No. 2
18 17 16 15 14
19  4  5  6 13
20  3  8  7 12
  1  2  9 10 11
No. 3
18 17 14 13 12
19 16 15 10 11
20  3  4  9  8
  1  2  5  6  7
No. 4
16 15 14 13 12
17 18  5  6 11
20 19  4  7 10
  1  2  3  8  9
No. 5
18 17 16 15 14
19  6  7  8 13
20  5  4  9 12
  1  2  3 10 11
No. 6
16 15 14 11 10
17 18 13 12  9
20 19  4  5  8
  1  2  3  6  7
No. 7
16 15 14  9  8
17 18 13 10  7
20 19 12 11  6
  1  2  3  4  5
No. 8
18 17 16  9  8
19 14 15 10  7
20 13 12 11  6
  1  2  3  4  5
No. 9
18 17 10  9  8
19 16 11 12  7
20 15 14 13  6
  1  2  3  4  5
No. 10
12 11 10  9  8
13 14 15 16  7
20 19 18 17  6
  1  2  3  4  5
No. 11
18 17 12 11 10
19 16 13  8  9
20 15 14  7  6
  1  2  3  4  5
No. 12
14 13 12 11 10
15 16 17  8  9
20 19 18  7  6
  1  2  3  4  5
No. 13
16 15 14 13 12
17 18  9 10 11
20 19  8  7  6
  1  2  3  4  5
No. 14
18 17 16 15 14
19 10 11 12 13
20  9  8  7  6
  1  2  3  4  5
14 通り


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月10日(水)19時53分23秒
  > No.3742[元記事へ]

問題
さいころを3回振って、順に百,十,一の位の数として3桁の整数をつくる。
このとき、位の数がすべて異なる3桁の整数を足し合わせるといくつになるか。

答え
すべて数が異なる3桁の整数の組は、COMB(6,3)=20通り
具体的に、
 (1,2,3)
 (1,2,4)
 (1,2,5)
 (1,2,6)
 (1,3,4)
 (1,3,5)
 (1,3,6)
 (1,4,5)
 (1,4,6)
 (1,5,6)
 (2,3,4)
 (2,3,5)
 (2,3,6)
 (2,4,5)
 (2,4,6)
 (2,5,6)
 (3,4,5)
 (3,4,6)
 (3,5,6)
 (4,5,6)
である。
次に、この20組それぞれに、3!=6通りの並べ方がある。
具体的に、(1,2,3)の場合、
 123,132,213,231,312,321
である。
このとき、数字1,2,3は各桁に3!÷3=2個ずつ現れる。
これより、和は(1+2+3)×(100+10+1)×2
同様に、(1,2,4)、(1,2,5)、…、(4,5,6)を計算すればよいが、
20組のなかでは、数字1,2,3,4,5,6は10個ずつ現れるので、
(1+2+3+4+5+6)*10*(100+10+1)*2=46620
(終り)



!シミュレーション
LET S=0
FOR A=1 TO 6 !順列P(6,3)
   FOR B=1 TO 6
      IF B-A<>0 THEN
         FOR C=1 TO 6
            IF (C-A)*(C-B)<>0 THEN
               LET S=S+(100*A+10*B+C)
            END IF
         NEXT C
      END IF
   NEXT B
NEXT A
PRINT S


!組み合わせ
LET S=0
FOR A=1 TO 6-2 !組(a,b,c)
   FOR B=A+1 TO 6-1
      FOR C=B+1 TO 6
         LET S=S+(A+B+C)*(100+10+1)*2
      NEXT C
   NEXT B
NEXT A
PRINT S

PRINT (1+2+3+4+5+6)*10*(100+10+1)*2


!出現する確率は均等
PRINT PERM(6,3)*(100+10+1)*(1+2+3+4+5+6)/6

END



 

LOOPが抜けられない

 投稿者:島村1243  投稿日:2015年 6月11日(木)11時03分36秒
  下記プログラムの、SUB Vsen(n)内のDO-LOOPによる等電位線作図で、vv=0.16までは正常に線を描くのですが、vv=0.12のときにLOOPが抜けられず、線が僅かずつズレながら継続書きされてしまいます。
その原因がわからず弱っています。お分かりになる方おられましたらお教えください。

!****** 画面領域、電荷(総数・大きさ・座標位置)の設定 *****
DIM Qi(3),xi(3),yi(3)
LET Nq=3        !描画電荷数のセット
LET Qi(1)=2     !第1番電荷の値セット
LET xi(1)=10     !第1番電荷のx座標セット
LET yi(1)=5     !第1番電荷のy座標セット
LET Qi(2)=2    !第2番電荷の値セット
LET xi(2)=-10    !第2番電荷のx座標セット
LET yi(2)=-5     !第2番電荷のy座標セット
LET Qi(3)=-1  !第3番電荷の値セット
LET xi(3)=-10     !第3番電荷のx座標セット
LET yi(3)=0    !第3番電荷のy座標セット

LET windowX=35  !画面X軸の大きさセット
LET windowY=35  !画面Y軸の大きさセット
SET WINDOW -windowX,windowX,-windowY,windowY
DRAW grid
!**** ここまで ***********

!**********************************************
! 第i電荷Qiによる(x,y)点の電界(Exi,Eyi)算出関数
!**********************************************
DEF Exi(Qi,x,xi,ri)=Qi*(x-xi)/ri^3
DEF Eyi(Qi,y,yi,ri)=Qi*(y-yi)/ri^3

!***************************
!   Sub関数とFunction関数
!***************************
FUNCTION V(x,y)!---(x,y)点の合成電位Vの算出関数
   LET Vsum=0
   FOR nk=1 TO Nq
      IF x<>xi(nk) OR y<>yi(nk) THEN
         LET Vsum=Vsum+Qi(nk)/SQR((x-xi(nk))^2+(y-yi(nk))^2)
      ELSE
         PRINT "点電荷位置の電位(無限大)を誤計算したので停止します。"
         STOP
      END IF
   NEXT nk
   LET V=Vsum
END FUNCTION

SUB Denkai(x,y,Ex,Ey)!---(x,y)点の合成電界算出関数
   LET Ex=0
   LET Ey=0
   FOR nk=1 TO Nq
      LET ri=SQR((x-xi(nk))^2+(y-yi(nk))^2)
      LET Ex=Ex+Exi(Qi(nk),x,xi(nk),ri)
      LET Ey=Ey+Eyi(Qi(nk),y,yi(nk),ri)
   NEXT nk
END SUB

SUB Newton(n,vv,x0,y0,xs,ys,over)!---等電位線の描画開始座標の算出
   LET over=0
   LET xs=x0+0.001!DELTA
   LET ys=y0
   DO
      CALL Denkai(xs,ys,Exs,Eys)
      LET Vxs=V(xs,ys)
      LET x1=xs+(Vxs-vv)/Exs
      LET Vx1=V(x1,ys)
      LET xs=x1
      IF vv=0 THEN
         IF ABS(Vx1)<=0.0001 THEN EXIT DO
      ELSEIF ABS((Vx1-vv)/vv)<=0.001 THEN
         EXIT DO
      ELSEIF xs>windowX THEN
         LET over=1
         EXIT DO
      END IF
   LOOP
END SUB

SUB Vsen(n)!---電荷による等電位線の描画関数
   FOR vv=vstart TO vend STEP vstep
      CALL Newton(n,vv,xi(n),yi(n),xs,ys,over)
      IF over=1 THEN GOTO 10
      PLOT LINES:xs,ys;
      LET count=0
      LET x1=xs
      LET y1=ys
      DO
         CALL Denkai(x1,y1,Ex1,Ey1)
         LET kakudo=ANGLE(-Ey1,Ex1)
         LET x2=x1+dlv*COS(kakudo)
         LET y2=y1+dlv*SIN(kakudo)
         LET rck=SQR((x2-xs)^2+(y2-ys)^2)
         IF count>=50 AND rck<=0.1 THEN EXIT DO !書き始め点に到達したら出る。
         IF ABS(x2)>windowX OR ABS(y2)>windowY THEN EXIT DO !画面外になったら出る。
         PLOT LINES:x2,y2;
         LET count=count+1
         LET x1=x2
         LET y1=y2
      LOOP
10       PLOT LINES
         PRINT "描画完了電位vv=";vv
      NEXT vv
   END SUB

   !**********************
   !      Main関数
   !**********************
   LET dlv=0.004 !等電位線の微小描画素線長さの設定
   LET dlr=0.01 !電気力線の微小描画素線長さの設定

   !---点電荷の位置に赤/青丸印を表示
   LET ren=0.2
   FOR n=1 TO Nq
      IF Qi(n)>0 THEN
         SET AREA COLOR "red"
      ELSEIF Qi(n)<0 THEN
         SET AREA COLOR "blue"
      END IF
      DRAW disk WITH SCALE(ren)*SHIFT(xi(n),yi(n))
   NEXT n

   !*** 等電位線の作図 ***
   SET LINE COLOR "red"
   FOR n=1 TO Nq
      PRINT "--- 第";n;"電荷の作図処理中です。---"
      IF Qi(n)>0 THEN
         SET LINE COLOR "red"
         LET kyokusei=1
      ELSEIF Qi(n)<0 THEN
         SET LINE COLOR "blue"
         LET kyokusei=-1
      END IF
      LET vstart=0.4*kyokusei  !数字は描画する|電位|の最大値
      LET vend=0*kyokusei      !数字は描画する|電位|の最小値
      LET vstep=-0.04*kyokusei !|数字|は等電位幅
      CALL Vsen(n)
   NEXT n
END

 

Re: LOOPが抜けられない

 投稿者:GAI  投稿日:2015年 6月11日(木)15時29分26秒
  > No.3747[元記事へ]

島村1243さんへのお返事です。

私はプログラムには全く素人ですが、物理的に等電荷が原点対称にセットされていたら釣り合う電位が無限に存在できるためにループが無限回繰り返されているんではないでしょうか。
ですから、原点対称に電荷をセットするなら異なる電荷の値にするか、同じ電荷ならセットする位置を
原点対称にならない位置どうしに置いたらよくなると思いました。
 

Re: LOOPが抜けられない

 投稿者:山中和義  投稿日:2015年 6月11日(木)16時19分45秒
  > No.3747[元記事へ]

島村1243さんへのお返事です。

> SUB Vsen(n)!---電荷による等電位線の描画関数
>    FOR vv=vstart TO vend STEP vstep
>       CALL Newton(n,vv,xi(n),yi(n),xs,ys,over)
>       IF over=1 THEN GOTO 10
>       PLOT LINES:xs,ys;
>       LET count=0
>       LET x1=xs
>       LET y1=ys
>       DO
>          CALL Denkai(x1,y1,Ex1,Ey1)
>          LET kakudo=ANGLE(-Ey1,Ex1)
>          LET x2=x1+dlv*COS(kakudo)
>          LET y2=y1+dlv*SIN(kakudo)
>          LET rck=SQR((x2-xs)^2+(y2-ys)^2)
>          IF count>=50 AND rck<=0.1 THEN EXIT DO !書き始め点に到達したら出る。

>          IF ABS(x2)>windowX OR ABS(y2)>windowY THEN EXIT DO !画面外になったら出る。
>          PLOT LINES:x2,y2;
>          LET count=count+1
>          LET x1=x2
>          LET y1=y2
>       LOOP
> 10       PLOT LINES
>          PRINT "描画完了電位vv=";vv
>       NEXT vv
>    END SUB


浮動小数点計算の累積誤差による終点と始点が異なるからです。


2進モードでは、最後の値でループしますが、十進モードなら、
LET rck=(x2-xs)^2+(y2-ys)^2
IF count>500 AND rck<=0.08 THEN EXIT DO !書き始め点に到達したら出る。

0.08は、0.06から0.2の範囲でOKのようです。


したがって、電荷の値や等電位値、幅が違うと調整が必要です。

 

部分集合

 投稿者:山中和義  投稿日:2015年 6月11日(木)16時25分11秒
  問題
nを正整数として、集合S={1,2,3,…,n}とする。
Sの部分集合A,B,C,Dで、
 A∪B∪C∪D=S かつ A∩B∩C=Φ(空集合)
を満たす集合の組(A,B,C,D)は何通りあるか。
ただし、A,B,C,Dは同じもの(空集合でもよい)が重なっていてもよいものとする。


考察
整数mの2進法表記でのビットパターンを部分集合の要素の有無に対応させる。
S={1,2,3,4}に対して、ビットパターン1011なら、{1,3,4}を表すとする。
k個の要素なら、0から2^k-1の数値mで表すことができる。
(終り)


LET N=3 !nビット
LET S=2^N-1
LET T=0
FOR A=0 TO S
   FOR B=0 TO S
      FOR C=0 TO S
         IF BITAND(BITAND(A,B),C)=0 THEN !A∩B∩C=φ

            LET W=BITOR(BITOR(A,B),C) !A∪B∪C
            LET T=T+2^BITCOUNT(W) !Dの自由度
            ! または
            ! LET W=BITOR(BITOR(A,B),C) !A∪B∪C
            ! FOR D=0 TO S
            !    IF BITOR(W,D)=S THEN LET T=T+1
            ! NEXT D

         END IF
      NEXT C
   NEXT B
NEXT A
PRINT T;"通り" !13^n
END

EXTERNAL FUNCTION BITCOUNT(N) !正の整数nを2進法表記したときの1の個数を返す
LET C=0
DO WHILE N>0
   LET C=C+MOD(N,2)
   LET N=INT(N/2)
LOOP
LET BITCOUNT=C
END FUNCTION



また、A,B,C,Dがすべて異なる場合は何通りあるか。


LET N=3 !nビット
LET S=2^N-1
LET T=0
FOR A=0 TO S-2 !組(A,B,C)
   FOR B=A+1 TO S-1
      FOR C=B+1 TO S
         IF BITAND(BITAND(A,B),C)=0 THEN !A∩B∩C=φ

            LET W=BITOR(BITOR(A,B),C) !A∪B∪C
            LET T=T+2^BITCOUNT(W) !Dの自由度
            IF W=S THEN LET T=T-3
            ! または
            ! LET W=BITOR(BITOR(A,B),C) !A∪B∪C
            ! FOR D=0 TO S
            !    IF (D-A)*(D-B)*(D-C)<>0 THEN !DはA,B,Cと異なる
            !
            !       IF BITOR(W,D)=S THEN LET T=T+1
            !
            !    END IF
            ! NEXT D

         END IF
      NEXT C
   NEXT B
NEXT A
PRINT T*FACT(3);"通り"
END

EXTERNAL FUNCTION BITCOUNT(N) !正の整数nを2進法表記したときの1の個数を返す
LET C=0
DO WHILE N>0
   LET C=C+MOD(N,2)
   LET N=INT(N/2)
LOOP
LET BITCOUNT=C
END FUNCTION


 

Re: LOOPが抜けられない

 投稿者:島村1243  投稿日:2015年 6月11日(木)19時05分8秒
  > No.3749[元記事へ]

山中和義さんへのお返事です。

> 浮動小数点計算の累積誤差による終点と始点が異なるからです。
> 2進モードでは、最後の値でループしますが、十進モードなら、
> LET rck=(x2-xs)^2+(y2-ys)^2
> IF count>500 AND rck<=0.08 THEN EXIT DO !書き始め点に到達したら出る。
>
> 0.08は、0.06から0.2の範囲でOKのようです。
> したがって、電荷の値や等電位値、幅が違うと調整が必要です。

山中さん、詳しいご回答有難う御座いました。
電荷値や位置、電位幅を変えるとうまく行く場合もあったので、累積誤差が原因とは思い付きませんでした。助かりました。
 

積分における多桁計算方法とは

 投稿者:nu  投稿日:2015年 6月12日(金)07時42分35秒
  積分計算をするのに多桁計算を行う方法を教えてください。
ロング数の四則演算までは理解しております。
gnuutera2012もといnuもといun
 

Re: 積分における多桁計算方法とは

 投稿者:白石 和夫  投稿日:2015年 6月12日(金)17時29分5秒
  > No.3752[元記事へ]

nuさんへのお返事です。

> 積分計算をするのに多桁計算を行う方法を教えてください。
> ロング数の四則演算までは理解しております。
> gnuutera2012もといnuもといun

十進1000桁モードを使うのが簡単です。
http://hp.vector.co.jp/authors/VA008683/Numbers.htm
十進1000桁モードだと四則と開平ができます。
有理数モードは四則のみですが、計算誤差を生じません。



 

Re: サウンドカードのI/Oについて

 投稿者:白石 和夫  投稿日:2015年 6月12日(金)18時38分40秒
  君津塵さんへのお返事です。

> パソコンのマイク入力端子を用いて±5Vの信号を入力し、10進BASICでオシログラフ様の表示をしたいのですが、サウンドカードのオープンとデータの取得方法をお教え願えませんでしょうか?

十進BASICで直接扱うことはできないので、Windows APIを利用することになります。
検索したら以下のページが引っかかってきました。
コールバック関数を使うのでかなり面倒ですが、実行可能な範囲と思われます。
http://wisdom.sakura.ne.jp/system/winapi/media/mm7.html

ただし、他の種類のDLLでもっと簡単に使えるものがあるかも知れません。

リアルタイム性を求めないのであれば、WAVファイルに録音したものを十進BASICで読むと楽です。
http://hp.vector.co.jp/authors/VA008683/QA-WAV.htm
 

Re: 部分集合

 投稿者:山中和義  投稿日:2015年 6月13日(土)10時06分41秒
  > No.3750[元記事へ]

部分集合の生成


集合A={a1,a2,a3,…,an}のとき
部分集合は、φ,{a1},{a2},…,{an},{a1,a2},…,{a1,an},…,{a1,a2,…,an}、個数は2^n個

その1

LET N=4 !A={1,2,3,4}
DIM B(N)
CALL subset(1,1,N,B)
END
EXTERNAL SUB subset(X,K, N,S()) !バックトラック法
IF X>N THEN
   PRINT "{";
   FOR i=1 TO K-1
      PRINT S(i);
   NEXT i
   PRINT "}"
ELSE
   LET S(K)=X
   CALL subset(X+1,K+1,N,S)
   CALL subset(X+1,K,N,S)
END IF
END SUB



その2 Σ[r=0,n]C(n,r)=C(n,0)+C(n,1)+C(n,2)+ … +C(n,n)=2^n

LET N=4 !A={1,2,3,4}
FOR R=0 TO N !r個の要素
   FOR K=0 TO COMB(N,R)-1
      PRINT Num2CombBit(K,N,R)
   NEXT K
   PRINT
NEXT R
END
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




集合A={1,2,4}のとき
部分集合は、φ,{1},{2},{4},{1,2},{1,4},{2,4},{1,2,4}

LET A=BVAL("1101",2) !A={1,2,4}
LET Y=A
DO
   LET S=BITAND(A,Y) !a & (a-1)
   PRINT S
   LET Y=S-1
LOOP WHILE S>0
END


 

Re: 積分における多桁計算方法とは

 投稿者:nu  投稿日:2015年 6月13日(土)16時35分42秒
  白石 和夫さんへのお返事です。

積分計算をするのに多桁計算を行う方法を教えてくださいという質問で、十進1000桁モードの使用をおすすめいただいたのですが、実はExcelのchiinvで表現されるχ二乗分布の求値にとりかかっていましたところ、超越関数については十進1000桁モードが使用できないとコンピューターに表示がありました。どうにか通常モードでごまかして計算させておりますが、グラフの形状から計算精度が自由度に依存するようです。つまり、私の勘によって被積分関数の場合分けをしなくてはなりません。ただ高精度計算サイトのようにはいかないのがくやしいです。せいぜい数表程度の桁くらいなので、アルゴリズムに手を加えて、ロング数の加算方法を用いようと覚悟を固めているところです。ただ、私の方法では配列が大量に必要なため、実験に時間がかかります。なので、類似の方法をご存じでしたらご教授いただけませんでしょうか。お願い致します。

gnuutera2012もといnuもといun
 

Re: 積分における多桁計算方法とは

 投稿者:白石 和夫  投稿日:2015年 6月13日(土)17時07分3秒
  十進BASICがインストールされたフォルダにある
Libraryフォルダに1000桁モード用の超越関数計算ルーチンのサンプルをおいてあります。
計算結果の正確さの評価などはしてないので推奨できるレベルのものではありませんが,
とりあえず使ってみることはできると思います。

10進1000桁モードで実行してください。

DECLARE EXTERNAL FUNCTION EXP
PRINT EXP(1)
END

! 1000桁モードで利用する指数関数
EXTERNAL FUNCTION EXP(x)
FUNCTION s(y,n)
   LET t=y*x/n
   IF ABS(t)<=EPS(0) THEN
      LET s=y+t
   ELSE
      LET s=y+s(t,n+1)
   END IF
END FUNCTION
LET EXP=s(1,1)
END FUNCTION

補足
カイ2乗分布の定義式にΓ関数がでてきますが,nが自然数のときのΓ(n+1/2)は簡単に計算できるので,
あまり面倒なことをしなくてすむと思います。

 

Re: 積分における多桁計算方法とは

 投稿者:nu  投稿日:2015年 6月13日(土)20時51分0秒
  白石 和夫さんへのお返事です。

> 十進BASICがインストールされたフォルダにある
> Libraryフォルダに1000桁モード用の超越関数計算ルーチンのサンプルをおいてあります。
> 計算結果の正確さの評価などはしてないので推奨できるレベルのものではありませんが,
> とりあえず使ってみることはできると思います。
>
> 10進1000桁モードで実行してください。
>
> DECLARE EXTERNAL FUNCTION EXP
> PRINT EXP(1)
> END
>
> ! 1000桁モードで利用する指数関数
> EXTERNAL FUNCTION EXP(x)
> FUNCTION s(y,n)
>    LET t=y*x/n
>    IF ABS(t)<=EPS(0) THEN
>       LET s=y+t
>    ELSE
>       LET s=y+s(t,n+1)
>    END IF
> END FUNCTION
> LET EXP=s(1,1)
> END FUNCTION
>
> 補足
> カイ2乗分布の定義式にΓ関数がでてきますが,nが自然数のときのΓ(n+1/2)は簡単に計算できるので,
> あまり面倒なことをしなくてすむと思います。
>
>
ありがとうございます。これでなんとかなりそうです。感謝いたします。

http://yutorinonatuyasumi.blog.fc2.comにはExcelのnorminvで表現される正規分布の求値が二分法にて解決されております。もしかすると、白石先生のご回答により、こちらは桁数を増やすことができそうです。いつか多桁計算ができるように実力をつけていきたいと思います。
北海道産小豆宇治抹茶練乳白玉かき氷の季節が始まりそうです。
お身体に気をつけてこれからもご指導くださいませ。

gnuutera2012もといnuもといun
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月14日(日)10時09分6秒
  > No.3746[元記事へ]

問題 1991年 日本数学オリンピック
Aを16桁の正整数とする。
Aから連続する何桁かの数字をうまく取り出すと、
それらの数字の積を平方数(0も含む)に出来ることを証明せよ。

http://tsuwamono.kenshinkan.net/way/pdf/10mathematics_20.pdf

答え
バックトラック法で全検索してみよう。

OPTION ARITHMETIC RATIONAL
DIM A(16)
CALL try(1,A)
END
EXTERNAL SUB try(P,A())
OPTION ARITHMETIC RATIONAL
FOR i=2 TO 8 !0,1,4,9を除く
   IF i<>4 THEN
      LET A(P)=i !p番目を数字iとする
      LET S=1
      FOR K=P TO 1 STEP -1 !連続するk桁
         LET S=S*A(K)
         IF INTSQR(S)^2=S THEN EXIT FOR
      NEXT K
      IF K<1 THEN
         IF P>=15 THEN !15桁以上なら
            PRINT P
            MAT PRINT A;
         ELSE
            CALL try(P+1,A) !次へ
         END IF
      END IF
   END IF
NEXT i
END SUB


実行結果
15
2  3  2  5  2  3  2  7  2  3  2  5  2  3  2  0

15
2  3  2  5  2  3  2  7  2  3  2  5  2  3  8  0

15
2  3  2  5  2  3  2  7  2  3  2  5  2  6  2  0

15
2  3  2  5  2  3  2  7  2  3  2  5  2  6  8  0

15
2  3  2  5  2  3  2  7  2  3  2  5  3  2  3  0

15
2  3  2  5  2  3  2  7  2  3  2  5  3  6  3  0

15
2  3  2  5  2  3  2  7  2  3  2  5  3  8  3  0

   :
   :


 

標準正規分布

 投稿者:しばっち  投稿日:2015年 6月14日(日)20時05分29秒
  !'標準正規分布
PUBLIC NUMERIC EPS
LET U=0 !'平均
LET M=1 !'分散
LET EPS=1E-13
FOR X=1 TO 400
   LET Y=X/100
   PRINT Y;":";INTEGRALNORMAL(U,M,Y);INTEGRAL(U,M,0,Y,100)
NEXT X
END

EXTERNAL  FUNCTION INTEGRALNORMAL(U,M,X) !'INTEGRAL(EXP(-(X-U)*(X-U)/2/M/M)) 密度関数を項別積分
LET A=X
LET S=X
FOR I=1 TO 1000
   LET A=-A*(X-U)*(X-U)/I/2/M/M
   LET S=S+A/(2*I+1)
   IF ABS(A)<EPS THEN EXIT FOR
NEXT I
LET INTEGRALNORMAL=S/SQR(2*PI)/M
END FUNCTION

EXTERNAL FUNCTION NORMAL(U,M,X) !'正規分布密度関数
LET NORMAL=EXP(-(X-U)*(X-U)/(2*M*M))/SQR(PI*2)/M
END FUNCTION

EXTERNAL FUNCTION INTEGRAL(U,M,A,B,N) !'数値積分
LET N=N*3
LET H=(B-A)/N
FOR K=0 TO N/3-1
   LET S=S+3/8*H*NORMAL(U,M,A+H*3*K)+9/8*H*NORMAL(U,M,A+H*(3*K+1))+9/8*H*NORMAL(U,M,A+H*(3*K+2))+3/8*H*NORMAL(U,M,A+H*(3*K+3))
NEXT K
LET INTEGRAL=S
END FUNCTION

--------------------------------------------------------------------------------------------------
ニュートン法を用いてnorminv(z)を求める

PUBLIC NUMERIC EPS
LET U=0 !'平均
LET M=1 !'分散
INPUT  PROMPT "norminv(z) z=":Z  !' (0~0.5)
LET EPS=1E-13
LET X=0
DO
   LET XX=X
   LET X=XX-(INTEGRALNORMAL(U,M,XX)-Z)/NORMAL(U,M,XX) !'ニュートン法
LOOP UNTIL ABS(X-XX)<EPS
PRINT X
END

EXTERNAL FUNCTION NORMAL(U,M,X) !'正規分布密度関数
LET S=1
LET A=1
FOR I=1 TO 1000
   LET A=-A*(X-U)*(X-U)/I/2/M/M
   LET S=S+A
   IF ABS(A)<EPS THEN EXIT FOR
NEXT I
LET NORMAL=S/SQR(PI*2)/M
END FUNCTION

EXTERNAL  FUNCTION INTEGRALNORMAL(U,M,X) !'INTEGRAL(EXP(-(X-U)*(X-U)/2/M/M)) 密度関数を項別積分
LET A=X
LET S=X
FOR I=1 TO 1000
   LET A=-A*(X-U)*(X-U)/I/2/M/M
   LET S=S+A/(2*I+1)
   IF ABS(A)<EPS THEN EXIT FOR
NEXT I
LET INTEGRALNORMAL=S/SQR(2*PI)/M
END FUNCTION
 

ガンマ関数

 投稿者:しばっち  投稿日:2015年 6月16日(火)20時20分51秒
  LET N=6
INPUT PROMPT "GAMMA(X) X=":U
SELECT CASE N
CASE 2
   RESTORE 2
CASE 3
   RESTORE 3
CASE 4
   RESTORE 4
CASE 5
   RESTORE 5
CASE 6
   RESTORE 6
CASE 7
   RESTORE 7
END SELECT
FOR I=1 TO N
   READ X,W
   LET S=S+F(X,U)*EXP(X)*W !'ガウス・ラゲール法(半無限区間)
NEXT I
PRINT "Γ(";STR$(U);")=";S
LET H=1/1024
FOR T=-5 TO 5 STEP H
   LET SS=SS+F(EXP(PI/2*SINH(T)),U)*PI/2*COSH(T)*EXP(PI/2*SINH(T))*H !'二重指数関数法(半無限区間)
NEXT T
PRINT "Γ(";STR$(U);")=";SS
LET A=1
FOR I=1 TO 30000
   LET A=A*((1+1/I)^U)/(1+U/I)
NEXT I
PRINT "Γ(";STR$(U);")=";A/U
2 DATA     .5857864376269049511983113,8.5355339059327376220042218E-01
  DATA    3.4142135623730950488016887,1.4644660940672623779957782E-01
3 DATA     .4157745567834790833115339,7.1109300992917301544959019E-01
  DATA    2.2942803602790417198220504,2.7851773356924084880144489E-01
  DATA    6.2899450829374791968664158,1.0389256501586135748964920E-02
4 DATA     .3225476896193923118003615,6.0315410434163360163596602E-01
  DATA    1.7457611011583465756868167,3.5741869243779968664149202E-01
  DATA    4.5366202969211279832792854,3.8887908515005384272438168E-02
  DATA    9.3950709123011331292335364,5.3929470556132745010379057E-04
5 DATA     .2635603197181409102030619,5.2175561058280865247586093E-01
  DATA    1.4134030591065167922184080,3.9866681108317592745413335E-01
  DATA    3.5964257710407220812231866,7.5942449681707595387653311E-02
  DATA    7.0858100058588375569221242,3.6117586799220484544612626E-03
  DATA   12.6408008442757826594332193,2.3369972385776227891149085E-05
6 DATA     .2228466041792606894643548,4.5896467394996359356828488E-01
  DATA    1.1889321016726230307431509,4.1700083077212099411337757E-01
  DATA    2.9927363260593140776913253,1.1337338207404497573870619E-01
  DATA    5.7751435691045105018398304,1.0399197453149074898913303E-02
  DATA    9.8374674183825899177155470,2.6101720281493205947924286E-04
  DATA   15.9828739806017017825457916,8.9854790642962123882529205E-07
7 DATA     .1930436765603624138382479,4.0931895170127390213043288E-01
  DATA    1.0266648953391919503451994,4.2183127786171977992928101E-01
  DATA    2.5678767449507462069077862,1.4712634865750527839537418E-01
  DATA    4.9003530845264845681017144,2.0633514468716939865705615E-02
  DATA    8.1821534445628607910818276,1.0740101432807455221319596E-03
  DATA   12.7341802917978137580126425,1.5865464348564201268732622E-05
  DATA   19.3957278622625403117125821,3.1703154789955805622713222E-08
END

EXTERNAL FUNCTION F(U,X)
  LET F=EXP(-U)*U^(X-1)
END FUNCTION
 

群数列

 投稿者:山中和義  投稿日:2015年 6月18日(木)09時35分52秒
  問題
数列 1,3,5,7,9,11,13,15,17,19, … , 2k-1, … とする。
このとき、初項から第45項までの和を求めよ。

考察
第1群 第2群 第3群  第4群  …    第g群         …
 1 | 3,5 | 7,9,11 | 13,15,17,19 | … | g^2-g+1, …, g^2+g-1 | …
                      └ g個 ┘
と考える。
第g群の項数は、g個
第g群までの項数は、g(g+1)/2個
第g群の最後の項は、第k項とすると、k=g(g+1)/2 ∴2{g(g+1)/2}-1=g^2+g-1
第g群の最初の項は、第k項とすると、最後の項から(g-1)個前なので、
 k=g(g+1)/2-(g-1) ∴2{g(g+1)/2-(g-1)}-1=g^2-g+1
第g群の和は、{(g^2-g+1)+(g^2+g-1)}×g÷2=g^3
(終り)

答え
第g群の最後の項はg^2+g-1=2k-1より、k=g(g+1)/2
奇数列のk項までの和は、Σ(2m-1)=2×k(k+1)/2 -k=k^2
よって、第g群までの和は、{g(g+1)/2}^2(=Σg^3)
k=45なので、g=9 ∴45^2=2025
(終り)


DEF F(K)=2*K-1 !一般項
LET S=0 !和
LET K=0 !第k項
LET G=0 !第g群
DO
   LET G=G+1
   PRINT USING "##: ": G;
   FOR i=1 TO G
      LET K=K+1
      PRINT F(K);
      LET S=S+F(K)
      IF K=45 THEN EXIT DO !45項目なら終了する
   NEXT i
   PRINT "     "; K; S
LOOP
PRINT
PRINT K; F(K) !k項
PRINT S
END


実行結果

1:  1       1  1
2:  3  5       3  9
3:  7  9  11       6  36
4:  13  15  17  19       10  100
5:  21  23  25  27  29       15  225
6:  31  33  35  37  39  41       21  441
7:  43  45  47  49  51  53  55       28  784
8:  57  59  61  63  65  67  69  71       36  1296
9:  73  75  77  79  81  83  85  87  89
45  89
2025



----------------------------------

問題
数列
 1,2, 1,2,2, 1,2,2,2, 1,2,2,2,2, 1,2,2,…
(1) 初項から第1993項までの和を求めよ。
(2) 初項からの和が2001より初めて大きくなるのは第何項目か。

考察
第1群 第2群  第3群  第4群   …  第g群    …
1,2 | 1,2,2 | 1,2,2,2 | 1,2,2,2,2 | … | 1,2,2,…,2 | …
                     └ g個 ┘
と考える。
第g群までの項数は、2+3+4+ … +(g+1)=Σ[m=1,g](m+1)=g(g+3)/2
第g群までの和は、3+5+7+ … +(2g+1)=Σ[m=1,g](2m+1)=g(g+2)
(終り)

答え
(1)
61×(61+3)÷2=1952<1993<62×(62+3)÷2=2015 ∴1993-1952=41 ∴第62群の41項目
61×(61+2)+(1+2×40)=3924
(2)
43×(43+2)=1935、44×(44+2)=2024なので、2002-1935=67
よって、671=1+2×33 ∴第44群の34項目 ∴43×(43+3)÷2+34=1023項目
(終り)


LET S=0 !和
LET K=0 !第k項
LET G=0 !第g群
DO
   LET G=G+1
   PRINT USING "##: ": G;
   FOR i=1 TO G+1
      LET K=K+1
      IF i=1 THEN
         PRINT "1";
         LET S=S+1
      ELSE
         PRINT "2";
         LET S=S+2
      END IF
      IF K=1993 THEN EXIT DO !(1)の解答
      !!IF S>2001 THEN EXIT DO !(2)の解答
   NEXT i
   PRINT K; S
LOOP
PRINT " ←"; i !g群の項
PRINT K !項
PRINT S
END



----------------------------------

問題
数列
 1,2,1/2,3,1,1/3,4,3/2,2/3,1/4,5,2,1,1/2,1/5, …
とする。
このとき、初項からの積が5005になる最初の項を求めよ。

考察
第1群 第2群 第3群   第4群      第5群     …
 1 | 2,1/2 | 3,1,1/3 | 4,3/2,2/3,1/4 | 5,2,1,1/2,1/5 | …
すなわち、
第g群
 g/1, (g-1)/2, (g-2)/3, (g-3)/4, … , 2/(g-1), 1/g
  └───       g個       ───┘
と考える。
第g群のm項は、(g-m+1)/m
第g群の1項からm項までの積は、C(g,m)
第g群のすべての項の積は、1となる。
(終り)

答え
C(g,m)=5005を求める。
(終り)


OPTION ARITHMETIC RATIONAL
DEF F(G,m)=(G-m+1)/m !一般項
LET S=1 !積
LET K=0 !第k項
LET G=0 !第g群
DO
   LET G=G+1
   PRINT USING "##: ": G;
   FOR m=1 TO G
      LET K=K+1
      PRINT F(G,m);
      LET S=S*F(G,m)
      IF S=5005 THEN EXIT DO !終了する
   NEXT m
   PRINT "     "; K; S
LOOP
PRINT " ←"; m !g群の項
PRINT K !k項
PRINT S
END



別解 C(g,m)

LET G=1
DO
   FOR M=1 TO INT(G/2) !対称性を考慮する
      IF COMB(G,M)=5005 THEN EXIT DO
   NEXT M
   LET G=G+1
LOOP
PRINT G;M
END


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月20日(土)09時37分49秒
  > No.3759[元記事へ]

問題
正の整数a,b,c,nとする。
1辺がa,b,c、体積がn=abcの直方体を考える。
1≦n≦mとなるnに対して、a,b,cがすべて2以上となるnはいくつあるか。
例
m=20の場合、8=2×2×2、12=2×2×3、16=2×2×4、18=2×3×3、20=2×2×5 の5つとなる。

答え
n=(p^a)(q^b)(r^c)…と因数分解する。a+b+c+ … ≧3となるnが題意を満たす。
(終り)


LET M=20 !500000
DIM P(M) !mの最大の素因数
MAT P=ZER
LET P(1)=1 !1は素数でない
FOR N=1 TO M
   IF P(N)=0 THEN !素数なら
      FOR K=N TO M STEP N !倍数を篩う
         LET P(K)=N
      NEXT K
   END IF
NEXT N
!!!MAT PRINT P; !debug
LET C=0
FOR N=1 TO M
   LET X=0 !個数
   LET T=N !素因数分解する
   DO WHILE T>1 !リンクをたどる
      LET T=T/P(T)
      LET X=X+1
   LOOP
   IF X>=3 THEN LET C=C+1
NEXT N
PRINT C
END


 

Re: 多変数多項式の計算 mPOLY.LIB

 投稿者:山中和義  投稿日:2015年 6月20日(土)18時59分25秒
  > No.3548[元記事へ]

べき乗和f(n)=Σ[k=1,n]k^pをA=Σk=n(n+1)/2、B=Σk^2=n(n+1)(2n+1)/6で表す。


pが奇数の場合
Aで表される。f(n)÷Aの余りに着目する。
Σk^3={n(n+1)/2}^2=A^2
Σk^5=n^2(n+1)^2(2n^2+2n-1)/12=(1/6)n^6+(1/2)n^5+(5/12)n^4-(1/12)n^2 =?



!多変数多項式の演算(加減乗算) p(a,b,c, … ,y,z)=ΣN*a^A*b^B*c^C* … *y^Y*z^Z
OPTION ARITHMETIC RATIONAL

PUBLIC STRING v$ !変数の定義 ※必要なものだけの列記でもよい
LET v$="ABSn"

PUBLIC NUMERIC N !変数の数
LET N=LEN(v$)

PUBLIC NUMERIC MAX_TERM !最大の項数
LET MAX_TERM=50
!------------------------------ ここまでがサブルーチン

DIM f(0 TO MAX_TERM, 0 TO N), g(0 TO MAX_TERM, 0 TO N)
!CALL PolySet("(1/4)n^4+(1/2)n^3+(1/4)n^2", f) !Σk^3
CALL PolySet("(1/6)n^6+(1/2)n^5+(5/12)n^4-(1/12)n^2- S", f) !Σk^5
!CALL PolySet("(1/8)n^8+(1/2)n^7+(7/12)n^6-(7/24)n^4+(1/12)n^2- S", f) !Σk^7
!CALL PolySet("(1/10)n^10+(1/2)n^9+(3/4)n^8-(7/10)n^6+(1/2)n^4-(3/20)n^2- S", f) !Σk^9

CALL PolySet("(1/2)n^2+(1/2)n -A", g)

DIM q(0 TO MAX_TERM, 0 TO N), r(0 TO MAX_TERM, 0 TO N)
CALL PolyQuotientRemainder(f,g,"n", q,r) !f(n)÷A
CALL PolyPrint(q) !商
PRINT
CALL PolyPrint(r) !余り
PRINT
END

MERGE "mPOLY.LIB" !多変数の多項式の計算


実行結果

+(1/3)n^4+(2/3)n^3+(1/6)n^2+(2/3)An^2+(2/3)An-(1/6)n-(1/3)A+(4/3)A^2
-S-(1/3)A^2+(4/3)A^3




pが偶数の場合
B=n(n+1)(2n+1)/6を因数にもつので、f(n)÷Bを計算して、その商Q(n)をAで表す。
f(n)=Q(n)Bとなる。



!多変数多項式の演算(加減乗算) p(a,b,c, … ,y,z)=ΣN*a^A*b^B*c^C* … *y^Y*z^Z
OPTION ARITHMETIC RATIONAL

PUBLIC STRING v$ !変数の定義 ※必要なものだけの列記でもよい
LET v$="ABSn"

PUBLIC NUMERIC N !変数の数
LET N=LEN(v$)

PUBLIC NUMERIC MAX_TERM !最大の項数
LET MAX_TERM=50
!------------------------------ ここまでがサブルーチン

DIM f(0 TO MAX_TERM, 0 TO N), g(0 TO MAX_TERM, 0 TO N)
!CALL PolySet("(1/5)n^5+(1/2)n^4+(1/3)n^3-(1/30)n- S", f) !Σk^4
!CALL PolySet("(1/7)n^7+(1/2)n^6+(1/2)n^5-(1/6)n^3+(1/42)n- S", f) !Σk^6
CALL PolySet("(1/9)n^9+(1/2)n^8+(2/3)n^7-(7/15)n^5+(2/9)n^3-(1/30)n- S", f) !Σk^8
!CALL PolySet("(1/11)n^11+(1/2)n^10+(5/6)n^9-n^7+n^5-(1/2)n^3+(5/66)n -S", f) !Σk^10

CALL PolySet("(1/3)n^3+(1/2)n^2+(1/6)n", g)

DIM q(0 TO MAX_TERM, 0 TO N), r(0 TO MAX_TERM, 0 TO N)
CALL PolyQuotientRemainder(f,g,"n", q,r) !f(n)÷B
CALL PolyPrint(q) !商
PRINT
CALL PolyPrint(r) !余り
PRINT


CALL PolySet("(1/2)n^2+(1/2)n -A", g)

DIM t(0 TO MAX_TERM, 0 TO N)
CALL PolyAdd(r,q, t) !Q-S
CALL PolyQuotientRemainder(t,g,"n", q,r) !Q(n)÷A
CALL PolyPrint(q) !商
PRINT
CALL PolyPrint(r) !余り
PRINT


END

MERGE "mPOLY.LIB" !多変数の多項式の計算


実行結果

+(1/3)n^6+n^5+(1/3)n^4-n^3-(1/15)n^2+(3/5)n-(1/5)
-S
+(2/3)n^4+(4/3)n^3-(2/3)n^2+(4/3)An^2-(4/3)n+(4/3)An+(6/5)-(8/3)A+(8/3)A^2
-S-(1/5)+(6/5)A-(8/3)A^2+(8/3)A^3


 

重み付きパスカルの三角形

 投稿者:山中和義  投稿日:2015年 6月21日(日)19時16分32秒
  Σk^mの公式

重み付きパスカルの三角形
 1  2  3  4 … 重み
 1
 1  1
 1  3  2
 ① ⑦ ⑫ ⑥
より、
①C(n,1)+⑦C(n,2)+⑫C(n,3)+⑥C(n,4)
={{{{0 +⑥}(n-3)/4 +⑫}(n-2)/3 +⑦}(n-1)/2 +①}n/1
=(1/4)n^2+(1/2)n^3+(1/4)n^4


OPTION ARITHMETIC RATIONAL
LET M=3 !Σk^m
DIM P(0 TO M) !重み付きパスカルの三角形
MAT P=ZER
LET P(0)=1 !左端
FOR K=0 TO M !k段
   FOR J=K TO 1 STEP -1 !右端から左端へ
      LET P(J)=J*P(J-1)+(J+1)*P(J)
   NEXT J
   MAT PRINT P; !debug
NEXT K
DIM A(0 TO M+1) !係数
MAT A=ZER
FOR K=M TO 0 STEP -1 !ホーナー法による
   LET A(0)=A(0)+P(K) !+○の部分
   FOR J=M-K+1 TO 1 STEP -1 !×(n-k)の部分
      LET A(J)=A(J-1)-K*A(J)
   NEXT J
   LET A(0)=-K*A(0)
   MAT A=(1/(K+1))*A !÷(k+1)の部分
   MAT PRINT A; !debug
NEXT K
END


実行結果

1  0  0  0

1  1  0  0

1  3  2  0

1  7  12  6

-9/2  3/2  0  0  0

-5  3/2  1/2  0  0

-1  1/4  1/2  1/4  0

0  0  1/4  1/2  1/4



----------------------------

ベルヌーイ数 B(k)


OPTION ARITHMETIC RATIONAL
LET M=10
DIM P(0 TO M) !重み付きパスカルの三角形
MAT P=ZER
LET P(0)=1 !左端
FOR K=0 TO M !k段
   FOR J=K TO 1 STEP -1 !右端から左端へ
      LET P(J)=J*P(J-1)+(J+1)*P(J)
   NEXT J
   MAT PRINT P; !debug
   LET B=0
   FOR J=0 TO K
      LET B=B+(-1)^J*P(J)/(J+1)
   NEXT J
   PRINT K; B
NEXT K
END


実行結果

1  0  0  0  0  0  0  0  0  0  0

0  1
1  1  0  0  0  0  0  0  0  0  0

1  1/2
1  3  2  0  0  0  0  0  0  0  0

2  1/6
1  7  12  6  0  0  0  0  0  0  0

3  0
1  15  50  60  24  0  0  0  0  0  0

4 -1/30
1  31  180  390  360  120  0  0  0  0  0

5  0
1  63  602  2100  3360  2520  720  0  0  0  0

6  1/42
1  127  1932  10206  25200  31920  20160  5040  0  0  0

7  0
1  255  6050  46620  166824  317520  332640  181440  40320  0  0

8 -1/30
1  511  18660  204630  1020600  2739240  4233600  3780000  1814400  362880  0

9  0
1  1023  57002  874500  5921520  21538440  46070640  59875200  46569600  19958400  3628800

10  5/66



 

Re: サウンドカードのI/Oについて

 投稿者:君津 塵  投稿日:2015年 6月22日(月)11時15分35秒
  白石 和夫さんへのお返事です。

ありがとうございました。

しばらく検討してみます。

君津 塵
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月23日(火)19時13分6秒
  > No.3763[元記事へ]

問題
m<nとなる自然数m,nがある。
√(3mn)が整数となる(m,n)の組のうち、
m+nの値を小さい順に並べたとき、4番目になる組を求めよ。

考察
mn=3×(自然数)^2より、mn=3,12,27,48,…
3のとき、1×3(和は4)
12のとき、3×4(7)、2×6(8)、1×12(13)
27のとき、3×9(12)、1×27(28)
48のとき、6×8(14)、4×12(16)、3×16(19)、2×24(26)、1×48(49)
 :
(終り)

答え
m+n=kとおく。m<nとなる自然数なので、
最小値は1+2=3より、k=3,4,5,6,…
m+n>2mより、1≦m<k/2となる。このとき、n=k-m
(終り)


FOR K=3 TO 20
   FOR M=1 TO K/2
   !!!PRINT K;M !debug
      LET S=3*M*(K-M)
      IF INT(SQR(S))^2=S THEN PRINT M;K-M; K
   NEXT M
NEXT K
END


実行結果

1  3  4
3  4  7
2  6  8
3  9  12
1  12  13
6  8  14
4  12  16
3  16  19
5  15  20




その2 和と差、2次方程式の解
m+n=k(式1)とおく。
mn=3×(自然数)^2より、mn=3p^2とおく。
(m-n)^2=(m+n)^2-4mn=k^2-12p^2 ∴m-n=√(k^2-12p^2)(式2)
平方根のなかは正なので、1≦p≦√(k^2/12)
式2が整数になることに注意して、式1と式2を連立させる。


FOR K=3 TO 20
   FOR P=1 TO SQR(K^2/12)
   !!!PRINT K;P !debug
      LET R=SQR(K^2-12*P^2)
      IF INT(R)=R THEN !整数なら
         LET M=(K-R)/2 !m<n
         LET S=3*M*(K-M)
         IF INT(SQR(S))^2=S THEN PRINT M;K-M; K
      END IF
   NEXT P
NEXT K
END


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月24日(水)12時26分43秒
  > No.3767[元記事へ]

問題
3人で50m走をしました。
同着を含めて、何通りの順位付けがありますか。

参考サイト http://oeis.org/A000670


答え
3人をA,B,Cとする。
全員が1位になる場合、ABCと表すことにする。 1通り
Aが1位、B,Cが2位の場合、A|BC
このパターンの場合の数は、A,B,Cの並べ方を考慮すればよい。3!/(1!2!)=3通り
A,Bが1位、Cが3位の場合、AB|C  A,B,Cの並べ方を考慮して、3!/(2!1!)=3通り
Aが1位、Bが2位、Cが3位の場合、A|B|C  A,B,Cの並べ方を考慮して、3!=6通り
よって、1+3+3+6=13通り
(終り)

答え
分割数を考える。3=2+1=1+2=1+1+1
3の場合、3!/3!=1
2+1の場合、3!/(2!1!)=3
1+2の場合、3!/(1!2!)=3
1+1+1の場合、3!/(1!1!1!)=6
よって、1+3+3+6=13通り
(終り)


OPTION ARITHMETIC RATIONAL
LET N=3
PUBLIC NUMERIC C !場合の数
LET C=0
DIM A(N) !分割パターン 3=2+1=1+2=1+1+1
CALL try(1,A,N)
PRINT C;"通り"
END
EXTERNAL SUB try(P,A(),N) !バックトラック法
OPTION ARITHMETIC RATIONAL
FOR K=N TO 1 STEP -1
   LET A(P)=K !p番目をkとする
   IF N-K=0 THEN !終わったなら
      MAT PRINT A; !debug
      LET T=0 !分子
      FOR J=1 TO P
         LET T=T+A(J)
      NEXT J
      LET S=FACT(T)
      FOR J=1 TO P !分母
         LET S=S/FACT(A(J))
      NEXT J
      PRINT S !debug
      LET C=C+S
   ELSE
      CALL try(P+1,A,N-K) !次へ
   END IF
   LET A(P)=0
NEXT K
END SUB


実行結果

3  0  0

1
2  1  0

3
1  2  0

3
1  1  1

6
13 通り



答え 漸化式
1人のとき、1通り
2人のとき、
 2人をA,Bとする。
 Aが1位、Bが2位
 Bが1位、Aが2位
 A,B共に1位
これを、
 1人が1位になるのは、C(2,1)=2通り このとき、残り1人の順位付けは前出の1通り
 2人が1位になるのは、C(2,2)=1通り
 よって、2×1+1=3通り
と考える。
3人のとき、
1人が1位になるのは、C(3,1)=3通り このとき、残り2人の順位付けは前出の3通り
2人が1位になるのは、C(3,2)=3通り このとき、残り1人の順位付けは前出の1通り
3人が1位になるのは、C(3,3)=1通り
よって、3×3+3×1+1=13通り
一般に、P[n]=C(n,1)P[n-1]+C(n,2)P[n-2]++C(n,3)P[n-3]+ … +C(n,n)P[0]、P[0]=1
(終り)


OPTION ARITHMETIC RATIONAL
LET N=3
PRINT P(N);"通り"
END
EXTERNAL FUNCTION P(N) !漸化式
OPTION ARITHMETIC RATIONAL
IF N=0 THEN
   LET P=1
ELSE
   LET S=0
   FOR K=1 TO N
      LET S=S+COMB(N,K)*P(N-K)
   NEXT K
   LET P=S
END IF
END FUNCTION


または

OPTION ARITHMETIC RATIONAL
LET N=3
DIM F(0 TO N) !漸化式
LET F(0)=1
FOR K=1 TO N
   LET S=0 !F[k]を求める
   FOR J=1 TO K
      LET S=S+COMB(K,J)*F(K-J)
   NEXT J
   LET F(K)=S
NEXT K
PRINT F(N);"通り"
END



 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 6月25日(木)10時34分25秒
  > No.3768[元記事へ]

問題 多項定理
(a+b+c)^4を展開したとき、a^2bcの項はいくつありますか。

答え
a,a,b,cの並べ方から、4!/(2!1!1!)=12通り
(終り)

4!/(2!1!1!)の計算方法
4!/(2!1!1!)
=(4×3×2×1)/{(2×1)(1)(1)}
={(2×1)/(1×2)}{3/1}{4/1}
=C(0+2,2)×C(2+1,1)×C(3+1,1)
と変形して、オーバーフローを避ける。

C(n,k)の計算方法
{n/1}×{(n-1)/2}×{(n-2)/3}× … ×{(n-k+1)/k}
とする。



PRINT FACT(4)/(FACT(2)*FACT(1)*FACT(1)) !式通りに計算する

DATA 3 !m種類
DATA 2,1,1 !p,q,…,r個
READ M
DIM A(M)
MAT READ A
LET T=A(1) !C(p,p)
LET S=1
FOR K=2 TO M !C(p+q,q)、…、C(p+q+ … +r, r)
   LET T=T+A(K)
   LET S=S*COMB(T,A(K))
NEXT K
PRINT S

END

 

ある行列の構成

 投稿者:GAI  投稿日:2015年 6月27日(土)08時04分50秒
  6行10列の行列で
各成分は0か1が入っており
各行は同数の0,1が含まれ(即ち0が5個、1が5個ずつある。)
各列にも同数の0,1がある。(即ち0が3個、1が3個ずつある。)
そして
どの2つの行をくらべても1が含まれている位置が2カ所で等しくなっている。


同じく
8行14列で
各行、各列での0,1の総数は相等しく(4,4と7,7で0,1が入っている。)
どの2つの行をくらべても1が含まれている位置が3カ所で等しくなっている。

この2つの行列を構成してほしいです。
 

Re: ある行列の構成

 投稿者:山中和義  投稿日:2015年 6月27日(土)12時51分51秒
  > No.3770[元記事へ]

GAIさんへのお返事です。

> 6行10列の行列で
> 各成分は0か1が入っており
> 各行は同数の0,1が含まれ(即ち0が5個、1が5個ずつある。)
> 各列にも同数の0,1がある。(即ち0が3個、1が3個ずつある。)
> そして
> どの2つの行をくらべても1が含まれている位置が2カ所で等しくなっている。


たくさんあります。
得られた結果の行、列を入れ替えたものも解です。

1の重なり具合が行数の(半分-1)なら、縦方向(列)の確認はなくてもよさそうです。(赤色部分)



LET N=10
LET Y=6

!!LET N=14
!!LET Y=8

PUBLIC NUMERIC C !場合の数
LET C=0
DIM M(Y) !ビットパターン
FOR H=0 TO COMB(N,N/2)-1 !1行目
   LET M(1)=Num2CombBit(H,N,N/2) !1行目
   CALL try(2,M,N,Y)
NEXT H
PRINT C;"通り"
END

EXTERNAL SUB try(P,M(),N,Y)
FOR H=0 TO COMB(N,N/2)-1 !p行目の候補
   LET T=Num2CombBit(H,N,N/2)
   IF T>M(P-1) THEN !対称性

      FOR K=1 TO P-1 !前出パターンとの比較
         LET W=BITAND(M(K),T)
         LET X=0 !1の個数
         DO WHILE W>0
            LET X=X+MOD(W,2)
            LET W=INT(W/2)
         LOOP
         IF X<>2 THEN EXIT FOR !2以外はNG
         !!IF X<>3 THEN EXIT FOR !3以外はNG
      NEXT K
      IF K>P-1 THEN !OKなら
         LET M(P)=T
         IF P=Y THEN !すべて埋まったなら
            MAT PRINT M; !debug

            DIM F(N) !縦方向を確認する
            MAT F=ZER
            FOR K=1 TO P
               LET W=M(K)
               FOR B=1 TO N
                  IF W=0 THEN EXIT FOR
                  LET F(B)=F(B)+MOD(W,2)
                  LET W=INT(W/2)
               NEXT B
            NEXT K
            FOR B=1 TO N
               IF F(B)<>Y/2 THEN EXIT FOR
            NEXT B
            IF B>N THEN !OKなら


               LET C=C+1
               FOR K=1 TO Y !結果を表示する
                  PRINT RIGHT$(REPEAT$("0",N-1)&BSTR$(M(K),2),N)
               NEXT K

            END IF
         ELSE
            CALL try(P+1,M,N,Y) !次へ
         END IF
      END IF

   END IF
NEXT H
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


実行結果

31  227  364  692  849  906

0000011111
0011100011
0101101100
1010110100
1101010001
1110001010
31  227  364  692  850  905

0000011111
0011100011
0101101100
1010110100
1101010010
1110001001
31  227  364  696  849  902

0000011111
0011100011
0101101100
1010111000
1101010001
1110000110
31  227  364  696  850  901

0000011111
0011100011
0101101100
1010111000
1101010010
1110000101
31  227  364  724  817  906

0000011111
0011100011
0101101100
1011010100
1100110001
1110001010

  :
  :



 

2元1次不定方程式Ax+By=1の特殊解

 投稿者:山中和義  投稿日:2015年 6月28日(日)10時16分7秒
  ユークリッドの互除法による
http://izumi-math.jp/F_Nakamura/huteihouteishiki.pdf

例 37x+32y=1

答え 互除法

   1 | 37  32 | 6            1 |  a         b     | 6
     | 32  30 |                |  b        6(a-b) |
  ----------------    →    --------------------------
   2 |  5   2 |              2 |  a-b      -6a+7b |
     |  4     |                | 2(-6a+7b)        |
  ----------------          --------------------------
     |  1     |                | 13a-15b          |

        ↓

     |  1   0 | -2
     |     -2 |
  -----------------
  -6 |  1  -2 | -1
     | 12 -13 |
  -----------------
     | 13 -15 |
(終り)

答え 互除法の商+連立方程式の行基本変形の考え方
漸化式 [n行の係数]=[(n-2)行の係数]-[(n-1)行の係数×商] より、
  商  x               y
      1               0
  1   0               1
  6   1-0×1=1        0-1×1=-1
  2   0-1×6=-6       1-(-1)×6=7
      1-(-6)×2=13    (-1)-7×2=-15
(終り)



CALL ExGCD(37,32,x,y,c)
PRINT x;y;c
END
EXTERNAL SUB ExGCD(A,B,x,y,c) !拡張ユークリッドの互除法
!A>0,B>0に対して、Ax+By=cとなるx,y,c=gcd(A,B)を求める
LET c=A
LET c1=B
LET x=1
LET x1=0
LET y=0
LET y1=1
DO WHILE c1>0
   PRINT x;y; c !debug
   !PRINT x1;y1; c1 !debug
   LET Q=INT(c/c1)
   LET R=MOD(c,c1)
   PRINT Q;R !debug
   LET x2=x-Q*x1
   LET y2=y-Q*y1
   LET c=c1
   LET c1=R
   LET x=x1
   LET x1=x2
   LET y=y1
   LET y1=y2
LOOP
END SUB


実行結果

1  0  37
1  5
0  1  32
6  2
1 -1  5
2  1
-6  7  2
2  0
13 -15  1



その2 再帰呼び出し

CALL ExGCD2(37,32,x,y,c)
PRINT x;y;c
PRINT
END
EXTERNAL SUB ExGCD2(a,b, x,y,c) !拡張ユークリッドの互除法
!A>0,B>0に対して、Ax+By=cとなるx,y,c=gcd(A,B)を求める
IF b=0 THEN
   LET x=1 !a×1+b×0=a
   LET y=0
   LET c=a
   PRINT x;y !debug
ELSE
   LET q=INT(a/b)
   LET r=MOD(a,b)
   PRINT a;b; q !debug
   CALL ExGCD2(b,r, u,v,c)
   LET x=v
   LET y=u-v*q
   PRINT x;y; q !debug
END IF
END SUB


実行結果

37  32  1
32  5  6
5  2  2
2  1  2
1  0
0  1  2
1 -2  2
-2  13  6
13 -15  1
13 -15  1





別解 互除法+連立方程式
A=Q*B+Rとして、(R+BQ)X+BY=RX+B(QX+Y)と変形する。
例 37x+32y=1
(5+32×1)x+32y =5x+32(x+y) =5x+(2+5×6)(x+y) =2(x+y)+5{x+6(x+y)}
すなわち、2(x+y)+5(7x+6y)と変形する。
ここで2×(-2)+5×1=1より、連立方程式x+y=-2, 7x+6y=1を得る。
これを解いて、x=13, y=-15
(終り)


 

2000年1月1日午前0時を起点とするTIME関数

 投稿者:nagram  投稿日:2015年 6月29日(月)09時36分59秒
  十進BASICの組込み関数TIMEはその日の午前0時を起点としているため、2つの時刻の差を知りたいとき午前0時をまたぐと正しい値が得られません。
2000年1月1日午前0時を起点とする経過秒数が得られる関数TIME2000を作りました。実行中に日や年が替わっても問題ありません。この関数はPCの内臓時計が2099年12月31日まで有効です。

DECLARE FUNCTION TIME2000
LET t1=TIME
LET t2=TIME2000
LET t3=TIME
PRINT t1;t2;t3
!
FUNCTION TIME2000  ! 2000年1月1日午前0時からの経過秒数
   LOCAL t,d
   LET t=TIME
   LET d=DATE
   IF t>TIME THEN  ! TIME関数とDATE関数が同期しないときの対策
      LET t=0
      LET d=DATE
   END IF
   LET TIME2000=(INT(d/1000)*365+INT((d/1000-1)/4)+MOD(d,1000))*86400+t
END FUNCTION
END


上の関数TIME2000はうるう秒は考慮していません。うるう秒もカウントすると次のようになります。
モジュールleapsecond内にあるDATA文に日本でのうるう秒実施日を事前に追加しておけば自動的に1秒調整します。1秒削除の場合は負数で指定して下さい。
変数interleapでうるう秒を挿入(削除)する時期を選択できます。
0…うるう秒を考慮しない
1…PCの内臓時計が協定世界時(UTC)の場合、うるう秒実施時刻(2015/6/30 23:59:59終了時)に1秒調整。
2…PCの内臓時計が日本標準時(JST)の場合、うるう秒実施時刻(2015/7/1 8:59:59終了時)に1秒調整。
3…PCの内臓時計が日本標準時(JST)の場合、うるう秒実施日の終了時(2015/7/1 23:59:59終了時)に1秒調整。
ただし、Windowsのタイムサービスはうるう秒に自動対応していないので、うるう秒をまたいで実行する際は、プログラム実行前に手動で内臓時計の更新をし、interleapで指定したうるう秒調整時刻が経過した時点でもう一度更新する必要があります。
参考までに、WindowsがNTPサーバーに接続して自動更新をするのは最後の更新から1週間後です。

DECLARE EXTERNAL FUNCTION leapsecond.TIME2000
DECLARE EXTERNAL NUMERIC leapsecond.interleap
LET interleap=2    !【閏秒処理の時期】0=無視,1=UTC実施時,2=JST実施時,3=JST実施日の終了時
LET t1=TIME
LET t2=TIME2000
LET t3=TIME
PRINT t1;t2;t3
END
!
MODULE leapsecond
PUBLIC FUNCTION TIME2000
PUBLIC NUMERIC interleap
SHARE NUMERIC leapDATE,accum1,accum2
DIM month(12)
DATA 0,31,59,90,120,151,181,212,243,273,304,334  ! 各月初日前日までの累計日数
DATA 060101,090101,120701,150701  ! 新たに閏秒が実施される時はyymmdd形式の実施日(JST)を追加。1秒削除は負数(例 -160101)。
! 2000年以降、日本での閏秒実施日(JST) → '06/1/1,'09/1/1,'12/7/1,'15/7/1 午前8時59分59秒終了時
MAT READ month
LET accum1=0
DO
   READ IF MISSING THEN EXIT DO : leapDATE
   LET accum2=accum1
   LET accum1=accum2+SGN(leapDATE)
LOOP
LET leapDATE=ABS(leapDATE)
LET yy=INT(leapDATE/10000)
LET mm=MOD(INT(leapDATE/100),100)
LET leapDATE=yy*365+INT((yy-1)/4+1)+month(mm)+MOD(leapDATE,100)
IF MOD(yy,4)=0 AND mm>=3 THEN LET leapDATE=leapDATE+1
!
EXTERNAL FUNCTION TIME2000  ! 2000年1月1日午前0時からの経過秒数(閏秒対応)
   LET t=TIME
   LET d=DATE
   IF t>TIME THEN  ! TIME関数とDATE関数が同期しないときの対策
      LET t=0
      LET d=DATE
   END IF
   LET d=INT(d/1000)*365+INT((d/1000-1)/4+1)+MOD(d,1000)
   IF interleap>0 THEN  ! interleap=閏秒処理の時期  0=無視,1=UTC実施時,2=JST実施時,3=JST実施日の終了時
      IF d>leapDATE OR d=leapDATE AND (interleap=1 OR interleap=2 AND t>=32400) THEN  ! t=32400→09:00:00
         LET t=t+accum1
      ELSE
         LET t=t+accum2
      END IF
   END IF
   LET TIME2000=(d-1)*86400+t
END FUNCTION
END MODULE
 

FizzBuzz問題

 投稿者:山中和義  投稿日:2015年 6月29日(月)10時19分21秒
  問題
10^5以下の正の整数のうち、
3, 5, 7, 11, 13, 17, 19, 23, 29, 31
の少なくともどれか一つの倍数となるものの総和を求めてください。

答え
3469796305

範囲が小さい場合、ふるい用の配列を設けることができる。


OPTION ARITHMETIC RATIONAL
DATA 3,5,7,11,13,17,19,23,29,31,-1
LET N=10^5
DIM F(0 TO N) !篩い
MAT F=ZER
DO
   READ A
   IF A<0 THEN EXIT DO
   FOR K=0 TO N STEP A !その倍数
      LET F(K)=1
   NEXT K
LOOP
LET S=0 !和
FOR K=1 TO N
   IF F(K)>0 THEN LET S=S+K
NEXT K
PRINT S
END




その2

考察
20以下、3,5の倍数とする。
3の倍数は3,6,9,12,15,18なので、和は(3+18)×6÷2=63
5の倍数は5,10,15,20なので、和は(5+20)×4÷2=50
3×5=15の倍数は15なので、和は15
これより、63+50-15=98
(終り)


OPTION ARITHMETIC RATIONAL
LET N=10^5
DATA 3,5,7,11,13,17,19,23,29,31 !互いに素
DIM P(10)
MAT READ P
LET S=0 !和
FOR C=1 TO 2^UBOUND(P)-1 !組み合わせ(ビットパターン)
   LET T=C
   LET X=0 !1の個数
   LET D=1
   FOR B=1 TO UBOUND(P) !ビット位置
      IF T=0 THEN EXIT FOR
      IF MOD(T,2)=1 THEN
         LET X=X+1
         LET D=D*P(B)
      END IF
      LET T=INT(T/2) !次へ
   NEXT B
   LET K=INT(N/D) !項数 k
   LET W=K*(K+1)*D/2 !和 d+2d+3d+ … +kd、kd≦n
   !集合A,B,Cなら、個数 n(A∪B∪C)=n(A)+n(B)+n(C)-n(A∩B)-n(B∩C)-n(C∩A)+n(A∩B∩C) より
   IF MOD(X,2)=1 THEN LET S=S+W ELSE LET S=S-W
NEXT C
PRINT S
END



 

平面を分割する

 投稿者:山中和義  投稿日:2015年 6月30日(火)19時54分26秒
  問題
n本の直線で平面を分割するとき、その領域の個数は最大いくつになるか。

http://mathworld.wolfram.com/PlaneDivisionbyLines.html

考察
n=1のとき
①
───
②

n=2のとき
①│③
─┼───
②│④

n=3のとき
①│④
─・──   ──
 │  \ /
②│⑤  ・ ⑦
 │  / \
─・──   ──
③│⑥

n=4のとき
①│⑤
─・────────   ────────
 │        \ /
②│⑥        ・ ⑩
 │        / \
─・──   ──    ──   ───
 │  \ /        \ /
③│⑦  ・ ⑨        ・ ⑪
 │  / \        / \
─・──   ────────   ───
④│⑧

横方向に平行な(n-1)本の直線をひく。これらに交わるように、縦方向に1本の直線をひく。
これによって、2n個の部分に分割される。
次に、横方向の直線どうしも互いに交わるようにして、平行を崩していく。
これは、C(n-1,2)通りある。よって、新たにC(n-1,2)個の部分が加わる。
したがって、2n+C(n-1,2)=(n^2+n+2)/2通りとなる。
(終り)

考察
n本目の線は、(n-1)本の既存の線にすべて交差するように線をひく。
ただし、既存の交点を通過しないようにする。
このとき、領域は、(既存の線の本数+1)個増える。
これより、漸化式 F[0]=1、F[n]=F[n-1]+n を得る。
F[n]=F[0]+Σ[k=1,n]{F[n]-F[n-1]}=1+n(n+1)/2=(n^2+n+2)/2
(終り)


LET N=5
LET M=N-2
SET WINDOW -1,2*M+1,-M^2,4*M^2/3
!!DRAW grid
CALL gcDRAWLINE(1,0,0) !1本目 Y軸
FOR K=0 TO M !2本目以降
   CALL gcDRAWLINE(K,1,-K^2)
NEXT K

PRINT (N^2+N+2)/2
END


!FV.LIB 抜粋

EXTERNAL SUB gcDRAWLINE(L,M,N) !直線Lx+My+N=0を描く
IF (L=0 AND M=0) THEN
   PRINT "L=M=0なので、直線が成立しません。"; L;M;N
ELSE
   ASK WINDOW x1,x2,y1,y2
   IF ABS(L)>ABS(M) THEN !y=±xの傾きより大きいなら ※y軸に平行な直線を含む
      PLOT LINES: -(M*y1+N)/L,y1; -(M*y2+N)/L,y2
   ELSE
      PLOT LINES: x1,-(L*x1+N)/M; x2,-(L*x2+N)/M
   END IF
END IF
END SUB


-----------------------------------

問題
n個の円で平面を分割するとき、その領域の個数は最大いくつになるか。

http://mathworld.wolfram.com/PlaneDivisionbyCircles.html

考察
n個の円は、互いに交差するように描いていく。
具体的には、単位円に内接する正n角形の各頂点を中心に半径2の円を描く。
1つの円では、(台の上に円板を置いていく)
 重なっていない部分(外側)が1つ
 重なっている部分(真ん中)がに1つ
2つの円では、
 いずれの円も重なっていない部分(外側)が1つ
 1つの円が重なっている部分(三日月型)が2つ
 2つの円が重なっている部分(真ん中)がに1つ
3つの円では、
 いずれの円も重なっていない部分(外側)が1つ
 1つの円が重なっている部分(三日月型)が3つ
 2つの円が重なっている部分(三日月型)が3つ
 3つの円が重なっている部分(真ん中)がに1つ
4つの円では、
 いずれの円も重なっていない部分(外側)が1つ
 1つの円が重なっている部分(三日月型)が4つ
 2つの円が重なっている部分(三日月型)が4つ
 3つの円が重なっている部分(三日月型)が4つ
 4つの円が重なっている部分(真ん中)がに1つ
となり、n個の場合も同様である。
よって、外側+三日月型+真ん中=1+n(n-1)+1=n^2-n+2
(終り)

類題
円を1,2,3つ用いてベン図はつくれますが、4つ以上の場合は不可能です。
(終り)


LET N=4

SET WINDOW -3.5,3.5,-3.5,3.5
DRAW grid
FOR K=0 TO N-1
   DRAW circle WITH SCALE(2)*SHIFT(COS(2*PI*K/N),SIN(2*PI*K/N))
NEXT K

PRINT N^2-N+2
END


 

ふしぎな分数

 投稿者:山中和義  投稿日:2015年 7月 3日(金)20時38分35秒
  その1
分数a/bの場合、a,bをk個ずつ使うと、
1/2のなら、1/2=(1+1)/(2+2)=(1+1+1)/(2+2+2)= … =k/(2k)=1/2
3/4のなら、3/4=(3+3)/(4+4)=(3+3+3)/(4+4+4)= … =3k/(4k)=3/4
 :
となる。



その2
k,m,nは自然数する。ただし、m<nとする。
分子は、第1項から第km項までの和
分母は、第km+1項から第kn項までの和
の分数を考えると、
Σ[i=1,km]{2i-1} / Σ[i=km+1,kn]{2i-1} = m^2/(n^2-m^2)
例
m=1,n=2のとき、1/3=(1+3)/(5+7)=(1+3+5)/(7+9+11)= … =1/3
m=1,n=3のとき、1/(3+5)=(1+3)/(5+7+9+11)=(1+3+5)/(7+9+11+13+15+17)= … =1/8

考察
分子は、等差数列の和の公式より、{1+(2km-1)}km/2=m^2k^2
分母は、{(2km+1)+(2kn-1)}(mk-nk)/2=(m^2-n^2)k^2
よって、m^2/(n^2-m^2)
(終り)



OPTION ARITHMETIC RATIONAL

LET K=2
LET M=1
LET N=3

LET P=0 !分子
FOR i=1 TO K*M
   PRINT 2*i-1;
   LET P=P+(2*i-1)
NEXT i
PRINT

LET Q=0 !分母
FOR i=K*M+1 TO N*K
   PRINT 2*i-1;
   LET Q=Q+(2*i-1)
NEXT i
PRINT

PRINT P/Q; M^2/(N^2-M^2)

END



その3
k,m,nは自然数する。
分子は、第1項から第km項までの和 ÷ 項数km (すなわち、平均)
分母は、第1項から第kn項までの和 ÷ 項数kn (すなわち、平均)
の分数を考えると、
{ Σ[i=1,km]{2i-1} ÷ km } / { Σ[i=1,kn]{2i-1} ÷ kn } = m/n
例
2/3の場合、{(1+3)/2}/{(1+3+5)/3}={(1+3+5+7)/4}/{(1+3+5+7+9+11)/6}= …

平方根でも可能である。
√{ Σ[i=1,km]{2i-1} / Σ[i=1,kn]{2i-1} } = m/n



OPTION ARITHMETIC RATIONAL

LET K=3
LET M=2
LET N=3

LET P=0 !分子
FOR i=1 TO K*M
   PRINT 2*i-1;
   LET P=P+(2*i-1)
NEXT i
PRINT "/"; K*M
LET P=P/(K*M)

LET Q=0 !分母
FOR i=1 TO N*K
   PRINT 2*i-1;
   LET Q=Q+(2*i-1)
NEXT i
PRINT "/"; K*N
LET Q=Q/(K*N)

PRINT P/Q; M/N

END


 

Re: ふしぎな分数

 投稿者:山中和義  投稿日:2015年 7月 4日(土)20時06分57秒
  > No.3776[元記事へ]

その他

1/(0+1+2)=2/(1+2+3)=3/(2+3+4)=4/(3+4+5)=5/(4+5+6)= … =1/3
考察
k/{(k-1)+k+(k+1)}=k/(3k)=1/3
(終り)


1/3=(1+2)/(4+5)=(1+2+3)/(5+6+7)=(1+2+3+4)/(6+7+8+9)= …
考察
初項a,公差d,項数nの等差数列の和(n/2){2a+(n-1)d}より、
分子=((k-1)/2){2(k-1)+(k-2)(-1)}=k(k-1)/2
分母=((k-1)/2){2(k+1)+(k-2)(1)}=3k(k-1)/2
(終り)


OPTION ARITHMETIC RATIONAL

LET K=6

LET P=0 !分子
FOR i=K-1 TO 1 STEP -1
   LET N=K-i
   PRINT N;
   LET P=P+N
NEXT i
PRINT

LET Q=0 !分母
FOR i=1 TO K-1
   LET N=K+i
   PRINT N;
   LET Q=Q+N
NEXT i
PRINT

PRINT P/Q

END



(1+4)/(2+3)=(5+8)/(6+7)= … =1
(2+8)/(4+6)=(10+16)/(12+14)= … =1
(1+7)/(3+5)=(9+15)/(11+13)= … =1


(1+2)/3=(4+5+6)/(7+8)=(9+10+11+12)/(13+14+15)= … =1 タルタニアの三角形


LET K=4

LET P=0 !分子
FOR i=1 TO K+1
   LET N=K^2+i-1
   PRINT N;
   LET P=P+N
NEXT i
PRINT

LET Q=0 !分母
FOR i=K TO 1 STEP -1
   LET N=(K+1)^2-i
   PRINT N;
   LET Q=Q+N
NEXT i
PRINT

PRINT P/Q

END



1^3/1^2=(1^3+2^3)/(1+2)^2= … =Σk^3/(Σk)^2=1



 

フェルマーの最終定理の数学的帰納法による証明

 投稿者:永野護  投稿日:2015年 7月 8日(水)14時03分0秒
  a^n + b^n = c^n -------① (n>=3,a,b,cは自然数)を満たす自然数a,b,c,は存在しない。 ------フェルマーの最終定理
---------------------------------------------------------------
n=3の場合はすでにオイラーにより証明されている。
即ちa^3 + b^3 ≠ c^3である。
---------------------------------------------------------------
n=p(pは3以上の自然数)の時、 ①が成り立たないと仮定してn=p+1のときも①が成り立たないことが示せればよい。
a^p + b^p <> c^pをa^p + b^p <c^p --------②と a^p + b^p > c^p ------③
の2つの場合に分けて検討する。
-----------------------------------------------------------
先ず②の場合(a^p + b^p < c^p)を検討します。
ここでa>b>cとa>c>bとb>a>cとb>c>aのばあいは明らかにa^p + b^p > c^pだから考えなくてよい。
c>a>bとc>b>aのときは②の両辺にcをかければ(a^p)*c + (b^p)*c< c^(p+1)。
さらにa^(p+1) + b^(p+1)<(a^p)*c + (b^p)*c
ゆえにa^(p+1) + b^(p+1)< c^(p+1)
これでn=p+1の場合を示すことができた。
-------------------------------------------------------------------------
次に③の場合を検討します。
a^p + b^p> c^pの両辺に-1をかけると-a^p - b^p< -c^p
この両辺にcをかけると(-(a^p)*c) + (-(b^p)*c)<-c^(p+1)
さらに-a^(p+1) - b^(p+1)<(-(a^p)*c) + (-(b^p)*c)<-c^(p+1)
これは更にa^(p+1) + b^(p+1)>c^(p+1)となってn=p+1でも③が成り立つことがあつで
示された。
----------------------------------------------------------
証明終わり
---------------------------------

乱雑で読みにくいものとなりました。
あしからずご了承願います。




 

最後から3行目訂正します

 投稿者:永野護  投稿日:2015年 7月 8日(水)14時09分2秒
  a^n + b^n = c^n -------① (n>=3,a,b,cは自然数)を満たす自然数a,b,c,は存在しない。 ------フェルマーの最終定理
---------------------------------------------------------------
n=3の場合はすでにオイラーにより証明されている。
即ちa^3 + b^3 ≠ c^3である。
---------------------------------------------------------------
n=p(pは3以上の自然数)の時、 ①が成り立たないと仮定してn=p+1のときも①が成り立たないことが示せればよい。
a^p + b^p <> c^pをa^p + b^p <c^p --------②と a^p + b^p > c^p ------③
の2つの場合に分けて検討する。
-----------------------------------------------------------
先ず②の場合(a^p + b^p < c^p)を検討します。
ここでa>b>cとa>c>bとb>a>cとb>c>aのばあいは明らかにa^p + b^p > c^pだから考えなくてよい。
c>a>bとc>b>aのときは②の両辺にcをかければ(a^p)*c + (b^p)*c< c^(p+1)。
さらにa^(p+1) + b^(p+1)<(a^p)*c + (b^p)*c
ゆえにa^(p+1) + b^(p+1)< c^(p+1)
これでn=p+1の場合を示すことができた。
-------------------------------------------------------------------------
次に③の場合を検討します。
a^p + b^p> c^pの両辺に-1をかけると-a^p - b^p< -c^p
この両辺にcをかけると(-(a^p)*c) + (-(b^p)*c)<-c^(p+1)
さらに-a^(p+1) - b^(p+1)<(-(a^p)*c) + (-(b^p)*c)<-c^(p+1)
これは更にa^(p+1) + b^(p+1)>c^(p+1)となってn=p+1でも③が成り立つことが
示された。
----------------------------------------------------------
証明終わり
---------------------------------

乱雑で読みにくいものとなりました。
あしからずご了承願います。
 

Re: 最後から3行目訂正します

 投稿者:nagram  投稿日:2015年 7月 9日(木)18時52分48秒
  > No.3779[元記事へ]

③が間違っています。
この証明では「a^p + b^p > c^p ならば a>c かつ b>c」を前提としていますが、a^p + b^p > c^p からは a,b,c の大小関係を特定することはできません。
上式を満たす a>c>b や c>b>a も存在します。

FOR i=1 TO 20
   IF i^3+(i+1)^3>(i+2)^3 AND i^4+(i+1)^4<(i+2)^4 THEN
      PRINT i;i+1;i+2
      PRINT i^3+(i+1)^3 ;">"; (i+2)^3
      PRINT i^4+(i+1)^4 ;"<"; (i+2)^4
      PRINT
   END IF
NEXT i
END

[結果]

i=6
6^3 + 7^3 > 8^3
6^4 + 7^4 < 8^4

i=7
7^3 + 8^3 > 9^3
7^4 + 8^4 < 9^4
 

変分問題

 投稿者:永野護  投稿日:2015年 7月18日(土)12時49分7秒
  次の変分問題をといてください。(最大値を求む)
凡関数(関数の関数)H(G(X))=G^2、ただしG(X)は各係数ならびに定数項が1以上5以下の2次多項式とする。Xの定義域は1以上10までの整数とする。
--------------------------------------------------------------------
答え
あきらかにG(X)はG(X)=5X^2+5X+5である。
このときH(G(X))=25X^4+ 50X^3 +75X^2+50X+ 25
X=10を代入してH(G(X))はX=10で最大値308025をとる。
ANSWER G(X)=5X^2+5X+5のとき最大値308025
------------------------------------------------------
以上のようなのも変分問題を解いたといえるでしょうか。
 

プログラムの依頼

 投稿者:GAI  投稿日:2015年 7月22日(水)20時59分5秒
  数列{a[1],a[2],a[3],・・・}は
a[2n]=a[n];a[2n+1]=(-1)^n
で定められていて、点Pは座標平面上を次のように移動する。
(1)原点をP[0]とし、PはP[0]からx軸の正の方向へ1だけ進む。
この点をP[1]とする。
(2)P[i]まで来たPは,a[i]が1なら左へ90°方向を変えて1だけ進み、-1なら右へ90°方向を変えて1だけ進む。
この点をP[i+1]とする。(ただしi=1,2,3,・・・)


この様に決まっていくP[1],P[2],P[3],・・・の動きを目で追いたい。
手作業でP[100]まではやってみましたが、それ以上を見てみたい。
なお数列{a[n]}
は具体的に{1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,1,・・・}
が現れるんですが、これってBASICにはコマンドはありませんが代数に特化した計算ソフト
(PARI/GP では kronecker(-1, n) Mathematica では KroneckerSymbol[ -1, n] でこの列が取り出せます。)
http://oeis.org/A034947 (参考)
自分でプログラムを作っていたんですがどうしても思うような動きが起こりません。
よろしくお願いします。

 

Re: プログラムの依頼

 投稿者:山中和義  投稿日:2015年 7月22日(水)22時34分24秒
  > No.3782[元記事へ]

GAIさんへのお返事です。

> 数列{a[1],a[2],a[3],・・・}は
> a[2n]=a[n];a[2n+1]=(-1)^n
> で定められていて、点Pは座標平面上を次のように移動する。
> (1)原点をP[0]とし、PはP[0]からx軸の正の方向へ1だけ進む。
> この点をP[1]とする。
> (2)P[i]まで来たPは,a[i]が1なら左へ90°方向を変えて1だけ進み、-1なら右へ90°方向を変えて1だけ進む。
> この点をP[i+1]とする。(ただしi=1,2,3,・・・)
>
>
> この様に決まっていくP[1],P[2],P[3],・・・の動きを目で追いたい。


ドラゴン曲線が現れました。



OPTION ARITHMETIC COMPLEX !複素平面

SET WINDOW -10,30,-12,28 !表示領域

LET N=300 !2n+1

DIM A(2*N+1) !数列
LET A(1)=1
FOR K=1 TO N
   LET A(2*K)=A(K)
   LET A(2*K+1)=(-1)^K
NEXT K
MAT PRINT A; !1,1,-1,1,1,-1,-1,1,1,1,-1,-1,1,-1,-1,1,…

LET P=0 !p[0]は原点
PLOT LINES: P;
LET D=0 !平面上での向き 0:右、1:上、2:左、3:下
LET P=1 !p[1]は点(1,0)
PLOT LINES: P;
FOR K=1 TO 2*N+1 !p[k]
   LET D=D+A(K) !左へ90°、右へ90°回転する
   LET P=P+EXP(COMPLEX(0,1)*2*PI*D/4) !各方向へ1だけ移動する
   PLOT LINES: P;
   !!!PRINT P; D !debug
NEXT K

END



 

プログラムの依頼その2

 投稿者:GAI  投稿日:2015年 7月25日(土)08時04分1秒
  何度もすみません。
A={1,2,3,4,6,8,12,16,24,32}
の集合に対し
異なるAの要素の和で32を構成するものが何通りあるか知りたいとする。
やり方が分からなかったので、Aの部分集合の全てを作り、それぞれの和を計算させ、
合計のデータ頻度を集計し(これらをやってくれるコマンドは揃っていて割と容易く作業は進められる。)11通りあることが分かった。
1+2+3+6+8+12
2+4+6+8+12
1+2+3+4+6+16
1+3+4+8+16
2+6+8+16
1+3+12+16
4+12+16
1+3+4+24
2+6+24
8+24
32

しかしAの要素の数が多くなると部分集合全てを作る手段をとっているとメモリーが足らなくなるし、なんか非能率的のような気がする。
そこで一般にAの要素を与え(50個くらいは可能な様にしたい。)
このAの異なる要素の和で指定するNの値にできるものが何通りあるか(具体的なAの要素はわからなくてもよい。全部で何通り可能かの数だけを知りたい。)
これを可能とするプログラムを作って欲しいのですが・・・
 

Re: プログラムの依頼その2

 投稿者:山中和義  投稿日:2015年 7月25日(土)09時40分8秒
  > No.3784[元記事へ]

GAIさんへのお返事です。

> そこで一般にAの要素を与え(50個くらいは可能な様にしたい。)
> このAの異なる要素の和で指定するNの値にできるものが何通りあるか(具体的なAの要素はわからなくてもよい。全部で何通り可能かの数だけを知りたい。)


これも上限はあります。nの値までの配列がとれれば可能です。

参照 http://6317.teacup.com/basic/bbs/3621 動的計画法


DATA 32 !値
DATA 10 !データの個数m
DATA 1,2,3,4,6,8,12,16,24,32 !データ

READ X
DIM A(X) !1からxまでの数
MAT A=ZER

READ M

LET S=0
FOR i=1 TO M !ひとつずつ取り出す
   READ D
   FOR P=MIN(S,X-D) TO 1 STEP -1 !部分和を求める
      IF A(P)>0 THEN
         LET T=P+D
         LET A(T)=A(T)+A(P)
      END IF
   NEXT P
   IF D<=X THEN LET A(D)=A(D)+1
   LET S=S+D
NEXT i

PRINT A(X);"通り" !答え(場合の数)

END


 

あなたの耳は何Hzまで ?

 投稿者:しばっち  投稿日:2015年 7月26日(日)20時11分4秒
  このプログラムはサウンドカード、スピーカーの性能に依存します
また、スピーカーから音自体が出ていない場合があります
スピーカーの音量にご注意ください

BEEP版
(BEEPコマンド 何Hzまで指定できるのだろう?)
!'簡易可聴域検査
LET SW=1
IF SW=0 THEN
   LET XMAX=100 !'低音域
   LET XMIN=10
ELSE
   LET XMAX=20000 !'高音域
   LET XMIN=1000
END IF
DO
   LET XMID=INT((XMIN+XMAX)/2) !'2分法
   DO
      PRINT XMID;"Hz"
      BEEP XMID,1000
      INPUT  PROMPT "聞こえましたか (Yes/No/Retry) ":A$
   LOOP WHILE A$="R" OR A$="r"
   IF SW=0 THEN
      IF A$="Y" OR A$="y" THEN LET XMAX=XMID ELSE LET XMIN=XMID !'低音域
   ELSE
      IF A$="Y" OR A$="y" THEN LET XMIN=XMID ELSE LET XMAX=XMID !'高音域
   END IF
LOOP UNTIL ABS(XMAX-XMIN)<10
PRINT "あなたの可聴域は";XMID;"Hzです"
END

---------------------------------------------------------------------------------------------------------
WAVEファイル版

LET SW=1
IF SW=0 THEN
   LET XMAX=100 !'低音域
   LET XMIN=10
ELSE
   LET XMAX=20000 !'高音域
   LET XMIN=1000
END IF
DO
   LET XMID=INT((XMIN+XMAX)/2) !'2分法
   DO
      PRINT XMID;"Hz"
      CALL MAKEWAV("TEST.wav",XMID,1)
      PLAYSOUND "TEST.wav"
      INPUT  PROMPT "聞こえましたか (Yes/No/Retry) ":A$
   LOOP WHILE A$="R" OR A$="r"
   IF SW=0 THEN
      IF A$="Y" OR A$="y" THEN LET XMAX=XMID ELSE LET XMIN=XMID !'低音域
   ELSE
      IF A$="Y" OR A$="y" THEN LET XMIN=XMID ELSE LET XMAX=XMID !'高音域
   END IF
LOOP UNTIL ABS(XMAX-XMIN)<20
PRINT "あなたの可聴域は";XMID;"Hzです"
FILE DELETE "TEST.wav"
END

EXTERNAL  SUB MAKEWAV(F$,FREQ,SECOND)
LET CHANNEL=1 !'モノラル
LET SAMPLEBIT=16 !'bit数
LET HEADERSIZE=16
LET WAVETYPE=1
LET SAMPLINGFREQ=48000 !'サンプリング周波数
LET SAMPLESIZE=SAMPLEBIT/8*CHANNEL
LET DATARATE = SAMPLESIZE * SAMPLINGFREQ
LET VOL=.7 !'音量
LET LEVEL=2^(SAMPLEBIT-1)*VOL
LET PCMSIZE=INT(DATARATE*SECOND)
LET WAVEFILESIZE=PCMSIZE+36
IF POS(F$,".")=0 THEN LET F$=F$&".wav"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"RIFF";
PRINT #1:MKL$(WAVEFILESIZE);
PRINT #1:"WAVEfmt ";
PRINT #1:MKL$(HEADERSIZE);
PRINT #1:MKI$(WAVETYPE);
PRINT #1:MKI$(CHANNEL);
PRINT #1:MKL$(SAMPLINGFREQ);
PRINT #1:MKL$(DATARATE);
PRINT #1:MKI$(SAMPLESIZE);
PRINT #1:MKI$(SAMPLEBIT);
PRINT #1:"data";
PRINT #1:MKL$(PCMSIZE);
FOR I=0 TO INT(SAMPLINGFREQ*SECOND)-1
   PRINT #1:MKI$(INT(LEVEL*SIN(FREQ*I/SAMPLINGFREQ*2*PI)));
NEXT I
CLOSE #1
END SUB

EXTERNAL FUNCTION MKI$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$
IF A<0 THEN LET A=A+65536
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(INT(A/256))
LET MKI$=A$&B$
END FUNCTION

EXTERNAL FUNCTION MKL$(A)
OPTION CHARACTER BYTE
DECLARE STRING A$,B$,C$,D$
IF A<0 THEN LET A=A+2^32
LET A$=CHR$(MOD(A,256))
LET B$=CHR$(MOD(INT(A/256),256))
LET C$=CHR$(MOD(INT(A/65536),256))
LET D$=CHR$(MOD(INT(A/16777216),256))
LET MKL$=A$&B$&C$&D$
END FUNCTION
 

2分割の方法は?

 投稿者:GAI  投稿日:2015年 7月28日(火)11時47分42秒
  S1={1,2,3,4}の集合を
A={1,4}
B={2,3} に同数の集合に分割すると
1+4=2+3
が成立する。

S2={1,2,3,4,5,6,7,8}の集合を
A={1,4,6,7}
B={2,3,5,8} に分割すると
1+4+6+7=2+3+5+8
1^2+4^2+6^2+7^2=2^2+3^2+5^2+8^2
が同時に成立する。

S3={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}の集合を
A={1,4,6,7,10,11,13,16}
B={2,3,5,8, 9,12,14,15}に分割すると
1+4+6+7+10+11+13+16=2+3+5+8+9+12+14+15
1^2+4^2+6^2+7^2+10^2+11^2+13^2+16^2=2^2+3^2+5^2+8^2+9^2+12^2+14^2+15^2
1^3+4^3+6^3+7^3+10^3+11^3+13^3+16^3=2^3+3^3+5^3+8^3+9^3+12^3+14^3+15^3
がやはり同時に成立した。

そこで
S4={1,2,3,・・・,32}の集合を同数の2組A,Bに分け
各集合の要素の1,2,3,4乗の和同士が同時に等しくなる分け方を探そうとした。
ところが調べ方のアルゴリズムが非能率的である事やら、私のハードの性能が今ひとつなのか私のやり方では(総当たりを調べている。)メモリーが足りませんの返事が返り二進も三進も進めません。
この壁を越える方法があれば結果が知りたい。(不可能も含めて)
もし一般に成立するなら可能な限りS={1~2^n}の2分割例がわかれば知りたい。







 

Re: 2分割の方法は?

 投稿者:山中和義  投稿日:2015年 7月28日(火)12時33分2秒
  > No.3787[元記事へ]

GAIさんへのお返事です。

> S1={1,2,3,4}の集合を
> A={1,4}
> B={2,3} に同数の集合に分割すると
> 1+4=2+3
> が成立する。
>
> S2={1,2,3,4,5,6,7,8}の集合を
> A={1,4,6,7}
> B={2,3,5,8} に分割すると
> 1+4+6+7=2+3+5+8
> 1^2+4^2+6^2+7^2=2^2+3^2+5^2+8^2
> が同時に成立する。
>
> もし一般に成立するなら可能な限りS={1~2^n}の2分割例がわかれば知りたい。


http://6317.teacup.com/basic/bbs/3520

 

Re: 2分割の方法は?

 投稿者:GAI  投稿日:2015年 7月29日(水)09時42分35秒
  山中和義さんへのお返事です。

HREF="http://6317.teacup.com/basic/bbs/3520">http://6317.teacup.com/basic/bbs/3520


そういえば一度目にしていましたね。
しかしその時はこの真意が読めず、読み過ごしていました。
またこのThue-Morse sequenceは以前パターンを繰り返さない語を作り出すときに利用した経験があった。
この配列がこの問題と繋がっているんですね。
でもこれって凄いですね。
1~2^nをこの2グループに分けると、こんなにも見事な法則が成り立つなんて奇跡のようだ。
(1~16までを全パターンの場合について一つずつチェックして、唯一の組合せを絞り出したので尚更この出来事が起こることが奇跡に感じられる。)

いろいろ調べていたら
A={1,29,30,58}
B={2,22,37,57}
C={3,19,40,56}
D={7,12,47,52}
の4組に対しては
各成分の1~3乗までの和が全て等しく

A={1,5,10,24,28,42,47,51}
B={2,3,12,21,31,40,49,50}
の2組に対しては
各成分の1~7乗までの和どうしが全て等しくなる組合せになっているという。
これはこれでまた凄い。
でもよくこんな組合せを探し出すものですね。

 

Re: 2分割の方法は?

 投稿者:山中和義  投稿日:2015年 7月29日(水)10時24分6秒
  > No.3789[元記事へ]

GAIさんへのお返事です。

> (1~16までを全パターンの場合について一つずつチェックして、唯一の組合せを絞り出したので尚更この出来事が起こることが奇跡に感じられる。)


前出の部分和のプログラムで、1乗,2乗,3乗,4乗が算出できます。
1乗,2乗,3乗は、2通り。 4乗は、5988通り
対称性(+から始めるか、-から始める)を考慮すれば半分です。
なお、5乗以上は配列が定義できませんので、確認できません。


LET K=4 !べき乗
LET M=2^(K+1) !1からmまで
PRINT M

LET X=0 !Σi^k
FOR i=1 TO M
   LET X=X+i^K
NEXT i
LET X=X/2 !その半分
PRINT X

DIM A(X)
MAT A=ZER

FOR i=1 TO M !ひとつずつ取り出す
   LET D=i^K
   FOR P=X-D TO 1 STEP -1 !部分和を求める
      IF A(P)>0 THEN
         LET T=P+D
         LET A(T)=A(T)+A(P)
      END IF
   NEXT P
   IF D<=X THEN LET A(D)=A(D)+1
NEXT i

PRINT A(X);"通り" !答え(場合の数)

END


実行結果

32
3623048
5988 通り


 

Re: 2分割の方法は?

 投稿者:GAI  投稿日:2015年 7月29日(水)18時08分51秒
  > No.3790[元記事へ]

山中和義さんへのお返事です。

>
> 前出の部分和のプログラムで、1乗,2乗,3乗,4乗が算出できます。
> 1乗,2乗,3乗は、2通り。 4乗は、5988通り
> 対称性(+から始めるか、-から始める)を考慮すれば半分です。
> なお、5乗以上は配列が定義できませんので、確認できません。
>

このプログラムで
k=3として走らせると
実行結果
16
9248
2 通り
が返ってきますが,
この2通りは
実質
1,4,6,7,10,11,13,16
2,3,5,8, 9,12,14,15
を返していると思われますが、これらは互いに補集合にあるので
S={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
を2グループに分ける方法はただ一つの
A={1,4,6,7,10,11,13,16}
B={2,3,5,8, 9,12,14,15}
でしかないと言う意味と解釈できる。
実際
1^r+4^r+6^r+7^r+10^r+11^r+13^r+16^r=2^r+3^r+5^r+8^r+9^r+12^r+14^r+15^r
r=1-> 68=68
r=2-> 745=745
r=3-> 9248=9248
(r=4-> 122692≠121156)
で、これが唯一の組合せである。

ところが
k=4 で実行すると
5988 通り
が返ってきますがこのことは
5988/2=2994 通りの組合せが可能で、その内の一つが
A={1,4,6,7,10,11,13,16,18,19,21,24,25,28,30,31};
B={2,3,5,8,9,12,14,15,17,20,22,23,26,27,29,32};
が含まれていると解釈することになるのでしょうか?
確かにこの組合せは
r=1-> 264=264
r=2-> 5720=5720
r=3-> 139392=139392
r=4-> 3623048=3623048
(r=5-> 98024064≠98146944)
で条件を全て満たしています。
でも感覚的に他に2993通りもあるとは思えないんですが、もしわかれば実際にどんな組合せがあるのか知りたいです。


 

Re: 2分割の方法は?

 投稿者:山中和義  投稿日:2015年 7月29日(水)19時57分36秒
  > No.3791[元記事へ]

GAIさんへのお返事です。

> でも感覚的に他に2993通りもあるとは思えないんですが、もしわかれば実際にどんな組合せがあるのか知りたいです。



PRINT +1^4-2^4-3^4-4^4-5^4-6^4-7^4-8^4-9^4-10^4+11^4+12^4-13^4-14^4+15^4-16^4+17^4-18^4+19^4+20^4  &
&    -21^4-22^4-23^4+24^4+25^4-26^4-27^4-28^4+29^4+30^4+31^4-32^4

PRINT +1^4-2^4-3^4-4^4-5^4-6^4-7^4-8^4-9^4-10^4+11^4+12^4+13^4+14^4-15^4+16^4+17^4+18^4-19^4+20^4  &
&    +21^4+22^4-23^4-24^4+25^4-26^4+27^4-28^4+29^4-30^4-31^4+32^4

PRINT +1^4-2^4-3^4-4^4-5^4-6^4-7^4-8^4-9^4-10^4+11^4+12^4+13^4+14^4+15^4-16^4+17^4-18^4+19^4-20^4  &
&    +21^4+22^4-23^4-24^4-25^4+26^4-27^4+28^4+29^4-30^4-31^4+32^4

PRINT +1^4-2^4-3^4-4^4-5^4-6^4-7^4-8^4+9^4-10^4-11^4+12^4-13^4-14^4+15^4+16^4+17^4+18^4+19^4+20^4  &
&    +21^4-22^4+23^4+24^4-25^4-26^4+27^4+28^4-29^4-30^4-31^4+32^4

PRINT +1^4-2^4-3^4-4^4-5^4-6^4-7^4-8^4+9^4-10^4+11^4-12^4+13^4-14^4+15^4-16^4-17^4-18^4-19^4-20^4  &
&    -21^4+22^4-23^4-24^4+25^4+26^4-27^4-28^4+29^4+30^4+31^4-32^4

!など

END


http://6317.teacup.com/basic/bbs/3518 の最後のプログラムを

OPTION ARITHMETIC RATIONAL !多桁の整数
LET N=32
LET M=4 !※4乗

PUBLIC NUMERIC F(3000) !f(x)=x^m
LET S=0 !Σk^m

  :
  :

として、実行してください。


4乗の関係式ですので、1乗,2乗,3乗は満たしません。(満たす場合もある)


たとえば、1乗でも1から8までの整数を使用すれば、7通りあります。


PRINT +1^1-2^1-3^1+4^1-5^1+6^1+7^1-8^1
PRINT +1^1-2^1-3^1+4^1+5^1-6^1-7^1+8^1
PRINT +1^1-2^1+3^1-4^1-5^1+6^1-7^1+8^1
PRINT +1^1+2^1-3^1-4^1-5^1-6^1+7^1+8^1
PRINT +1^1+2^1-3^1+4^1+5^1+6^1-7^1-8^1
PRINT +1^1+2^1+3^1-4^1+5^1-6^1+7^1-8^1
PRINT +1^1+2^1+3^1+4^1-5^1-6^1-7^1+8^1
END


 

Re: 2分割の方法は?

 投稿者:GAI  投稿日:2015年 7月30日(木)07時02分58秒
  > No.3792[元記事へ]

山中和義さんへのお返事です。

>
> 4乗の関係式ですので、1乗,2乗,3乗は満たしません。(満たす場合もある)
>
>
> たとえば、1乗でも1から8までの整数を使用すれば、7通りあります。
>
>
> PRINT +1^1-2^1-3^1+4^1-5^1+6^1+7^1-8^1
> PRINT +1^1-2^1-3^1+4^1+5^1-6^1-7^1+8^1
> PRINT +1^1-2^1+3^1-4^1-5^1+6^1-7^1+8^1
> PRINT +1^1+2^1-3^1-4^1-5^1-6^1+7^1+8^1
> PRINT +1^1+2^1-3^1+4^1+5^1+6^1-7^1-8^1
> PRINT +1^1+2^1+3^1-4^1+5^1-6^1+7^1-8^1
> PRINT +1^1+2^1+3^1+4^1-5^1-6^1-7^1+8^1
> END

分かりました。
4乗に限ったものなんですね。
しかもS={1,2,3,・・・,32}
を同数に分けるのではなく、任意の数の2組に分ける方法での集計なんですね。
例
A={1,11,12,15,17,19,20,24,25,29,30,31}
B={2,3,4,5,6,7,8,9,10,13,14,16,18,21,22,23,26,27,28,32}

ですから例えば
S={1,2,3,・・・,64}
をちょうど同数どうしの2組に分けて、その各成分が
1,2,3,4,5乗のそれぞれの和で全て等しくなる分け方はただ一つで
Thue Morse sequence(A010060)での{0,1}対応での2組
A={1,4,6,7,10,11,13,16,18,19,21,24,25,28,30,31,・・・,61,64}(参考 A026147)
B={2,3,5,8,9,12,14,15,17,20,22,23,26,27,29,32,・・・,62,63} (参考 A181155)
のただ一組に限られると理解していいんですね。

実際この2組で確認したら
1乗->1040,1040
2乗->44720,44720
3乗->2163200,2163200
4乗->111612176,111612176
5乗->5998553600,5998553600
でバッチリでした。

これがどこまでも
S={1~2^n}なる集合を同数の2組に分けて、その要素での
1,2,3,・・・,(n-1)乗全てに渡る和どうしが等しくできるグループ分けが可能(A026147,A181155 利用)とはまったく驚きです。



 

魔方陣

 投稿者:しばっち  投稿日:2015年 8月 1日(土)21時53分29秒
  OPTION BASE 0
LET K=24
DIM A(K+3,K+3)
FOR L=4 TO K STEP 4
   FOR M=0 TO L/4
      FOR N=0 TO L/4
         LET A(4*N,4*M)=1
         LET A(4*N+1,4*M)=1
         LET A(4*N+1,4*M+1)=1
         LET A(4*N,4*M+1)=1
         LET A(4*N+2,4*M+2)=1
         LET A(4*N+3,4*M+2)=1
         LET A(4*N+2,4*M+3)=1
         LET A(4*N+3,4*M+3)=1
      NEXT N
   NEXT M
   FOR Y=1 TO L
      FOR X=1 TO L
         IF A(X,Y)=1 THEN LET A(X,Y)=L*(Y-1)+X ELSE LET A(X,Y)=L*L-(L*(Y-1)+X-1)
      NEXT X
   NEXT Y
   PRINT L;"×";L;"魔方陣"
   FOR Y=1 TO L
      FOR X=1 TO L
         PRINT USING "#####":A(X,Y);
      NEXT X
      PRINT
   NEXT Y
   PRINT
   MAT A=ZER
NEXT L
END

      4 × 4 魔方陣
    1   15   14    4
   12    6    7    9
    8   10   11    5
   13    3    2   16

             8 × 8 魔方陣
    1   63   62    4    5   59   58    8
   56   10   11   53   52   14   15   49
   48   18   19   45   44   22   23   41
   25   39   38   28   29   35   34   32
   33   31   30   36   37   27   26   40
   24   42   43   21   20   46   47   17
   16   50   51   13   12   54   55    9
   57    7    6   60   61    3    2   64

OPTION BASE 0
LET M=30
DIM A(M,M)
FOR N=6 TO M STEP 4
!'N=NN*4+2
   LET K=N*2-2
   FOR I=1 TO N-2
      FOR J=1 TO N-2
         IF BITAND(I,2)=BITAND(J,2) THEN
            LET K=K+1
            LET A(I,J)=K
         ELSE
            LET K=K+1
            LET A(N-1-I,N-1-J)=K
         END IF
      NEXT J
   NEXT I
   LET SUM=N*N+1
   LET A(0,0)=N-2
   LET A(N-1,N-1)=SUM-(N-2)
   LET A(0,N-1)=N-1
   LET A(N-1,0)=SUM-(N-1)
   LET A(0,N-2)=SUM-2*N+3
   LET A(N-1,N-2)=SUM-(SUM-2*N+3)
   LET A(N-2,0)=2*N-2
   LET A(N-2,N-1)=SUM-(2*N-2)
   FOR I=1 TO N-3
      IF BITAND(I,2)=0 THEN LET J=0 ELSE LET J=N-1
      LET A(J,I)=N-2-I
      LET A(N-1-J,I)=SUM-(N-2-I)
      LET A(I,J)=N-1+I
      LET A(I,N-1-J)=SUM-(N-1+I)
   NEXT I
   PRINT N;"*";N;"魔方陣"
   FOR I=0 TO N-1
      FOR J=0 TO N-1
         PRINT USING" #####":A(I,J);
      NEXT J
      PRINT
   NEXT I
   PRINT
NEXT N
END

             6 * 6 魔方陣
     4     3    35    36    28     5
     6    11    25    24    14    31
    30    22    16    17    19     7
    29    18    20    21    15     8
    10    23    13    12    26    27
    32    34     2     1     9    33

                    10 * 10 魔方陣
     8     7    95    96     4     3    99   100    84     9
    10    19    81    80    22    23    77    76    26    91
    90    74    28    29    71    70    32    33    67    11
    89    66    36    37    63    62    40    41    59    12
    13    43    57    56    46    47    53    52    50    88
    14    51    49    48    54    55    45    44    58    87
    86    42    60    61    39    38    64    65    35    15
    85    34    68    69    31    30    72    73    27    16
    18    75    25    24    78    79    21    20    82    83
    92    94     6     5    97    98     2     1    17    93
 

BESSEL_J関数

 投稿者:しばっち  投稿日:2015年 8月 1日(土)21時54分46秒
  https://en.wikipedia.org/wiki/Bessel_function

CALL GINIT(800,400)
SET WINDOW 0,30,-.5,.5
DRAW GRID(1,1)
FOR N=0 TO 5
   SET LINE COLOR N+1
   FOR X=0 TO 30 STEP 1/16
      LET Y=BESSELJ(N,X)
      PLOT LINES:X,Y;
   NEXT  X
   PLOT LINES
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION INTEGRAL(R,Z) !'ガウス・ルジャンドル
LET A=0
LET B=PI
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO 20
   READ X,C
   LET S=S+C*F(R,Z,U+V*X)*V
NEXT I
LET INTEGRAL=S/PI
DATA -.9931285991850949,1.7614007139152118E-02
DATA -.9639719272779138,4.0601429800386941E-02
DATA -.9122344282513259,6.2672048334109064E-02
DATA -.8391169718222188,8.3276741576704749E-02
DATA -.7463319064601508,1.0193011981724044E-01
DATA -.6360536807265150,1.1819453196151842E-01
DATA -.5108670019508271,1.3168863844917663E-01
DATA -.3737060887154196,1.4209610931838205E-01
DATA -.2277858511416451,1.4917298647260375E-01
DATA -.0765265211334973,1.5275338713072585E-01
DATA  .0765265211334973,1.5275338713072585E-01
DATA  .2277858511416451,1.4917298647260375E-01
DATA  .3737060887154196,1.4209610931838205E-01
DATA  .5108670019508271,1.3168863844917663E-01
DATA  .6360536807265150,1.1819453196151842E-01
DATA  .7463319064601508,1.0193011981724044E-01
DATA  .8391169718222188,8.3276741576704749E-02
DATA  .9122344282513259,6.2672048334109064E-02
DATA  .9639719272779138,4.0601429800386941E-02
DATA  .9931285991850949,1.7614007139152118E-02
END FUNCTION

EXTERNAL  FUNCTION F(R,X,T)
LET F=COS(R*T-X*SIN(T))
END FUNCTION

EXTERNAL  FUNCTION INTEGRAL2(R,Z) !'ガウス・ラゲール
FOR I=1 TO 6
   READ X,W
   LET S=S+FF(R,Z,X)*EXP(X)*W
NEXT I
LET INTEGRAL2=S
DATA     .2228466041792606894643548,4.5896467394996359356828488E-01
DATA    1.1889321016726230307431509,4.1700083077212099411337757E-01
DATA    2.9927363260593140776913253,1.1337338207404497573870619E-01
DATA    5.7751435691045105018398304,1.0399197453149074898913303E-02
DATA    9.8374674183825899177155470,2.6101720281493205947924286E-04
DATA   15.9828739806017017825457916,8.9854790642962123882529205E-07
END FUNCTION

EXTERNAL  FUNCTION FF(R,X,T)
LET FF=EXP(-X*SINH(T)-R*T)
END FUNCTION

EXTERNAL  FUNCTION BESSELJ(R,X) !'Rは実数
LET S=INTEGRAL(ABS(R),X)-SIN(ABS(R)*PI)/PI*INTEGRAL2(ABS(R),X)
IF R<0 THEN LET S=S*(-1)^INT(ABS(R))
LET BESSELJ=S
END FUNCTION
 

BESSEL_Y関数

 投稿者:しばっち  投稿日:2015年 8月 1日(土)21時55分38秒
  CALL GINIT(800,400)
SET WINDOW 0,20,-1,1
DRAW GRID(1,1)
FOR N=0 TO 5
   SET LINE COLOR N+1
   FOR X=0 TO 20 STEP 1/16
      LET Y=BESSELY(N,X)
      PLOT LINES:X,Y;
   NEXT  X
   PLOT LINES
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION INTEGRAL(R,Z) !'ガウス・ルジャンドル
LET A=0
LET B=PI
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO 50
   READ X,C
   LET S=S+C*F(R,Z,U+V*X)*V
NEXT I
LET INTEGRAL=S/PI
DATA -.9988664044200710501854594,2.9086225531551409584007243E-03
DATA -.9940319694320907125851082,6.7597991957454015027788782E-03
DATA -.9853540840480058823090096,1.0590548383650969263569681E-02
DATA -.9728643851066920737133441,1.4380822761485574419378909E-02
DATA -.9566109552428079429977456,1.8115560713489390351259943E-02
DATA -.9366566189448779337808749,2.1780243170124792981592069E-02
DATA -.9130785566557918930897356,2.5360673570012390440194878E-02
DATA -.8859679795236130486375410,2.8842993580535198029906373E-02
DATA -.8554297694299460846113626,3.2213728223578016648165827E-02
DATA -.8215820708593359483562541,3.5459835615146154160734611E-02
DATA -.7845558329003992639053052,3.8568756612587675244770150E-02
DATA -.7444943022260685382605363,4.1528463090147697422411979E-02
DATA -.7015524687068222510895463,4.4327504338803275492022287E-02
DATA -.6558964656854393607816249,4.6955051303948432965633014E-02
DATA -.6077029271849502391803818,4.9400938449466314921243581E-02
DATA -.5571583045146500543155229,5.1655703069581138489905296E-02
DATA -.5044581449074642016514591,5.3710621888996246523458797E-02
DATA -.4498063349740387891471315,5.5557744806212517623567426E-02
DATA -.3934143118975651273942293,5.7189925647728383723029315E-02
DATA -.3355002454194373568369883,5.8600849813222445835122437E-02
DATA -.2762881937795319903276453,5.9785058704265457509576405E-02
DATA -.2160072368760417568472845,6.0737970841770216031750015E-02
DATA -.1548905899981459020716286,6.1455899590316663756406786E-02
DATA -.0931747015600861408544504,6.1936067420683243384087510E-02
DATA -.0310983383271888761123290,6.2176616655347262321033107E-02
DATA  .0310983383271888761123290,6.2176616655347262321033107E-02
DATA  .0931747015600861408544504,6.1936067420683243384087510E-02
DATA  .1548905899981459020716286,6.1455899590316663756406786E-02
DATA  .2160072368760417568472845,6.0737970841770216031750015E-02
DATA  .2762881937795319903276453,5.9785058704265457509576405E-02
DATA  .3355002454194373568369883,5.8600849813222445835122437E-02
DATA  .3934143118975651273942293,5.7189925647728383723029315E-02
DATA  .4498063349740387891471315,5.5557744806212517623567426E-02
DATA  .5044581449074642016514591,5.3710621888996246523458797E-02
DATA  .5571583045146500543155229,5.1655703069581138489905296E-02
DATA  .6077029271849502391803818,4.9400938449466314921243581E-02
DATA  .6558964656854393607816249,4.6955051303948432965633014E-02
DATA  .7015524687068222510895463,4.4327504338803275492022287E-02
DATA  .7444943022260685382605363,4.1528463090147697422411979E-02
DATA  .7845558329003992639053052,3.8568756612587675244770150E-02
DATA  .8215820708593359483562541,3.5459835615146154160734611E-02
DATA  .8554297694299460846113626,3.2213728223578016648165827E-02
DATA  .8859679795236130486375410,2.8842993580535198029906373E-02
DATA  .9130785566557918930897356,2.5360673570012390440194878E-02
DATA  .9366566189448779337808749,2.1780243170124792981592069E-02
DATA  .9566109552428079429977456,1.8115560713489390351259943E-02
DATA  .9728643851066920737133441,1.4380822761485574419378909E-02
DATA  .9853540840480058823090096,1.0590548383650969263569681E-02
DATA  .9940319694320907125851082,6.7597991957454015027788782E-03
DATA  .9988664044200710501854594,2.9086225531551409584007243E-03
END FUNCTION

EXTERNAL  FUNCTION F(N,X,T)
LET F=SIN(X*SIN(T)-N*T)
END FUNCTION

EXTERNAL  FUNCTION INTEGRAL2(R,Z) !'ガウス・ラゲール
FOR I=1 TO 6
   READ X,W
   LET S=S+FF(R,Z,X)*EXP(X)*W
NEXT I
LET INTEGRAL2=S/PI
DATA     .2228466041792606894643548,4.5896467394996359356828488E-01
DATA    1.1889321016726230307431509,4.1700083077212099411337757E-01
DATA    2.9927363260593140776913253,1.1337338207404497573870619E-01
DATA    5.7751435691045105018398304,1.0399197453149074898913303E-02
DATA    9.8374674183825899177155470,2.6101720281493205947924286E-04
DATA   15.9828739806017017825457916,8.9854790642962123882529205E-07
END FUNCTION

EXTERNAL  FUNCTION FF(N,X,T)
LET FF=(EXP(N*T)+(-1)^N*EXP(-N*T))*EXP(-X*SINH(T))
END FUNCTION

EXTERNAL  FUNCTION BESSELY(N,X) !'Nは整数
LET S=INTEGRAL(INT(ABS(N)),X)-INTEGRAL2(INT(ABS(N)),X)
IF N<0 THEN LET S=S*(-1)^INT(ABS(N))
LET BESSELY=S
END FUNCTION
 

BESSEL_I関数

 投稿者:しばっち  投稿日:2015年 8月 1日(土)21時57分33秒
  CALL GINIT(400,800)
SET WINDOW 0,5,-1,49
DRAW GRID(1,10)
FOR N=0 TO 5
   SET LINE COLOR N+1
   FOR X=0 TO 5 STEP 1/16
      LET Y=BESSELI(N,X)
      PLOT LINES:X,Y;
   NEXT  X
   PLOT LINES
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION INTEGRAL(R,Z) !'ガウス・ルジャンドル
LET A=0
LET B=PI
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO 400
   READ X,C
   LET S=S+C*F(R,Z,U+V*X)*V
NEXT I
LET INTEGRAL=S/PI
DATA -.9999819727039624507107997,4.6263724177190118157440220E-05
DATA -.9999050164693312795671775,1.0769038102183646230364914E-04
DATA -.9997665712667108498622001,1.6920137336541413264932958E-04
DATA -.9995666148626408000179844,2.3070985544248655269465132E-04
DATA -.9993051557937030335325083,2.9220572803523217847223343E-04
DATA -.9989822092480797992371162,3.5368409613102448239639817E-04
DATA -.9985977947971757433952425,4.1514088233419025171823795E-04
DATA -.9981519359718441275385541,4.7657220501003854013133061E-04
DATA -.9976446601486403940368916,5.3797424394626279849881322E-04
DATA -.9970759985107923450247946,5.9934320270831884264722444E-04
DATA -.9964459860317571225964113,6.6067529607738161575318920E-04
DATA -.9957546614667239851797758,7.2196674533702894531306739E-04
DATA -.9950020673471962444031388,7.8321377638390310244817342E-04
DATA -.9941882499768158116647105,8.4441261897085745246513294E-04
DATA -.9933132594276647813762767,9.0555950644549534547199634E-04
DATA -.9923771495366982433589461,9.6665067572141452408517998E-04
DATA -.9913799779021414417532216,1.0276823673654497630797823E-03
DATA -.9903218058797661642331360,1.0886508257457038100719739E-03
DATA -.9892026985790008762180358,1.1495522992128106211745720E-03
DATA -.9880227248588493179127030,1.2103830403000240185954168E-03
DATA -.9867819573236030434401229,1.2711393059342868032230354E-03
DATA -.9854804723183393394746898,1.3318173576538514742077422E-03
DATA -.9841183499241993752558070,1.3924134618298698080684263E-03
DATA -.9826956739534434545500623,1.4529238898903999088514186E-03
DATA -.9812125319442814682424151,1.5133449185458729415321843E-03
DATA -.9796690151554774136346128,1.5736728300154127016475733E-03
DATA -.9780652185607273384489774,1.6339039122536137611976595E-03
DATA -.9764012408428103908462605,1.6940344591775155933476319E-03
DATA -.9746771843875128746551103,1.7540607708935932918534161E-03
DATA -.9728931552773253596853138,1.8139791539246390831213050E-03
DATA -.9710492632849130040397740,1.8737859214364439296000032E-03
DATA -.9691456218663593235845560,1.9334773934642118869862805E-03
DATA -.9671823481541837026768633,1.9930498971386556619114334E-03
DATA -.9651595629501329860638605,2.0524997669117326296387785E-03
DATA -.9630773907177475286294707,2.1118233447819880761749695E-03
DATA -.9609359595747021101129220,2.1710169805194777030769764E-03
DATA -.9587354012849221479049303,2.2300770318902451834521819E-03
DATA -.9564758512504756638175957,2.2889998648803332549695712E-03
DATA -.9541574485032414812063787,2.3477818539193087973829979E-03
DATA -.9517803356963541476176046,2.4064193821032837844401297E-03
DATA -.9493446590954260956830096,2.4649088414174150722575315E-03
DATA -.9468505685695475715990344,2.5232466329578667921869215E-03
DATA -.9442982175820648764404846,2.5814291671532197289820420E-03
DATA -.9416877631811374809315652,2.6394528639853125366129890E-03
DATA -.9390193659900745892537874,2.6973141532095000115583202E-03
DATA -.9362931901974517420997422,2.7550094745743139337060721E-03
DATA -.9335094035470080635511228,2.8125352780405122176822307E-03
DATA -.9306681773273247705187315,2.8698880239995023068591947E-03
DATA -.9277696863612855774691976,2.9270641834911248990910487E-03
DATA -.9248141089953196430062722,2.9840602384207842252760188E-03
DATA -.9218016270884277185954871,3.0408726817759112150766292E-03
DATA -.9187324260009921733361549,3.0974980178417459829955126E-03
DATA -.9156066945833715822067555,3.1539327624164261558923710E-03
DATA -.9124246251642805786483078,3.2101734430253676425153532E-03
DATA -.9091864135389556857127581,3.2662165991349245186867942E-03
DATA -.9058922589571078532953371,3.3220587823653147699542163E-03
DATA -.9025423641106624421955255,3.3776965567027986979745151E-03
DATA -.8991369351212874089139762,3.4331264987110968585623238E-03
DATA -.8956761815277104581948603,3.4883451977420344589220515E-03
DATA -.8921603162728259433664469,3.5433492561453991996620077E-03
DATA -.8885895556905923075185429,3.5981352894779996042038747E-03
DATA -.8849641194927208714846091,3.6526999267119109345042264E-03
DATA -.8812842307551567874694922,3.7070398104418958478769910E-03
DATA -.8775501159043529899810783,3.7611515970919870053700346E-03
DATA -.8737620047033379884859100,3.8150319571212188977839493E-03
DATA -.8699201302375783589148594,3.8686775752284962111698272E-03
DATA -.8660247289006368037951485,3.9220851505565861096203416E-03
DATA -.8620760403796266633790730,3.9752513968952218694674985E-03
DATA -.8580743076404637726773631,4.0281730428833053556957251E-03
DATA -.8540197769129165717857668,4.0808468322101958885308878E-03
DATA -.8499126976754553893166989,4.1332695238160731058231723E-03
DATA -.8457533226399018311131247,4.1854378920913614850439286E-03
DATA -.8415419077358792187286900,4.2373487270752042474954035E-03
DATA -.8372787120950650344058650,4.2889988346529744267133843E-03
DATA -.8329639980352463414719476,4.3403850367528109430467473E-03
DATA -.8285980310441791612005141,4.3915041715411675870411756E-03
DATA -.8241810797632527992526874,4.4423530936173628755499398E-03
DATA -.8197134159709601268177470,4.4929286742071188064528328E-03
DATA -.8151953145661748335154631,4.5432278013550766004930588E-03
DATA -.8106270535512366810024356,4.5932473801162775820470507E-03
DATA -.8060089140148457980409629,4.6429843327465974146282383E-03
DATA -.8013411801147670695408899,4.6924355988921219715957326E-03
DATA -.7966241390603456837717921,4.7415981357774531878946569E-03
DATA -.7918580810948349135640607,4.7904689183929333046974074E-03
DATA -.7870432994775372188722786,4.8390449396807759855446397E-03
DATA -.7821800904657597695620265,4.8873232107200928500007496E-03
DATA -.7772687532965854987012501,4.9353007609108040389399652E-03
DATA -.7723095901684608079888676,4.9829746381564214943643207E-03
DATA -.7673029062226010582357195,5.0303419090456937061217566E-03
DATA -.7622490095242149890255755,5.0773996590331007480390167E-03
DATA -.7571482110435492228260470,5.1241449926181884968072417E-03
DATA -.7520008246367540198902183,5.1705750335237309984552282E-03
DATA -.7468071670265714612889527,5.2166869248727100194130774E-03
DATA -.7415675577828472483404577,5.2624778293641008920039892E-03
DATA -.7362823193028673175571692,5.3079449294474538377007114E-03
DATA -.7309517767915204810096465,5.3530854274962600256418876E-03
DATA -.7255762582412883127123272,5.3978965459800916987183857E-03
DATA -.7201560944120635122659979,5.4423755276355057750066148E-03
DATA -.7146916188107979875460589,5.4865196356357004084407400E-03
DATA -.7091831676709819087034412,5.5303261537589140693743281E-03
DATA -.7036310799319549961457379,5.5737923865555567830799909E-03
DATA -.6980356972180513154891026,5.6169156595140632422686060E-03
DATA -.6923973638175788627161007,5.6596933192254575883731863E-03
DATA -.6867164266616352329403680,5.7021227335466197356318722E-03
DATA -.6809932353027606762649893,5.7442012917622431919151687E-03
DATA -.6752281418934298542273508,5.7859264047454744107697479E-03
DATA -.6694215011643836202482341,5.8272955051172237902900934E-03
DATA -.6635736704028021573464804,5.8683060474041385161751495E-03
DATA -.6576850094303208161420752,5.9089555081952275286750641E-03
DATA -.6517558805808900058493764,5.9492413862971289760781243E-03
DATA -.6457866486784805005578351,5.9891612028880106009251001E-03
DATA -.6397776810146355326093649,6.0287125016700935892623685E-03
DATA -.6337293473258710543088905,6.0678928490207904979513170E-03
DATA -.6276420197709255585470036,6.1066998341424479603344647E-03
DATA -.6215160729078608581704682,6.1451310692106849564133301E-03
DATA -.6153518836710152331070009,6.1831841895213175201140730E-03
DATA -.6091498313478103633347320,6.2208568536358608431990998E-03
DATA -.6029102975554134747834702,6.2581467435255998229208227E-03
DATA -.5966336662172561341638003,6.2950515647142191886022727E-03
DATA -.5903203235394111375405864,6.3315690464189844309628949E-03
DATA -.5839706579868289461990941,6.3676969416904648471811825E-03
DATA -.5775850602594351319941408,6.4034330275507901043933791E-03
DATA -.5711639232680903029249140,6.4387751051304318145637988E-03
DATA -.5647076421104139881398226,6.4737209998035017044218583E-03
DATA -.5582166140464739699464555,6.5082685613215580554381159E-03
DATA -.5516912384743425586808994,6.5424156639459121806008761E-03
DATA -.5451319169055213144777974,6.5761602065784267970506106E-03
DATA -.5385390529402357280771185,6.6095001128907982464259091E-03
DATA -.5319130522426013808051484,6.6424333314523146080662055E-03
DATA -.5252543225156631117752170,6.6749578358560818439973984E-03
DATA -.5185632734763087281676594,6.7070716248437102088909494E-03
DATA -.5118403168300588021679862,6.7387727224284532529292952E-03
DATA -.5050858662457341057667365,6.7700591780167918407246379E-03
DATA -.4983003373300022421535401,6.8009290665284557051185368E-03
DATA -.4914841476018050398710538,6.8313804885148751508303160E-03
DATA -.4846377164666682832312103,6.8614115702760556195172418E-03
DATA -.4777614651908953597361706,6.8910204639758679248527525E-03
DATA -.4708558168756464123890576,6.9202053477557470637147884E-03
DATA -.4639211964309045918245310,6.9489644258467926074984745E-03
DATA -.4569580305493310101361121,6.9772959286802637759200314E-03
DATA -.4499667476800100051254408,7.0051981129964623944557826E-03
DATA -.4429477780020863304479467,7.0326692619519970357554193E-03
DATA -.4359015533982958937793024,7.0597076852254217449761731E-03
DATA -.4288285074283916716771105,7.0863117191212428489981040E-03
DATA -.4217290753024664362621394,7.1124797266722874498941965E-03
DATA -.4146036938541739351926808,7.1382100977404273038361762E-03
DATA -.4074528015138501726538528,7.1635012491156518878117343E-03
DATA -.4002768382815364452305435,7.1883516246134845581049307E-03
DATA -.3930762456999057925777893,7.2127596951707358064427126E-03
DATA -.3858514668270945287453553,7.2367239589395877220304415E-03
DATA -.3786029462094405258537453,7.2602429413800038703817938E-03
DATA -.3713311298541299275564774,7.2833151953504589028870525E-03
DATA -.3640364652017539753578509,7.3059393011969823144523193E-03
DATA -.3567194010987776363862590,7.3281138668405108702741736E-03
DATA -.3493803877699217266500321,7.3498375278625443268834112E-03
DATA -.3420198767904602291254888,7.3711089475890991769913129E-03
DATA -.3346383210584345112450044,7.3919268171729552523959906E-03
DATA -.3272361747667861514661529,7.4122898556741901242482968E-03
DATA -.3198138933754100896110293,7.4321968101389963453301042E-03
DATA -.3123719335831298205674013,7.4516464556767766846559753E-03
DATA -.3049107532995963557400760,7.4706375955355126106658549E-03
DATA -.2974308116171126813314970,7.4891690611754013855249070E-03
DATA -.2899325687823854471148313,7.5072397123407572395804471E-03
DATA -.2824164861682056238403682,7.5248484371301722018385363E-03
DATA -.2748830262450598717866731,7.5419941520649322694076350E-03
DATA -.2673326525526743672313363,7.5586758021556847062071669E-03
DATA -.2597658296714928377720767,7.5748923609673523688483221E-03
DATA -.2521830231940905614771423,7.5906428306822910654563041E-03
DATA -.2445846996965260887841458,7.6059262421616860613108628E-03
DATA -.2369713267096324498984454,7.6207416550051839535287106E-03
DATA -.2293433726902496141656847,7.6350881576087562455906106E-03
DATA -.2217013069923999715079185,7.6489648672207910613208914E-03
DATA -.2140455998384086095186518,7.6623709299964095469511727E-03
DATA -.2063767222899701632088853,7.6753055210500036191364789E-03
DATA -.1986951462191640176836869,7.6877678445059918262339545E-03
DATA -.1910013442794196472066982,7.6997571335477901997953341E-03
DATA -.1832957898764338771781292,7.7112726504649950830574263E-03
DATA -.1755789571390418585100171,7.7223136866987750332333719E-03
DATA -.1678513208900435467306408,7.7328795628854690046045805E-03
DATA -.1601133566169874808878088,7.7429696288983881297822398E-03
DATA -.1523655404429136599481171,7.7525832638878185270413483E-03
DATA -.1446083490970573169060391,7.7617198763192226723225395E-03
DATA -.1368422598855153932227026,7.7703789040096369853407298E-03
DATA -.1290677506618775185092873,7.7785598141622633902280246E-03
DATA -.1212852997978233025539997,7.7862621033992527222645108E-03
DATA -.1134953861536877488644070,7.7934852977926779635077296E-03
DATA -.1056984890489966008584237,7.8002289528936954015129025E-03
DATA -.0978950882329734336873092,7.8064926537598919168345279E-03
DATA -.0900856638550203064125526,7.8122760149808167166089168E-03
DATA -.0822706964351737908853691,7.8175786807016959432297203E-03
DATA -.0744506668345381951926272,7.8224003246453286989376515E-03
DATA -.0666260562256978009362603,7.8267406501321631390445391E-03
DATA -.0587973460631099349045127,7.8305993900985513984936792E-03
DATA -.0509650180534806968726444,7.8339763071131822285162928E-03
DATA -.0431295541261251663379026,7.8368711933916903322708496E-03
DATA -.0352914364033139119485902,7.8392838708094415005411850E-03
DATA -.0274511471706076282298676,7.8412141909124927608138163E-03
DATA -.0196091688471817249394630,7.8426620349267268653477464E-03
DATA -.0117659839561426950046856,7.8436273137651605561844209E-03
DATA -.0039220750948380874980108,7.8441099680334261574144661E-03
DATA  .0039220750948380874980108,7.8441099680334261574144661E-03
DATA  .0117659839561426950046856,7.8436273137651605561844209E-03
DATA  .0196091688471817249394630,7.8426620349267268653477464E-03
DATA  .0274511471706076282298676,7.8412141909124927608138163E-03
DATA  .0352914364033139119485902,7.8392838708094415005411850E-03
DATA  .0431295541261251663379026,7.8368711933916903322708496E-03
DATA  .0509650180534806968726444,7.8339763071131822285162928E-03
DATA  .0587973460631099349045127,7.8305993900985513984936792E-03
DATA  .0666260562256978009362603,7.8267406501321631390445391E-03
DATA  .0744506668345381951926272,7.8224003246453286989376515E-03
DATA  .0822706964351737908853691,7.8175786807016959432297203E-03
DATA  .0900856638550203064125526,7.8122760149808167166089168E-03
DATA  .0978950882329734336873092,7.8064926537598919168345279E-03
DATA  .1056984890489966008584237,7.8002289528936954015129025E-03
DATA  .1134953861536877488644070,7.7934852977926779635077296E-03
DATA  .1212852997978233025539997,7.7862621033992527222645108E-03
DATA  .1290677506618775185092873,7.7785598141622633902280246E-03
DATA  .1368422598855153932227026,7.7703789040096369853407298E-03
DATA  .1446083490970573169060391,7.7617198763192226723225395E-03
DATA  .1523655404429136599481171,7.7525832638878185270413483E-03
DATA  .1601133566169874808878088,7.7429696288983881297822398E-03
DATA  .1678513208900435467306408,7.7328795628854690046045805E-03
DATA  .1755789571390418585100171,7.7223136866987750332333719E-03
DATA  .1832957898764338771781292,7.7112726504649950830574263E-03
DATA  .1910013442794196472066982,7.6997571335477901997953341E-03
DATA  .1986951462191640176836869,7.6877678445059918262339545E-03
DATA  .2063767222899701632088853,7.6753055210500036191364789E-03
DATA  .2140455998384086095186518,7.6623709299964095469511727E-03
DATA  .2217013069923999715079185,7.6489648672207910613208914E-03
DATA  .2293433726902496141656847,7.6350881576087562455906106E-03
DATA  .2369713267096324498984454,7.6207416550051839535287106E-03
DATA  .2445846996965260887841458,7.6059262421616860613108628E-03
DATA  .2521830231940905614771423,7.5906428306822910654563041E-03
DATA  .2597658296714928377720767,7.5748923609673523688483221E-03
DATA  .2673326525526743672313363,7.5586758021556847062071669E-03
DATA  .2748830262450598717866731,7.5419941520649322694076350E-03
DATA  .2824164861682056238403682,7.5248484371301722018385363E-03
DATA  .2899325687823854471148313,7.5072397123407572395804471E-03
DATA  .2974308116171126813314970,7.4891690611754013855249070E-03
DATA  .3049107532995963557400760,7.4706375955355126106658549E-03
DATA  .3123719335831298205674013,7.4516464556767766846559753E-03
DATA  .3198138933754100896110293,7.4321968101389963453301042E-03
DATA  .3272361747667861514661529,7.4122898556741901242482968E-03
DATA  .3346383210584345112450044,7.3919268171729552523959906E-03
DATA  .3420198767904602291254888,7.3711089475890991769913129E-03
DATA  .3493803877699217266500321,7.3498375278625443268834112E-03
DATA  .3567194010987776363862590,7.3281138668405108702741736E-03
DATA  .3640364652017539753578509,7.3059393011969823144523193E-03
DATA  .3713311298541299275564774,7.2833151953504589028870525E-03
DATA  .3786029462094405258537453,7.2602429413800038703817938E-03
DATA  .3858514668270945287453553,7.2367239589395877220304415E-03
DATA  .3930762456999057925777893,7.2127596951707358064427126E-03
DATA  .4002768382815364452305435,7.1883516246134845581049307E-03
DATA  .4074528015138501726538528,7.1635012491156518878117343E-03
DATA  .4146036938541739351926808,7.1382100977404273038361762E-03
DATA  .4217290753024664362621394,7.1124797266722874498941965E-03
DATA  .4288285074283916716771105,7.0863117191212428489981040E-03
DATA  .4359015533982958937793024,7.0597076852254217449761731E-03
DATA  .4429477780020863304479467,7.0326692619519970357554193E-03
DATA  .4499667476800100051254408,7.0051981129964623944557826E-03
DATA  .4569580305493310101361121,6.9772959286802637759200314E-03
DATA  .4639211964309045918245310,6.9489644258467926074984745E-03
DATA  .4708558168756464123890576,6.9202053477557470637147884E-03
DATA  .4777614651908953597361706,6.8910204639758679248527525E-03
DATA  .4846377164666682832312103,6.8614115702760556195172418E-03
DATA  .4914841476018050398710538,6.8313804885148751508303160E-03
DATA  .4983003373300022421535401,6.8009290665284557051185368E-03
DATA  .5050858662457341057667365,6.7700591780167918407246379E-03
DATA  .5118403168300588021679862,6.7387727224284532529292952E-03
DATA  .5185632734763087281676594,6.7070716248437102088909494E-03
DATA  .5252543225156631117752170,6.6749578358560818439973984E-03
DATA  .5319130522426013808051484,6.6424333314523146080662055E-03
DATA  .5385390529402357280771185,6.6095001128907982464259091E-03
DATA  .5451319169055213144777974,6.5761602065784267970506106E-03
DATA  .5516912384743425586808994,6.5424156639459121806008761E-03
DATA  .5582166140464739699464555,6.5082685613215580554381159E-03
DATA  .5647076421104139881398226,6.4737209998035017044218583E-03
DATA  .5711639232680903029249140,6.4387751051304318145637988E-03
DATA  .5775850602594351319941408,6.4034330275507901043933791E-03
DATA  .5839706579868289461990941,6.3676969416904648471811825E-03
DATA  .5903203235394111375405864,6.3315690464189844309628949E-03
DATA  .5966336662172561341638003,6.2950515647142191886022727E-03
DATA  .6029102975554134747834702,6.2581467435255998229208227E-03
DATA  .6091498313478103633347320,6.2208568536358608431990998E-03
DATA  .6153518836710152331070009,6.1831841895213175201140730E-03
DATA  .6215160729078608581704682,6.1451310692106849564133301E-03
DATA  .6276420197709255585470036,6.1066998341424479603344647E-03
DATA  .6337293473258710543088905,6.0678928490207904979513170E-03
DATA  .6397776810146355326093649,6.0287125016700935892623685E-03
DATA  .6457866486784805005578351,5.9891612028880106009251001E-03
DATA  .6517558805808900058493764,5.9492413862971289760781243E-03
DATA  .6576850094303208161420752,5.9089555081952275286750641E-03
DATA  .6635736704028021573464804,5.8683060474041385161751495E-03
DATA  .6694215011643836202482341,5.8272955051172237902900934E-03
DATA  .6752281418934298542273508,5.7859264047454744107697479E-03
DATA  .6809932353027606762649893,5.7442012917622431919151687E-03
DATA  .6867164266616352329403680,5.7021227335466197356318722E-03
DATA  .6923973638175788627161007,5.6596933192254575883731863E-03
DATA  .6980356972180513154891026,5.6169156595140632422686060E-03
DATA  .7036310799319549961457379,5.5737923865555567830799909E-03
DATA  .7091831676709819087034412,5.5303261537589140693743281E-03
DATA  .7146916188107979875460589,5.4865196356357004084407400E-03
DATA  .7201560944120635122659979,5.4423755276355057750066148E-03
DATA  .7255762582412883127123272,5.3978965459800916987183857E-03
DATA  .7309517767915204810096465,5.3530854274962600256418876E-03
DATA  .7362823193028673175571692,5.3079449294474538377007114E-03
DATA  .7415675577828472483404577,5.2624778293641008920039892E-03
DATA  .7468071670265714612889527,5.2166869248727100194130774E-03
DATA  .7520008246367540198902183,5.1705750335237309984552282E-03
DATA  .7571482110435492228260470,5.1241449926181884968072417E-03
DATA  .7622490095242149890255755,5.0773996590331007480390167E-03
DATA  .7673029062226010582357195,5.0303419090456937061217566E-03
DATA  .7723095901684608079888676,4.9829746381564214943643207E-03
DATA  .7772687532965854987012501,4.9353007609108040389399652E-03
DATA  .7821800904657597695620265,4.8873232107200928500007496E-03
DATA  .7870432994775372188722786,4.8390449396807759855446397E-03
DATA  .7918580810948349135640607,4.7904689183929333046974074E-03
DATA  .7966241390603456837717921,4.7415981357774531878946569E-03
DATA  .8013411801147670695408899,4.6924355988921219715957326E-03
DATA  .8060089140148457980409629,4.6429843327465974146282383E-03
DATA  .8106270535512366810024356,4.5932473801162775820470507E-03
DATA  .8151953145661748335154631,4.5432278013550766004930588E-03
DATA  .8197134159709601268177470,4.4929286742071188064528328E-03
DATA  .8241810797632527992526874,4.4423530936173628755499398E-03
DATA  .8285980310441791612005141,4.3915041715411675870411756E-03
DATA  .8329639980352463414719476,4.3403850367528109430467473E-03
DATA  .8372787120950650344058650,4.2889988346529744267133843E-03
DATA  .8415419077358792187286900,4.2373487270752042474954035E-03
DATA  .8457533226399018311131247,4.1854378920913614850439286E-03
DATA  .8499126976754553893166989,4.1332695238160731058231723E-03
DATA  .8540197769129165717857668,4.0808468322101958885308878E-03
DATA  .8580743076404637726773631,4.0281730428833053556957251E-03
DATA  .8620760403796266633790730,3.9752513968952218694674985E-03
DATA  .8660247289006368037951485,3.9220851505565861096203416E-03
DATA  .8699201302375783589148594,3.8686775752284962111698272E-03
DATA  .8737620047033379884859100,3.8150319571212188977839493E-03
DATA  .8775501159043529899810783,3.7611515970919870053700346E-03
DATA  .8812842307551567874694922,3.7070398104418958478769910E-03
DATA  .8849641194927208714846091,3.6526999267119109345042264E-03
DATA  .8885895556905923075185429,3.5981352894779996042038747E-03
DATA  .8921603162728259433664469,3.5433492561453991996620077E-03
DATA  .8956761815277104581948603,3.4883451977420344589220515E-03
DATA  .8991369351212874089139762,3.4331264987110968585623238E-03
DATA  .9025423641106624421955255,3.3776965567027986979745151E-03
DATA  .9058922589571078532953371,3.3220587823653147699542163E-03
DATA  .9091864135389556857127581,3.2662165991349245186867942E-03
DATA  .9124246251642805786483078,3.2101734430253676425153532E-03
DATA  .9156066945833715822067555,3.1539327624164261558923710E-03
DATA  .9187324260009921733361549,3.0974980178417459829955126E-03
DATA  .9218016270884277185954871,3.0408726817759112150766292E-03
DATA  .9248141089953196430062722,2.9840602384207842252760188E-03
DATA  .9277696863612855774691976,2.9270641834911248990910487E-03
DATA  .9306681773273247705187315,2.8698880239995023068591947E-03
DATA  .9335094035470080635511228,2.8125352780405122176822307E-03
DATA  .9362931901974517420997422,2.7550094745743139337060721E-03
DATA  .9390193659900745892537874,2.6973141532095000115583202E-03
DATA  .9416877631811374809315652,2.6394528639853125366129890E-03
DATA  .9442982175820648764404846,2.5814291671532197289820420E-03
DATA  .9468505685695475715990344,2.5232466329578667921869215E-03
DATA  .9493446590954260956830096,2.4649088414174150722575315E-03
DATA  .9517803356963541476176046,2.4064193821032837844401297E-03
DATA  .9541574485032414812063787,2.3477818539193087973829979E-03
DATA  .9564758512504756638175957,2.2889998648803332549695712E-03
DATA  .9587354012849221479049303,2.2300770318902451834521819E-03
DATA  .9609359595747021101129220,2.1710169805194777030769764E-03
DATA  .9630773907177475286294707,2.1118233447819880761749695E-03
DATA  .9651595629501329860638605,2.0524997669117326296387785E-03
DATA  .9671823481541837026768633,1.9930498971386556619114334E-03
DATA  .9691456218663593235845560,1.9334773934642118869862805E-03
DATA  .9710492632849130040397740,1.8737859214364439296000032E-03
DATA  .9728931552773253596853138,1.8139791539246390831213050E-03
DATA  .9746771843875128746551103,1.7540607708935932918534161E-03
DATA  .9764012408428103908462605,1.6940344591775155933476319E-03
DATA  .9780652185607273384489774,1.6339039122536137611976595E-03
DATA  .9796690151554774136346128,1.5736728300154127016475733E-03
DATA  .9812125319442814682424151,1.5133449185458729415321843E-03
DATA  .9826956739534434545500623,1.4529238898903999088514186E-03
DATA  .9841183499241993752558070,1.3924134618298698080684263E-03
DATA  .9854804723183393394746898,1.3318173576538514742077422E-03
DATA  .9867819573236030434401229,1.2711393059342868032230354E-03
DATA  .9880227248588493179127030,1.2103830403000240185954168E-03
DATA  .9892026985790008762180358,1.1495522992128106211745720E-03
DATA  .9903218058797661642331360,1.0886508257457038100719739E-03
DATA  .9913799779021414417532216,1.0276823673654497630797823E-03
DATA  .9923771495366982433589461,9.6665067572141452408517998E-04
DATA  .9933132594276647813762767,9.0555950644549534547199634E-04
DATA  .9941882499768158116647105,8.4441261897085745246513294E-04
DATA  .9950020673471962444031388,7.8321377638390310244817342E-04
DATA  .9957546614667239851797758,7.2196674533702894531306739E-04
DATA  .9964459860317571225964113,6.6067529607738161575318920E-04
DATA  .9970759985107923450247946,5.9934320270831884264722444E-04
DATA  .9976446601486403940368916,5.3797424394626279849881322E-04
DATA  .9981519359718441275385541,4.7657220501003854013133061E-04
DATA  .9985977947971757433952425,4.1514088233419025171823795E-04
DATA  .9989822092480797992371162,3.5368409613102448239639817E-04
DATA  .9993051557937030335325083,2.9220572803523217847223343E-04
DATA  .9995666148626408000179844,2.3070985544248655269465132E-04
DATA  .9997665712667108498622001,1.6920137336541413264932958E-04
DATA  .9999050164693312795671775,1.0769038102183646230364914E-04
DATA  .9999819727039624507107997,4.6263724177190118157440220E-05
END FUNCTION

EXTERNAL  FUNCTION F(R,X,T)
LET F=EXP(X*COS(T))*COS(R*T)
END FUNCTION

EXTERNAL  FUNCTION INTEGRAL2(R,Z) !'ガウス・ラゲール
FOR I=1 TO 6
   READ X,W
   LET S=S+FF(R,Z,X)*EXP(X)*W
NEXT I
LET INTEGRAL2=S
DATA     .2228466041792606894643548,4.5896467394996359356828488E-01
DATA    1.1889321016726230307431509,4.1700083077212099411337757E-01
DATA    2.9927363260593140776913253,1.1337338207404497573870619E-01
DATA    5.7751435691045105018398304,1.0399197453149074898913303E-02
DATA    9.8374674183825899177155470,2.6101720281493205947924286E-04
DATA   15.9828739806017017825457916,8.9854790642962123882529205E-07
END FUNCTION

EXTERNAL  FUNCTION FF(R,X,T)
LET FF=EXP(-X*COSH(T)-R*T)
END FUNCTION

EXTERNAL  FUNCTION BESSELI(R,X) !'Rは実数
LET S=INTEGRAL(ABS(R),X)-SIN(ABS(R)*PI)/PI*INTEGRAL2(ABS(R),X)
IF R<0 THEN LET S=S*(-1)^INT(ABS(R))
LET BESSELI=S
END FUNCTION
 

BESSEL_K関数

 投稿者:しばっち  投稿日:2015年 8月 1日(土)21時58分13秒
  CALL GINIT(400,800)
SET WINDOW 0,10,-.1,.9
DRAW GRID(1,10)
FOR N=0 TO 5
   SET LINE COLOR N+1
   FOR X=0 TO 10 STEP 1/16
      LET Y=BESSELK(N,X)
      PLOT LINES:X,Y;
   NEXT  X
   PLOT LINES
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION INTEGRAL(R,Z) !'ガウス・ラゲール
FOR I=1 TO 6
   READ X,W
   LET S=S+FF(R,Z,X)*EXP(X)*W
NEXT I
LET INTEGRAL=S
DATA     .2228466041792606894643548,4.5896467394996359356828488E-01
DATA    1.1889321016726230307431509,4.1700083077212099411337757E-01
DATA    2.9927363260593140776913253,1.1337338207404497573870619E-01
DATA    5.7751435691045105018398304,1.0399197453149074898913303E-02
DATA    9.8374674183825899177155470,2.6101720281493205947924286E-04
DATA   15.9828739806017017825457916,8.9854790642962123882529205E-07
END FUNCTION

EXTERNAL  FUNCTION FF(R,X,T)
LET FF=EXP(-X*COSH(T))*COSH(R*T)
END FUNCTION

EXTERNAL  FUNCTION BESSELK(R,X) !'Rは実数
LET S=INTEGRAL(ABS(R),X)
IF R<0 THEN LET S=S*(-1)^INT(ABS(R))
LET BESSELK=S
END FUNCTION
 

BESSEL_Jn(x) 零点を求める

 投稿者:しばっち  投稿日:2015年 8月 2日(日)00時25分19秒
  LET ST=.1
FOR N=0 TO 5
   PRINT "BESSEL_J";STR$(N);"(x) 零点"
   FOR X=0 TO 30 STEP ST
      IF BESSELJ(N,X)*BESSELJ(N,X+ST)<0 THEN  !'2分法
         LET A=X
         LET B=X+ST
         DO
            LET C=(A+B)/2
            IF BESSELJ(N,A)*BESSELJ(N,C)>0 THEN LET A=C ELSE LET B=C
         LOOP UNTIL ABS(A-B)<1E-13
         PRINT "零点";C
      END IF
   NEXT X
   PRINT
NEXT N
END

EXTERNAL  FUNCTION BESSELJ(N,X)
LET M=(X/2)^INT(ABS(N))
LET SIGN=1
FOR K=0 TO 1000
   IF K=0 THEN
      IF ABS(N)>0 THEN LET M=M/INT(ABS(N))
   ELSE
      LET M=M/K/(INT(ABS(N))+K)
   END IF
   IF K>0 THEN LET M=M*X*X/4
   LET SS=SS+SIGN*M
   IF ABS(M)<1E-15 THEN EXIT FOR
   LET SIGN=-SIGN
NEXT K
IF N<0 THEN LET SS=SS*(-1)^INT(ABS(N))
LET BESSELJ=SS
END FUNCTION
 

オイラー定数

 投稿者:しばっち  投稿日:2015年 8月 7日(金)21時05分10秒
  オイラー定数を求める(γ=0.57721566...)
http://numbers.computation.free.fr/Constants/Gamma/gamma.pdf

OPTION ARITHMETIC NATIVE
LET S=0
LET N=1E+8
FOR I=1 TO N
   LET S=S+1/I
NEXT I
PRINT S-LOG(N) !'およそ8桁
PRINT " .5772156649015328606065120"
END
---------------------------------------------------------------------------------------------
OPTION ARITHMETIC DECIMAL_HIGH
LET BETA=4.31913656629145
LET N=800
LET V=1
FOR K=1 TO INT(BETA*N)
   LET V=V*N/K
   LET S=S+(-1)^(K-1)*V/K
NEXT K
LET S=S-LLOG(N)
LET A=1
LET SS=1
FOR K=1 TO N-2
   LET A=-A*K/N
   LET SS=SS+A
NEXT K
LET S=S-LEXP(-N)/N*SS
LET SS=.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937450857057400299213547861466940296043254215190587755352673313992540129674205137541395491116851028079842348775872050384310939973613725530608893312676001724795378367592713515772261027349291394079843010341777177808815495706610750101619166334015227893586796549725203621287922655595366962817638879272680132431010476505963703947394957638906572967929601009015125195950922243501409349871228247949747195646976318506676129063811051824197444867836380861749455169892792301877391072945781554316005002182844096053772434203285478367015177394398700302370339518328690001558193988042707411542227819716523011073565833967348717650491941812300040654693142999297779569303100503086303418569803231083691640025892970890985486825777364288253954925873629596133298574739302
PRINT S !'およそ660桁
PRINT SS
PRINT USING "-%.##########^^^^^^":S-SS

!'LET A=4
!'LET B=5
!'DO
!'   LET C=(A+B)/2
!'   IF F(C)<0 THEN LET A=C ELSE LET B=C
!'LOOP UNTIL ABS(A-B)<1E-15
!'PRINT C
END

!'EXTERNAL  FUNCTION F(X)
!'LET F=X*(LOG(X)-1)-2
!'END FUNCTION

EXTERNAL FUNCTION LLOG(X)
OPTION ARITHMETIC DECIMAL_HIGH
IF X<=0 THEN
   CAUSE EXCEPTION 3004
ELSEIF X<1 THEN
   LET LLOG=-LLOG(1/X)
ELSEIF X>3 THEN
   LET LLOG=2*LLOG(SQR(X))
ELSE ! 1<=x<=3
   LET H=(X-1)/(X+1)   ! 0<=h<=0.5
   LET T=0
   LET N=1
   LET K=H
   LET H2=H^2
   DO
      LET T=T+K/N
      LET N=N+2
      LET K=K*H2
   LOOP UNTIL K<=1E-1000
   LET LLOG=2*T
END IF
END FUNCTION

EXTERNAL  FUNCTION LEXP(X)
OPTION ARITHMETIC DECIMAL_HIGH
LET A=1
LET S=1
DO
   LET I=I+1
   LET A=A*X/I
   LET S=S+A
LOOP UNTIL ABS(A)<1E-1000
LET LEXP=S
END FUNCTION
---------------------------------------------------------------------------------------------
OPTION ARITHMETIC DECIMAL_HIGH
LET N=5000
LET S=0
FOR I=1 TO N
   LET S=S+1/I
NEXT I
LET S=S-1/2/N-LLOG(N)
LET A=1
FOR K=1 TO 210
   LET A=A/N/N
   LET S=S+BERNOULLI(2*K)/2/K*A
NEXT K
LET SS=.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937450857057400299213547861466940296043254215190587755352673313992540129674205137541395491116851028079842348775872050384310939973613725530608893312676001724795378367592713515772261027349291394079843010341777177808815495706610750101619166334015227893586796549725203621287922655595366962817638879272680132431010476505963703947394957638906572967929601009015125195950922243501409349871228247949747195646976318506676129063811051824197444867836380861749455169892792301877391072945781554316005002182844096053772434203285478367015177394398700302370339518328690001558193988042707411542227819716523011073565833967348717650491941812300040654693142999297779569303100503086303418569803231083691640025892970890985486825777364288253954925873629596133298574739302
PRINT S !'およそ690桁
PRINT SS
PRINT USING "-%.##########^^^^^^":S-SS
END

EXTERNAL FUNCTION LLOG(X)
OPTION ARITHMETIC DECIMAL_HIGH
IF X<=0 THEN
   CAUSE EXCEPTION 3004
ELSEIF X<1 THEN
   LET LLOG=-LLOG(1/X)
ELSEIF X>3 THEN
   LET LLOG=2*LLOG(SQR(X))
ELSE ! 1<=x<=3
   LET H=(X-1)/(X+1)   ! 0<=h<=0.5
   LET T=0
   LET N=1
   LET K=H
   LET H2=H^2
   DO
      LET T=T+K/N
      LET N=N+2
      LET K=K*H2
   LOOP UNTIL K<=1E-1000
   LET LLOG=2*T
END IF
END FUNCTION

EXTERNAL FUNCTION BERNOULLI(K) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
LET C=1
LET D=1
LET N=K/2
IF K=1 THEN
   LET BERNOULLI=-1/2
ELSEIF MOD(K,2)=1 THEN
   LET BERNOULLI=0
ELSE
   FOR M=N TO 1 STEP-1
      LET T=T+(-1)^M*D*M^(K-1)
      LET C=C*(N+M+1)/(N-M+1)
      LET D=D+C
   NEXT M
   LET BERNOULLI=-T*K/(2^K*(2^K-1))
END IF
END FUNCTION
---------------------------------------------------------------------------------------------
OPTION ARITHMETIC DECIMAL_HIGH
LET N=1150
LET BETA=4.97062575954423
LET A=1
LET H=1
FOR K=0 TO INT(BETA*N)
   IF K>0 THEN
      LET A=A*N*N/K/K
      IF K>1 THEN LET H=H+1/K
   END IF
   LET AA=AA+A*H
   LET BB=BB+A
NEXT K
LET C=1
LET CC=1
FOR K=1 TO 2*N
   LET C=C*(2*K)*(2*K)*(2*K)/K/K/K/K/16/N/16/N
   LET CC=CC+C
NEXT K
LET CC=CC/4/N
LET S=AA/BB-CC/BB/BB-LLOG(N)
LET SS=.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937450857057400299213547861466940296043254215190587755352673313992540129674205137541395491116851028079842348775872050384310939973613725530608893312676001724795378367592713515772261027349291394079843010341777177808815495706610750101619166334015227893586796549725203621287922655595366962817638879272680132431010476505963703947394957638906572967929601009015125195950922243501409349871228247949747195646976318506676129063811051824197444867836380861749455169892792301877391072945781554316005002182844096053772434203285478367015177394398700302370339518328690001558193988042707411542227819716523011073565833967348717650491941812300040654693142999297779569303100503086303418569803231083691640025892970890985486825777364288253954925873629596133298574739302
PRINT S !'およそ1000桁
PRINT SS
PRINT USING "-%.##########^^^^^^":S-SS

!'LET A=4
!'LET B=5
!'DO
!'   LET C=(A+B)/2
!'   IF F(C)<0 THEN LET A=C ELSE LET B=C
!'LOOP UNTIL ABS(A-B)<1E-15
!'PRINT C
END

!'EXTERNAL  FUNCTION F(X)
!'LET F=X*(LOG(X)-1)-3
!'END FUNCTION

EXTERNAL FUNCTION LLOG(X)
OPTION ARITHMETIC DECIMAL_HIGH
IF X<=0 THEN
   CAUSE EXCEPTION 3004
ELSEIF X<1 THEN
   LET LLOG=-LLOG(1/X)
ELSEIF X>3 THEN
   LET LLOG=2*LLOG(SQR(X))
ELSE ! 1<=x<=3
   LET H=(X-1)/(X+1)   ! 0<=h<=0.5
   LET T=0
   LET N=1
   LET K=H
   LET H2=H^2
   DO
      LET T=T+K/N
      LET N=N+2
      LET K=K*H2
   LOOP UNTIL K<=1E-1000
   LET LLOG=2*T
END IF
END FUNCTION
 

対称式

 投稿者:山中和義  投稿日:2015年 8月 9日(日)19時12分45秒
  問題
a+b+c=4、a^2+b^2+c^2=4、a^3+b^3+c^3=4のとき、a,b,cを求めよ。


答え 恒等式(展開、因数分解)
(a+b+c)^2=(a^2+b^2+c^2)+2(ab+bc+ca)より、4^2=4+2(ab+bc+ca) ∴ab+bc+ca=6
(a^3+b^3+c^3)-3abc=(a+b+c)((a^2+b^2+c^2)-(ab+bc+ca))より、4-3abc=4×(4-6) ∴abc=4
したがって、a,b,cはx^3-4x^2+6x-4=0の3つの解である。これを解いて、2, 1±i
(終り)


答え
(a+b+c)^2=(a^2+b^2+c^2)+2(ab+bc+ca)より、4^2=4+2(ab+bc+ca) ∴ab+bc+ca=6

a,b,cを3つの解とする3次方程式は、x^3-(a+b+c)x^2+(ab+bc+ca)x-abc=0となる。
a^3-(a+b+c)a^2+(ab+bc+ca)a-abc=0
b^3-(a+b+c)b^2+(ab+bc+ca)b-abc=0
c^3-(a+b+c)c^2+(ab+bc+ca)c-abc=0
なので、辺々の和をとって、
(a^3+b^3+c^3)-(a+b+c)(a^2+b^2+c^2)+(ab+bc+ca)(a^1+b^1+c^1)-abc(a^0+b^0+c^0)=0
これより、4-4×4+6×4-3abc=0 ∴abc=4

したがって、x^3-4x^2+6x-4=0の3つの解である。これを解いて、2, 1±i
(終り)

(a^3+b^3+c^3)-3abc=(a+b+c)((a^2+b^2+c^2)-(ab+bc+ca))を変形すると、
(a^3+b^3+c^3)-(a+b+c)(a^2+b^2+c^2)+(ab+bc+ca)(a^1+b^1+c^1)-abc(a^0+b^0+c^0)=0


答え 恒等式(ニュートンの多項式)
(a^2+b^2+c^2)-(a+b+c)(a^1+b^1+c^1)=-2(ab+bc+ca)より、4-4^2=-2(ab+bc+ca) ∴ab+bc+ca=6
(a^3+b^3+c^3)-(a+b+c)(a^2+b^2+c^2)+(ab+bc+ca)(a^1+b^1+c^1)=3abcより、4-4×4+6×4=3abc ∴abc=4
したがって、a,b,cはx^3-4x^2+6x-4=0の3つの解である。これを解いて、2, 1±i
(終り)



OPTION ARITHMETIC RATIONAL
DATA 3
DATA 4,4,4 !a+b+c, a^2+b^2+c^2, a^3+b^3+c^3
READ N
DIM A(N)
MAT READ A
DIM B(N) !基本対称式 a+b+c, ab+bc+ca, abc
FOR K=1 TO N
   LET S=A(K)
   FOR J=1 TO K-1
      LET S=S+(-1)^J*A(K-J)*B(J)
   NEXT J
   PRINT K;S
   LET B(K)=(-1)^(K-1)*S/K
NEXT K
MAT PRINT B;
END



類題
a+b+c+d=5、a^2+b^2+c^2+d^2=5、a^3+b^3+c^3+d^3=5、a^4+b^4+c^4+d^4=5のとき、a,b,c,dを求めよ。



発展問題
nは正の整数とする。
1≦k≦nを満たす任意の整数kに対して、Σ[m=1,n]a[m]^k=n+1となるa[m]を求めよ。
考察
a[m]=1-b[m]とすると、
n+1=Σa[m]=Σ(1-b[m])=n-Σb[m] ∴Σb[m]=-1
n+1=Σa[m]^2=Σ(1-b[m])^2=Σ(1-2b[m]+b[m]^2)=n-2Σb[m]+Σb[m]^2=n+2+Σb[m]^2 ∴Σb[m]^2=-1
n+1=Σa[m]^3=Σ(1-b[m])^3=Σ(1-3b[m]+3b[m]^2-b[m]^3) ∴Σb[m]^3=-1
同様に、Σb[m]^k=-1
いま、
Σ[m=0,n]EXP(2πi{m/(n+1)})^k=0(iは虚数単位とする)より、
1+Σ[m=1,n]EXP(2πi{m/(n+1)})^k=0 ∴Σ[m=1,n]EXP(2πi{m/(n+1)})^k=-1
なので、b[m]=EXP(2πi{m/(n+1)})とおけばよい。
(終り)


OPTION ARITHMETIC COMPLEX

LET N=4
DIM A(N)
FOR M=1 TO N !a[m]
   LET A(M)=1-EXP(2*PI*COMPLEX(0,1)*M/(N+1))
NEXT M
MAT PRINT A;
FOR K=1 TO N !k乗
   LET S=0 !和
   FOR M=1 TO N
      LET S=S+A(M)^K
   NEXT M
   PRINT K;S
NEXT K


DIM C(0 TO N) !C[0]t^n+C[1]t^(n-1)+C[2]t^(n-2)+ … +C[n-1]t+C[n]=0の係数
MAT C=ZER
FOR J=0 TO 2^N-1 !2進法n桁
   LET T=J
   LET P=0 !項の次数(1の個数)
   LET S=1
   FOR M=1 TO N !解と係数の関係より
      IF MOD(T,2)=1 THEN
         LET S=S*A(M)
         LET P=P+1
      END IF
      LET T=INT(T/2)
   NEXT M
   LET C(P)=C(P)+S*(-1)^P
NEXT J
MAT PRINT C;


FOR J=0 TO N !二項係数
   PRINT COMB(N+1,J)*(-1)^J;
NEXT J
PRINT

END


 

Re: 対称式

 投稿者:山中和義  投稿日:2015年 8月12日(水)19時37分19秒
  > No.3802[元記事へ]

問題 n次方程式のn個の解のk乗の和
4次方程式 x^4+4x^3+x^2+x+1=0 の4つの解の10乗の和を求めよ。

答え
t[k]=a^k+b^k+c^k+d^kとおくと、
k=1,2,3,4のとき、恒等式(ニュートンの多項式)より、
(a^1+b^1+c^1+d^1)=1(a+b+c+d)
(a^2+b^2+c^2+d^2)-(a+b+c+d)(a^1+b^1+c^1+d^1)=-2(ab+ac+ad+bc+bd+cd)
(a^3+b^3+c^3+d^3)-(a+b+c+d)(a^2+b^2+c^2+d^2)+(ab+ac+ad+bc+bd+cd)(a^1+b^1+c^1+d^1)=3(abc+abd+acd+bcd)
(a^4+b^4+c^4+d^4)-(a+b+c+d)(a^3+b^3+c^3+d^3)+(ab+ac+ad+bc+bd+cd)(a^2+b^2+c^2+d^2)-(abc+abd+acd+bcd)(a+b+c+d)=-4abcd
k≧5とき、
 漸化式 t[k]=(a+b+c+d)t[k-1]-(ab+ac+ad+bc+bd+cd)t[k-2]+(abc+abd+acd+bcd)t[k-3]-(abcd)t[k-4]
が成り立つ。
(終り)


OPTION ARITHMETIC RATIONAL !有理数

DATA 4 !x^4+4x^3+x^2+x+1
DATA 4,1,1,1

LET M=10 !m乗

READ N
DIM C(N) !係数 ※基本対称式 -(a+b+c+d), ab+ac+ad+bc+bd+cd, -(abc+abd+acd+bcd), abcd
MAT READ C
DIM T(M)
FOR K=1 TO N !a+b+c+d, a^2+b^2+c^2+d^2, a^3+b^3+c^3+d^3, a^4+b^4+c^4+d^4
   LET W=0 !ニュートンの多項式
   FOR J=1 TO K-1
      LET W=W-C(J)*T(K-J)
   NEXT J
   LET T(K)=W-K*C(K)
NEXT K
FOR K=N+1 TO M !a^5+b^5+c^5+d^5, a^6+b^6+c^6+d^6, a^7+b^7+c^7+d^7, …
   LET W=0 !漸化式
   FOR J=1 TO N
      LET W=W-C(J)*T(K-J)
   NEXT J
   LET T(K)=W
NEXT K
MAT PRINT T;

END


 

Re: 対称式

 投稿者:GAI  投稿日:2015年 8月13日(木)09時42分12秒
  > No.3803[元記事へ]

山中和義さんへのお返事です。

> 問題 n次方程式のn個の解のk乗の和
> 4次方程式 x^4+4x+x^2+x+1=0 の4つの解の10乗の和を求めよ。
>
> 答え
> t[k]=a^k+b^k+c^k+d^kとおくと、
> k=1,2,3,4のとき、恒等式(ニュートンの多項式)より、

> (a^4+b^4+c^4+d^4)-(a+b+c+d)(a^3+b^3+c^3+d^3)+(ab+ac+ad+bc+bd+cd)(a^2+b^2+c^2+d^2)(abc+abd+acd+bcd)(a+b+c+d)=-4abcd

ここは
(a^4+b^4+c^4+d^4)-(a+b+c+d)(a^3+b^3+c^3+d^3)+(ab+ac+ad+bc+bd+cd)(a^2+b^2+c^2+d^2)-(abc+abd+acd+bcd)(a+b+c+d)=-4abcd
ですよね。


 

Re: 対称式

 投稿者:山中和義  投稿日:2015年 8月13日(木)12時53分20秒
  > No.3804[元記事へ]

GAIさんへのお返事です。

> ここは
> (a^4+b^4+c^4+d^4)-(a+b+c+d)(a^3+b^3+c^3+d^3)+(ab+ac+ad+bc+bd+cd)(a^2+b^2+c^2+d^2)-(abc+abd+acd+bcd)(a+b+c+d)=-4abcd
> ですよね。

修正しておきます。


別解 微分と除算による
http://izumi-math.jp/I_Tokioka/91_tokioka.pdf
も興味深いです。

例
a+b=X, ab=Yのとき、a,bは、2次方程式 t^2-Xt+Y=0 の解である。
左辺をf(t)とおくと、f'(t)=2t-X となる。ここで、tf'(t)÷f(t)の商を考える。

            2 +X/t +(X^2-2Y)/t^2 +(X^3-3XY)/t^3  …
         --------------------------------------------
 t^2-Xt+Y ) 2t^2 -Xt
            2t^2-2Xt+2Y
          ---------------
                  Xt-2Y
                  Xt-X^2           +XY/t
                --------------------------
                    (X^2-2Y)       -XY/t
                    (X^2-2Y)-(X^2-2Y)X/t       +(X^2-2Y)Y/t^2
                  ---------------------------------------------
                             (X^3-3XY)/t       -(X^2-2Y)Y/t^2
                             (X^3-3XY)/t      -(X^3-3XY)X/t^2   +(X^3-3XY)Y/t^3
                           ------------------------------------------------------
                                         (X^4-4X^2Y+2Y^2)/t^2   -(X^3-3XY)Y/t^3
                                                :



別解 代入による
t^2-Xt+Y=0の2つの解は、解の公式より、t=(X±√(X^2-4Y))/2
これを代入して、
a+b=(X±√(X^2-4Y))/2+(X干√(X^2-4Y))/2=X
a^2+b^2={(X±√(X^2-4Y))/2}^2+{(X干√(X^2-4Y))/2}^2=X^2-2Y
a^3+b^3={(X±√(X^2-4Y))/2}^3+{(X干√(X^2-4Y))/2}^3=X^3-3XY
  :

二項定理で展開する。

 

Re: 対称式

 投稿者:山中和義  投稿日:2015年 8月14日(金)12時33分55秒
  > No.3805[元記事へ]

問題
a+b+c=-2、a^2+b^2+c^2=-2、a^3+b^3+c^3=-2のとき、a^4+b^4+c^4、a^5+b^5+c^5、a^6+b^6+c^6、…を求めよ。

解法の流れ
a+b+c, a^2+b^2+c^2, a^3+b^3+c^3
  ↓ ニュートンの多項式
a+b+c, ab+bc+ca, abc(基本対称式)
  ↓ 解と係数の関係
a,b,c,は、3次方程式 t^3-(a+b+c)t^2+(ab+bc+ca)t-abc=0 の解
  ↓ 漸化式
a^k+b^k+c^k

類題
a=-2のとき、a^2、a^3、a^4、…を求めよ。
a+b=-2、a^2+b^2=-2のとき、a^3+b^3、a^4+b^4、a^5+b^5、…を求めよ。

a+b+c+d=-2、a^2+b^2+c^2+d^2=-2、a^3+b^3+c^3+d^3=-2、a^4+b^4+c^4+d^4=-2のとき、a^5+b^5+c^5+d^5、a^6+b^6+c^6+d^6、a^7+b^7+c^7+d^7、…を求めよ。
   :


OPTION ARITHMETIC RATIONAL !有理数

DATA 3
DATA -2,-2,-2 !a+b+c, a^2+b^2+c^2, a^3+b^3+c^3

READ N
DIM A(N)
MAT READ A
DIM B(N) !基本対称式 a+b+c, ab+bc+ca, abc
FOR K=1 TO N
   LET S=A(K)
   FOR J=1 TO K-1
      LET S=S+(-1)^J*A(K-J)*B(J)
   NEXT J
   PRINT K;S
   LET B(K)=(-1)^(K-1)*S/K
NEXT K
MAT PRINT B;


LET M=10 !m乗
DIM T(M)
FOR K=1 TO N !a+b+c, a^2+b^2+c^2, a^3+b^3+c^3
   LET T(K)=A(K) !copy it
NEXT K
FOR K=N+1 TO M !a^4+b^4+c^4, a^5+b^5+c^5, a^6+b^6+c^6, …
   LET W=0 !漸化式
   FOR J=1 TO N
      LET W=W+(-1)^(J-1)*B(J)*T(K-J)
   NEXT J
   LET T(K)=W
NEXT K
MAT PRINT T;

END



-2のとき、n次方程式の各係数は、自然数列となる。

また、
Σ[m=0,n]EXP(2πi{m/(n+1)})^k=0(iは虚数単位とする)より、
1+Σ[m=1,n]EXP(2πi{m/(n+1)})^k=0 ∴Σ[m=1,n]EXP(2πi{m/(n+1)})^k=-1
なので、
-1のとき、n次方程式の各係数は、1となる。すなわち、x^n+x^(n-1)+ … +x^2+x+1=0

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 8月15日(土)10時12分18秒
  > No.3769[元記事へ]

問題
a,bは、a≦bとする正の整数とする。a^2+b^2をab+1が割り切るとき、a,bを求めよ。

答え
a≦bに注意して、a^2+b^2=(b/a)(ab+1)+(a^2-b/a)と変形する。
割り切れるので、a^2-b/a=0 ∴b=a^3
このとき、(a^2+b^2)/(ab+1)=a^2(1+a^4)/(a^4+1)=a^2(平方数)
(終り)

FOR B=1 TO 500
   FOR A=1 TO B
      IF MOD(A^2+B^2,A*B+1)=0 THEN PRINT A;B; (A^2+B^2)/(A*B+1)
   NEXT A
NEXT B
END

実行結果
1  1  1   ←
2  8  4   ←
3  27  9   ←
8  30  4
4  64  16   ←
30  112  4
5  125  25   ←
6  216  36   ←
27  240  9
7  343  49   ←
112  418  4


 

Re: 対称式

 投稿者:山中和義  投稿日:2015年 8月15日(土)19時04分13秒
  > No.3806[元記事へ]

問題 2014年 横浜市立大学 医学部 第1問
a,b,cを相異なる実数とする。x,y,zに関する連立3元1次方程式
 x-ay+a^2z=a^4
 x-by+b^2z=b^4
 x-cy+c^2z=c^4
を解きたい。
その解を基本対称式 A=a+b+c, B=ab+bc+ca, C=abc を用いて表せ。


答え
a,b,cは、3次方程式 t^3-At^2+Bt-C=0 の3つの解である。
t^4
=At^3-Bt^2+Ct ∵t^3=At^2-Bt+Cにtをかける
=A(At^2-Bt+C)-Bt^2+Ct ∵t^3=At^2-Bt+C
=(A^2-B)t^2-(AB-C)t+AC
これより、t^4-(A^2-B)t^2+(AB-C)t-AC=0 ← 式1
与式は、
 a^4-za^2+ya-x=0
 b^4-zb^2+yb-x=0
 c^4-zc^2+yc-x=0
と変形できるので、a,b,cは、4次方程式 t^4-zt^2+yt-x=0 ← 式2 の3つの解でもある。
よって、式1と式2を恒等式として係数を比較すると、x=AC, y=AB-C, z=A^2-B
(終り)


機械的な計算方法
                    t  +A
                ----------------------------------
  t^3-At^2+Bt-C  )  t^4
                    t^4-At^3    +Bt^2     -Ct
                  -----------------------------
                        At^3    -Bt^2     +Ct
                        At^3  -A^2t^2    +ABt-AC
                      ----------------------------
                           (A^2-B)t^2-(AB-C)t+AC
より、
  t^4-{(A^2-B)t^2-(AB-C)t+AC)}=(t^3-At^2+Bt-C)(t+A)
                              =(t-a)(t-b)(t-c)(t+A)
と因数分解される。
これより、余りを求めればよい。



OPTION ARITHMETIC RATIONAL

PUBLIC STRING v$ !変数の定義 ※必要なものだけの列記でもよい
LET v$="ABCt"

PUBLIC NUMERIC N !変数の数
LET N=LEN(v$)

PUBLIC NUMERIC MAX_TERM !最大の項数
LET MAX_TERM=50
!------------------------------ ここまでがサブルーチン

DIM f(0 TO 100, 0 TO N), g(0 TO 100, 0 TO N)
CALL PolySet("t^4", f)
CALL PolySet("t^3-At^2+Bt-C", g)

DIM q(0 TO 100, 0 TO N), r(0 TO 100, 0 TO N)
CALL PolyQuotientRemainder(f,g,"t", q,r)
CALL PolyPrintCollect(q,"t") !商
PRINT
CALL PolyPrintCollect(r,"t") !余り ※符号は+,-,+で採用する
PRINT

END

MERGE "mPOLY.LIB" !多変数の多項式の計算



実行結果
+(+A)+(+1)t
+(+AC)+(-AB+C)t+(-B+A^2)t^2

 

Re: 組み合わせを考える

 投稿者:GAI  投稿日:2015年 8月17日(月)09時23分23秒
  山中和義さんへのお返事です。

> 問題
> a,bは、a≦bとする正の整数とする。a^2+b^2をab+1が割り切るとき、a,bを求めよ。
>
> 答え
> a≦bに注意して、a^2+b^2=(b/a)(ab+1)+(a^2-b/a)と変形する。
> 割り切れるので、a^2-b/a=0 ∴b=a^3
> このとき、(a^2+b^2)/(ab+1)=a^2(1+a^4)/(a^4+1)=a^2(平方数)
> (終り)
>
> FOR B=1 TO 500
>    FOR A=1 TO B
>       IF MOD(A^2+B^2,A*B+1)=0 THEN PRINT A;B; (A^2+B^2)/(A*B+1)
>    NEXT A
> NEXT B
> END
>
> 実行結果
>  1  1  1   ←
>  2  8  4   ←
>  3  27  9   ←
>  8  30  4
>  4  64  16   ←
>  30  112  4
>  5  125  25   ←
>  6  216  36   ←
>  27  240  9
>  7  343  49   ←
>  112  418  4


ここで不思議なのがb=a^3である時は商が平方数になるのはわかるんですが、それ以外のパターン
(a,b)=(8,30),(30,112),(27,240),(112,418),(125,3120),(216,7770),(240,2133),(418,1560),・・・
などの時も商がなぜ平方数となる(全部がそうなるのかは証明できないがなるような雰囲気)のかは何故ですかね?
即ち
a^2+b^2をab+1が割り切るときは
(a^2+b^2)/(ab+1) が完全平方数であるのは何故か?

また例外をもたらす(a,b)は一般式なるものが書けるのでしょうか?
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 8月17日(月)18時58分7秒
  > No.3809[元記事へ]

GAIさんへのお返事です。

> a^2+b^2をab+1が割り切るときは
> (a^2+b^2)/(ab+1) が完全平方数であるのは何故か?

> また例外をもたらす(a,b)は一般式なるものが書けるのでしょうか?


いわゆる一般解は、

k=1,2,3,4,…として、
a≦bに注意して、a^k+b^k={b/a^(k-1)}{a^(k-1)b^(k-1)+1}+{a^k-b/a^(k-1)}と変形する。
割り切れるので、a^k-b/a^(k-1)=0 ∴b=a^(2k-1)
このとき、(a^k+b^k)/{a^(k-1)b^(k-1)+1}=a^k{1+a^(2k^2-2k)}/{a^(2k^2-2k)+1}=a^k(べき乗)


OPTION ARITHMETIC RATIONAL
LET K=2
FOR B=1 TO 10000
   FOR A=1 TO B
      LET P=A^K+B^K
      LET Q=(A*B)^(K-1)+1
      IF MOD(P,Q)=0 THEN PRINT A;B; P/Q;  A^K; A^(2*K-1)
   NEXT A
NEXT B
END


ですから、特殊な解の存在はわかりません。

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 8月26日(水)19時06分50秒
  > No.3810[元記事へ]

GAIさんへのお返事です。

> a^2+b^2をab+1が割り切るときは
> (a^2+b^2)/(ab+1) が完全平方数であるのは何故か?
>
> また例外をもたらす(a,b)は一般式なるものが書けるのでしょうか?
>


  a    b      K
---------------------
  2    8=2^3  4=2^2
  8    30     4
  30   112    4
  112  418    4
  :


(a^2+b^2)/(ab+1)=Kとすると、b^2-aKb+a^2-K=0
解の公式より、b=(aK±√{(aK)^2-4(a^2-K)})/2
K,aを固定して、具体的な数値で解くと、
K=4,a=2のとき、b^2-8b=b(b-8)=0
K=4,a=8のとき、b^2-32b+60=(b-2)(b-30)=0
K=4,a=30のとき、b^2-120b+896=(b-8)(b-112)=0
  :

2 ─ 8 ─ 30 ─ 112 ─ 418 ─  …
  \   \    \     \     \
     0    2     8      30
のような構造を得る。

一般的に、
(a,b,K)=(A,A^3,A^2)が1つの解である。

t[0]=A ─ t[1]=A^3 ─ t[2]=Kt[1]-t[0] ─ t[3]=Kt[2]-t[1] ─  …
       \          \                 \                 \
          0           t[0]=A             t[1]=A^3

漸化式 t[m+2]=Kt[m+1]-t[m] で他の解を得る。

例
(a,b,K)=(2,8,4)系で計算すると、
t[0]=2
t[1]=8
t[2]=4×8-2=30
t[3]=4×30-8=112
t[4]=4×112-30=418
 :
 :



LET A=8 !2,8,30,112,418,…
LET K=2^2
LET D=(A*K)^2-4*(A^2-K)
PRINT (A*K+SQR(D))/2; (A*K-SQR(D))/2
END

 

Re: 組み合わせを考える

 投稿者:GAI  投稿日:2015年 8月27日(木)07時23分49秒
  > No.3813[元記事へ]

山中和義さんへのお返事です。

>
> 漸化式 t[m+2]=Kt[m+1]-t[m] で解を得る。
> 例
> (a,b,K)=(2,8,4)の系で計算すると、
> t[0]=2
> t[1]=8
> t[2]=4×8-2=30
> t[3]=4×30-8=112
> t[4]=4×112-30=418


なるほど!
なんでこの漸化式に気づかないんだろう。
データを見るときはいろいろな角度から眺める必要がありますね。
例外だけに目が釘付けになり、それを含むより広い世界が見えていない。
日常でも似たことがあるような・・・
ほんとに数学から物を見る訓練や、心を真っ白にしておく教訓を学びます。
長い間頭のどこかに問題意識を暖めている山中さんの習慣を見習います。
お陰でスッキリしました。
 

安全運転自己診断

 投稿者:しばっち  投稿日:2015年 8月30日(日)09時36分52秒
  DIM Q$(27),SCORE(6)
INPUT  PROMPT "あなたの年齢は":AGE
INPUT  PROMPT "あなたの性別は 男(1) 女(2)":SEX
INPUT  PROMPT "年間の走行距離(Km)は":MILEAGE
FOR I=1 TO 27
   READ A$
   DO
      PRINT "No.";I;":";A$;" (Yes/No) ";
      INPUT Q$(I)
      LET Q$(I)=UCASE$(Q$(I))
   LOOP UNTIL Q$(I)="Y" OR Q$(I)="N"
NEXT I
FOR I=1 TO 27
   SELECT CASE I
   CASE 1 TO 6
      IF Q$(I)="Y" THEN LET SCORE(1)=SCORE(1)+1
   CASE 7 TO 10
      IF Q$(I)="Y" THEN LET SCORE(2)=SCORE(2)+1
   CASE 11 TO 15
      IF Q$(I)="Y" THEN LET SCORE(3)=SCORE(3)+1
   CASE 16 TO 18
      IF Q$(I)="N" THEN LET SCORE(4)=SCORE(4)+1
   CASE 19 TO 23
      IF Q$(I)="Y" THEN LET SCORE(5)=SCORE(5)+1
   CASE 24 TO 26
      IF Q$(I)="Y" THEN LET SCORE(6)=SCORE(6)+1
   CASE 27
      IF Q$(I)="N" THEN LET SCORE(6)=SCORE(6)+1
   END SELECT
NEXT I
PRINT
PRINT ">>>>>>>>>> 結果 <<<<<<<<<<"
PRINT
SELECT CASE AGE
CASE IS<=29
   SELECT CASE MILEAGE
   CASE IS<2400
      IF SEX=1 THEN
         IF SCORE(1)=6 THEN CALL 自己中心的
         IF SCORE(2)>=2 AND SCORE(2)<4 THEN CALL ながら
      ELSE
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)=4 OR SCORE(3)=5 THEN CALL 不注視
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
      END IF
   CASE 2400 TO 12000
      IF SEX=1 THEN
         IF SCORE(1)=6 THEN CALL 自己中心的
         IF SCORE(2)>=1 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)>=1 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(5)>=1 AND SCORE(5)<=5 THEN CALL 攻撃的
      ELSE
         IF SCORE(2)>=1 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(5)=4 OR SCORE(5)=5 THEN CALL 攻撃的
      END IF
   CASE IS>12000
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
      ELSE
         IF SCORE(6)=3 OR SCORE(6)=4 THEN CALL 無関心
      END IF
   END SELECT
CASE 30 TO 59
   SELECT CASE MILEAGE
   CASE IS<2400
      IF SEX=1 THEN
         IF SCORE(1)>=1 AND SCORE(1)<=6 THEN CALL 自己中心的
         IF SCORE(2)=3 OR SCORE(2)=4 THEN CALL ながら
         IF SCORE(3)=4 OR SCORE(3)=5 THEN CALL 不注視
         IF SCORE(5)>=1 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=2 AND SCORE(6)<=4 THEN CALL 無関心
      ELSE
         IF SCORE(1)>=4 AND SCORE(1)<=6 THEN CALL 自己中心的
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)>=2 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(4)>=1 AND SCORE(4)<=3 THEN CALL 配慮不足
         IF SCORE(5)>=2 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=2 AND SCORE(6)<=4 THEN CALL 無関心
      END IF
   CASE 2400 TO 12000
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(5)>=1 AND SCORE(5)<=5 THEN CALL 攻撃的
      ELSE
         IF SCORE(1)>=4 AND SCORE(1)<=6 THEN CALL 自己中心的
         IF SCORE(2)=3 OR SCORE(2)=4 THEN CALL ながら
         IF SCORE(3)>=2 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(4)>=1 AND SCORE(4)<=3 THEN CALL 配慮不足
         IF SCORE(5)>=1 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=2 AND SCORE(6)<=4 THEN CALL 無関心
      END IF
   CASE IS>12000
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(4)>=1 AND SCORE(4)<=3 THEN CALL 配慮不足
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=2 AND SCORE(6)<=4 THEN CALL 無関心
      ELSE
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
      END IF
   END SELECT
CASE 60 TO 69
   SELECT CASE MILEAGE
   CASE IS<2400
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)=4 OR SCORE(3)=5 THEN CALL 不注視
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=1 AND SCORE(6)<=4 THEN CALL 無関心
      ELSE
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
      END IF
   CASE 2400 TO 12000
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)=4 OR SCORE(3)=5 THEN CALL 不注視
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=1 AND SCORE(6)<=4 THEN CALL 無関心
      ELSE
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
      END IF
   CASE IS>12000
      IF SEX=1 THEN
         IF SCORE(2)>=2 AND SCORE(2)<=4 THEN CALL ながら
         IF SCORE(3)=4 OR SCORE(3)=5 THEN CALL 不注視
         IF SCORE(5)>=3 AND SCORE(5)<=5 THEN CALL 攻撃的
         IF SCORE(6)>=1 AND SCORE(6)<=4 THEN CALL 無関心
      ELSE
         IF SCORE(3)>=3 AND SCORE(3)<=5 THEN CALL 不注視
      END IF
   END SELECT
END SELECT

DATA 後からクラクションを鳴らされると腹が立つ
DATA 渋滞時に、横から割り込まれると損した気分になる
DATA 割り込みされそうな時は、車間距離をつめる
DATA 歩行者が道路をゆっくり横断しているとイライラする
DATA 歩行者や自転車に、自分のペースをみだされるのは嫌だ
DATA 何度も信号で止められると、とても嫌な感じがする
DATA カーナビや地図を見ながら運転することがある
DATA 運転中、身支度や飲食をすることがある
DATA 運転中、よくオーディオ、テレビを操作する
DATA 走行中、携帯電話に着信があると、受けてしまう
DATA 前の車のブレーキランプに気づくのが遅れて、慌てることがある
DATA 脇見をしていて、ハッとすることがある
DATA 考え事をしていて、ハッとすることがある
DATA 夜、歩行者や自転車に、ハッとすることがある
DATA カーブミラーに映る他車の位置を見誤ることがある
DATA 体調を整えてから運転する
DATA 初心者マーク、高齢者マークの車を意識して運転する
DATA 後方に注意して運転するほうだ
DATA 追い越しや車線変更をするほうだ
DATA 前方が空いていると、ついスピードが出てしまう
DATA 信号が赤になる前に、急いで交差点に進入することがある
DATA 人から運転が強引だと言われたことがある
DATA カーブでも、スピードを落とさずに走れる
DATA 夜間や悪天候のときは、運転しないようにする
DATA 長距離の運転を控える
DATA 見通しや路面状態がよくても、制限速度より遅めに走る
DATA ちょっとしたことでもよくブレーキを踏む

SUB 自己中心的
   PRINT "--------------自己中心的--------------"
   PRINT
   PRINT "自分のペースを乱されると不快になる傾向が強いようです"
   PRINT
   PRINT "不快な気持ちが運転にも反映され、知らず知らずのうちに、"
   PRINT "的確な認知や判断、操作等ができなくなり、事故の危険性が高くなります"
   PRINT
   PRINT "イライラは禁物、余裕を持った運転を心がけるように努めましょう"
   PRINT
END SUB

SUB ながら
   PRINT "--------------ながら--------------"
   PRINT
   PRINT "運転中に、運転に直接関係のないことに関心が向いてしまう傾向が強いようです"
   PRINT
   PRINT "人間は同時に複数の作業もできますが、そうした場合、効率が低下したり、"
   PRINT "ミスが多くなり、事故の危険性が高くなります"
   PRINT
   PRINT "運転中は、運転に必要な作業に専念し、急な状況の変化にも対応できるように努めましょう"
   PRINT
END SUB

SUB 不注視
   PRINT "--------------不注視--------------"
   PRINT
   PRINT "運転中に、前方の道路交通状況に対する注視を怠ってしまう傾向が強いようです"
   PRINT
   PRINT "脇見はもちろん、前方を見ていても集中力が低下すると、危険に気づくのが遅れたり、"
   PRINT "気づかなかったりで、事故の回避が困難になります"
   PRINT
   PRINT "道路の状況、他の道路利用者の動きを、常に把握するように心がけて運転しましょう"
   PRINT
END SUB

SUB 配慮不足
   PRINT "--------------配慮不足--------------"
   PRINT
   PRINT "他の道路利用者の行動特性や考え方をしっかり理解することに関心がないようです"
   PRINT
   PRINT "他者や自己の状態をしっかり理解することで、交通場面に応じた状況を想定することもでき、"
   PRINT "急な状況の変化にも的確に対応できます"
   PRINT
   PRINT "他者や周囲の状況に配慮して運転すると、事故の危険性を低くすることができます"
   PRINT
END SUB

SUB 攻撃的
   PRINT "--------------攻撃的--------------"
   PRINT
   PRINT "少しでも前に、少しでも早くという気持ちで運転する傾向が強いようです"
   PRINT
   PRINT "高い速度での運転や度々行う車線変更は、自己だけでなく他の道路利用者の判断や"
   PRINT "操作ミスを誘発することで、事故に結びつく可能性を高めます"
   PRINT
   PRINT "他の人が危ないと感じたり、事故の危険性を高めるような運転はやめましょう"
   PRINT
END SUB

SUB 無関心
   PRINT "--------------無関心--------------"
   PRINT
   PRINT "事故の危険性が高い状況を回避しない傾向が強いようです"
   PRINT
   PRINT "人は十分に注意していてもミスを犯すことがありますが、そのミスが大きなミスに"
   PRINT "繋がらないような状況、条件での運転であれば、事故は回避できます"
   PRINT
   PRINT "頻繁にブレーキを踏まなくてもよい運転に心がけることで、事故の危険性が低くなります"
   PRINT
END SUB
END
 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 8月30日(日)12時10分40秒
  > No.3813[元記事へ]

問題
正の整数a,b,c,dは、a<b<c<dとする。
どの3つの数の平方の和も平方数になるとき、a,b,c,dを求めよ。

答え
 問題
 正の整数a,b,c,dは、a<b<c<dとする。
 x,y,z,wは正の整数として、連立方程式
  a^2+b^2+c^2=x^2
  a^2+b^2+d^2=y^2
  a^2+c^2+d^2=z^2
  b^2+c^2+d^2=w^2
 を満たすとき、a,b,c,dを求めよ。

として、総当たりで検索する。
(終り)


OPTION ARITHMETIC RATIONAL

DEF F(A,B,C)=A^2+B^2+C^2 !C(4,3)=4通り
DEF G(X)=INTSQR(X)^2-X !平方数の確認

FOR D=4 TO 500
   FOR C=3 TO D-1
      FOR B=2 TO C-1
         LET WW=F(B,C,D)
         IF G(WW)=0 THEN !平方数なら
            FOR A=1 TO B-1
               LET ZZ=F(A,C,D)
               LET YY=F(A,B,D)
               LET XX=F(A,B,C)
               IF G(ZZ)=0 AND G(YY)=0 AND G(XX)=0 THEN !平方数なら
                  PRINT A;B;C;D; INTSQR(XX);INTSQR(YY);INTSQR(ZZ);INTSQR(WW)
               END IF
            NEXT A
         END IF
      NEXT B
   NEXT C
NEXT D

END


実行結果
60  105  168  280  207  305  332  343


-----------------------------------------

類題
正の整数a,b,c,dは、a<b<c<dとする。
どの3つの数の和も平方数になるとき、a,b,c,dを求めよ。

答え
DEF F(A,B,C)=A+B+C !C(4,3)=4通り

として、解を得る。
(終り)


-----------------------------------------

類題
正の整数a,b,c,dは、a<b<c<dとする。
どの2つの数の和も平方数になるとき、a,b,c,dを求めよ。

答え

OPTION ARITHMETIC RATIONAL

DEF F(A,B)=A+B !C(4,2)=6通り
DEF G(X)=INTSQR(X)^2-X !平方数の確認

FOR D=4 TO 5000
   FOR C=3 TO D-1
      LET WW=F(C,D)
      IF G(WW)=0 THEN !平方数なら
         FOR B=2 TO C-1
            LET VV=F(B,D)
            LET UU=F(B,C)
            IF G(VV)=0 AND G(UU)=0 THEN !平方数なら
               FOR A=1 TO B-1
                  LET ZZ=F(A,D)
                  LET YY=F(A,C)
                  LET XX=F(A,B)
                  IF G(ZZ)=0 AND G(YY)=0 AND G(XX)=0 THEN !平方数なら
                     PRINT A;B;C;D; INTSQR(XX);INTSQR(YY);INTSQR(ZZ);INTSQR(UU);INTSQR(VV);INTSQR(WW)
                  END IF
               NEXT A
            END IF
         NEXT B
      END IF
   NEXT C
NEXT D

END


実行結果
2  359  482  3362  19  22  58  29  61  62
8  1016  1288  3473  32  36  59  48  67  69
   :
   :


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 8月30日(日)14時33分58秒
  > No.3816[元記事へ]

問題
正の整数a,b,cは、a<b<cとする。
どの2つの数の平方の和も平方数になるとき、a,b,cを求めよ。

問題
正の整数a,b,cは、a<b<cとする。
x,y,zは正の整数として、連立方程式
 a^2+b^2=x^2
 a^2+c^2=y^2
 b^2+c^2=z^2
を満たすとき、a,b,cを求めよ。



手作業で解が求まるだろうか!?


考察 ピタゴラス数
与えられた式を順に、式1,式2,式3とする。
aを固定すると、式1は、a^2=x^2-b^2=(x-b)(x+b)
1≦P<aの範囲でa^2の約数を考えると、a^2=PQ(P<Q)と表される。
x-b=P, x+b=Qより、2x=Q+P, 2b=Q-Pとなって、x,bが求まる。
このとき、2通り以上のbが求まる場合、
その中の2つをb,cとして、式1と式2に相当させる。
このb,cの平方の和が平方数になれば、式3に相当するので、題意を満たすものが見つかる。
(終り)

A=44のとき、
  b    x
  483  485
  240  244
  117  125
なので、
117^2+240^2=71289=267
117^2+483^2=246978=496.9688…
240^2+483^2=290889=539.3412…
よって、(a,b,c)=(44,117,240)



作業のシミュレーション

DIM M(20) !b,cの候補
FOR A=1 TO 50 !aを固定する
   PRINT "A=";A

   LET K=0 !個数
   FOR P=1 TO A-1
      IF MOD(A^2,P)=0 THEN !約数なら
         LET Q=A^2/P
         LET B=(Q-P)/2
         LET X=(Q+P)/2
         IF INT(B)=B AND INT(X)=X THEN !整数なら
            IF B<=A THEN EXIT FOR !a<bに注意する
            PRINT B;X
            LET K=K+1 !記録する
            LET M(K)=B
         END IF
      END IF
   NEXT P
   IF K>=2 THEN !式3の確認
      FOR i=1 TO K-1 !2つ
         FOR J=i+1 TO K
            LET T=M(i)^2+M(J)^2
            PRINT STR$(M(J));"^2+";STR$(M(i));"^2=";T; "="; SQR(T)
         NEXT J
      NEXT i
   END IF

NEXT A

END


 

30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:たろさ  投稿日:2015年 8月31日(月)18時37分12秒
  私の様な素人が書き込める掲示板ではないと思いますが、宜しくお願いします。

オイラーの無限解析を参照しても素数階乗は見られません。

個人的に一人で探究しています。10進BASICに、感謝

私の様な初心者にも使いやすく便利に使わせていただいています。

多分、こんなprogramは? みたいなものです。自分のブログではDATAに

改行が入り、修正するのが大変なのでこちの掲示板に失礼します。

素数階乗のn倍周期の探究を目的としたprogramです。

----------------------------------------------------------------------------------------------

DATA -1,1,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,&
&149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,289,293,307,&
&311,313,317,323,331,337,347,349,353,359,361,367,373,379,383,389,391,397,401,409,419,421,431,433,437,439,443,449,457,461,&
&463,467,479,487,491,493,499,503,509,521,523,527,529,541,547,551,557,563,569,571,577,587,589,593,599,601,607,613,617,619,&
&629,631,641,643,647,653,659,661,667,673,677,683,691,697,701,703,709,713,719,727,731,733,739,743,751,757,761,769,773,779,&
&787,797,799,809,811,817,821,823,827,829,839,841,851,853,857,859,863,877,881,883,887,893,899,901,907,911,919,929,937,941,&
&943,947,953,961,967,971,977,983,989,991,997,1003,1007,1009,1013,1019,1021,1031,1033,1037,1039,1049,1051,1061,1063,1069,1073,1081,1087,1091,1093,&
&1097,1103,1109,1117,1121,1123,1129,1139,1147,1151,1153,1159,1163,1171,1181,1187,1189,1193,1201,1207,1213,1217,1219,1223,1229,1231,1237,1241,1247,&
&1249,1259,1271,1273,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1333,1343,1349,1357,1361,1363,1367,1369,1373,1381,1387,1399,1403,1409,&
&1411,1423,1427,1429,1433,1439,1447,1451,1453,1457,1459,1471,1481,1483,1487,1489,1493,1499,1501,1511,1513,1517,1523,1531,1537,1541,1543,1549,1553,1559,&
&1567,1571,1577,1579,1583,1591,1597,1601,1607,1609,1613,1619,1621,1627,1633,1637,1643,1649,1657,1663,1667,1669,1679,1681,1691,1693,1697,1699,1709,1711,&
&1717,1721,1723,1733,1739,1741,1747,1751,1753,1759,1763,1769,1777,1783,1787,1789,1801,1811,1817,1819,1823,1829,1831,1843,1847,1849,1853,1861,1867,1871,&
&1873,1877,1879,1889,1891,1901,1907,1909,1913,1919,1921,1927,1931,1933,1943,1949,1951,1957,1961,1973,1979,1987,1993,1997,1999,2003,2011,2017,2021,2027,&
&2029,2033,2039,2047,2053,2059,2063,2069,2071,2077,2081,2083,2087,2089,2099,2111,2113,2117,2129,2131,2137,2141,2143,2147,2153,2159,2161,2173,2179,2183,&
&2201,2203,2207,2209,2213,2221,2227,2231,2237,2239,2243,2251,2257,2263,2267,2269,2273,2279,2281,2287,2291,2293,2297,2309,2311,2323,2329,2333,2339,2341,&
&2347,2351,2357,2363,2369,2371,2377,2381,2383,2389,2393,2399,2407,2411,2413,2417,2419,2423,2437,2441,2447,2449,2459,2461,2467,2473,2477,2479,2489,2491,&
&2501,2503,2507,2521,2531,2533,2537,2539,2543,2549,2551,2557,2567,2573,2579,2581,2591,2593,2599,2603,2609,2617,2621,2623,2627,2633,2641,2647,2657,2659,&
&2663,2669,2671,2677,2683,2687,2689,2693,2699,2701,2707,2711,2713,2719,2729,2731,2741,2747,2749,2753,2759,2767,2771,2773,2777,2789,2791,2797,2801,2803,&
&2809,2813,2819,2831,2833,2837,2839,2843,2851,2857,2861,2867,2869,2879,2881,2887,2897,2903,2909,2911,2917,2921,2923,2927,2929,2939,2941,2953,2957,2963,&
&2969,2971,2983,2987,2993,2999,3001,3007,3011,3013,3019,3023,3037,3041,3043,3049,3053,3061,3067,3071,3077,3079,3083,3089,3097,3103,3109,3119,3121,3127,&
&3131,3137,3139,3149,3151,3161,3163,3167,3169,3173,3181,3187,3191,3193,3197,3203,3209,3217,3221,3229,3233,3239,3247,3251,3253,3257,3259,3271,3277,3281,&
&3287,3293,3299,3301,3307,3313,3317,3319,3323,3329,3331,3337,3343,3347,3349,3359,3361,3371,3373,3379,3383,3389,3391,3397,3401,3403,3407,3413,3427,3431,&
&3433,3439,3449,3457,3461,3463,3467,3469,3473,3481,3491,3499,3503,3511,3517,3527,3529,3533,3539,3541,3547,3551,3557,3559,3569,3571,3581,3583,3587,3589,&
&3593,3599,3607,3611,3613,3617,3623,3629,3631,3637,3643,3649,3659,3667,3671,3673,3677,3683,3691,3697,3701,3709,3713,3719,3721,3727,3733,3737,3739,3743,&
&3749,3761,3763,3767,3769,3779,3781,3791,3793,3797,3799,3803,3811,3821,3823,3827,3833,3841,3847,3851,3853,3859,3863,3869,3877,3881,3889,3893,3901,3907,&
&3911,3917,3919,3923,3929,3931,3937,3943,3947,3953,3959,3961,3967,3973,3977,3979,3989,4001,4003,4007,4009,4013,4019,4021,4027,4031,4033,4049,4051,4057,&
&4061,4063,4073,4079,4087,4091,4093,4097,4099,4111,4117,4127,4129,4133,4139,4141,4153,4157,4159,4163,4171,4177,4181,4183,4187,4189,4201,4211,4217,4219,&
&4223,4229,4231,4237,4241,4243,4247,4253,4259,4261,4267,4271,4273,4283,4289,4297,4307,4309,4313,4321,4327,4331,4337,4339,4343,4349,4351,4357,4363,4369,&
&4373,4379,4387,4391,4393,4397,4399,4409,4421,4423,4427,4429,4439,4441,4447,4451,4453,4457,4463,4469,4471,4481,4483,4489,4493,4507,4513,4517,4519,4523,&
&4531,4541,4547,4549,4553,4559,4561,4567,4573,4577,4579,4583,4591,4597,4601,4603,4607,4619,4621,4633,4637,4639,4643,4649,4651,4657,4661,4663,4673,4679,&
&4681,4687,4691,4699,4703,4709,4717,4721,4723,4727,4729,4733,4747,4751,4757,4759,4769,4777,4783,4787,4789,4793,4799,4801,4811,4813,4817,4819,4831,4841,&
&4843,4847,4853,4859,4861,4867,4871,4877,4883,4889,4891,4897,4903,4909,4913,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4981,4987,4993,4997,4999,&
&5003,5009,5011,5017,5021,5023,5029,5039,5041,5051,5053,5059,5063,5069,5077,5081,5087,5099,5101,5107,5111,5113,5119,5123,5129,5141,5143,5147,5149,5153,&
&5167,5171,5177,5179,5183,5189,5191,5197,5207,5209,5219,5221,5227,5231,5233,5237,5249,5251,5261,5263,5267,5273,5279,5281,5287,5293,5297,5303,5309,5311,&
&5321,5323,5329,5333,5339,5347,5351,5353,5359,5363,5371,5377,5381,5387,5389,5393,5399,5407,5413,5417,5419,5429,5431,5437,5441,5443,5449,5459,5461,5471,&
&5477,5479,5483,5491,5497,5501,5503,5507,5513,5519,5521,5527,5531,5539,5543,5549,5557,5561,5563,5567,5569,5573,5581,5587,5591,5597,5609,5611,5617,5623,&
&5627,5633,5639,5641,5647,5651,5653,5657,5659,5669,5671,5683,5689,5693,5699,5701,5711,5713,5717,5723,5729,5737,5741,5743,5749,5767,5771,5773,5777,5779,&
&5783,5791,5801,5807,5809,5813,5821,5827,5833,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5891,5893,5897,5899,5903,5909,5911,5917,5921,5923,5927,&
&5933,5939,5947,5953,5959,5963,5969,5977,5981,5983,5987,5989,6001,6007,6011,6023,6029,6031,6037,6043,6047,6049,6053,6059,6067,6073,6077,6079,6089,6091,&
&6101,6103,6107,6109,6113,6119,6121,6131,6133,6137,6143,6151,6157,6161,6163,6169,6173,6179,6187,6191,6197,6199,6203,6211,6217,6221,6229,6233,6239,6241,&
&6247,6257,6263,6269,6271,6277,6283,6287,6289,6299,6301,6311,6313,6317,6319,6323,6329,6337,6341,6343,6353,6359,6361,6367,6371,6373,6379,6389,6397,6401,&
&6403,6407,6421,6427,6431,6437,6439,6443,6449,6451,6463,6467,6469,6473,6481,6491,6493,6497,6499,6509,6511,6521,6527,6529,6533,6541,6547,6551,6553,6557,&
&6563,6569,6571,6577,6581,6583,6593,6599,6607,6613,6619,6623,6631,6637,6641,6647,6649,6653,6659,6661,6667,6673,6679,6683,6689,6691,6697,6701,6703,6707,&
&6709,6719,6731,6733,6737,6739,6749,6751,6757,6761,6763,6767,6779,6781,6791,6793,6803,6817,6821,6823,6827,6829,6833,6841,6847,6857,6859,6863,6869,6871,&
&6883,6887,6889,6893,6899,6901,6907,6911,6913,6917,6931,6943,6947,6949,6953,6959,6961,6967,6971,6973,6977,6983,6989,6991,6997,7001,7003,7009,7013,7019,&
&7027,7031,7037,7039,7043,7057,7061,7067,7069,7079,7081,7087,7093,7097,7099,7103,7109,7121,7123,7127,7129,7141,7151,7153,7157,7159,7169,7171,7177,7181,&
&7187,7193,7199,7201,7207,7211,7213,7219,7223,7229,7237,7243,7247,7253,7261,7277,7279,7283,7289,7291,7297,7303,7307,7309,7313,7321,7327,7331,7333,7339,&
&7349,7351,7361,7363,7367,7369,7373,7379,7387,7391,7393,7409,7411,7417,7421,7429,7433,7439,7451,7453,7457,7459,7463,7471,7477,7481,7487,7489,7493,7499,&
&7507,7517,7519,7523,7529,7531,7537,7541,7543,7547,7549,7559,7561,7571,7573,7577,7583,7589,7591,7597,7603,7607,7613,7619,7621,7627,7633,7639,7643,7649,&
&7661,7663,7669,7673,7681,7687,7691,7697,7699,7703,7717,7723,7727,7729,7739,7741,7747,7751,7753,7757,7759,7769,7771,7781,7783,7789,7793,7801,7807,7811,&
&7817,7823,7829,7831,7837,7841,7849,7853,7859,7867,7871,7873,7877,7879,7883,7897,7901,7907,7913,7919,7921,7927,7933,7937,7939,7949,7951,7957,7961,7963,&
&7967,7979,7981,7991,7993,7999,8003,8009,8011,8017,8023,8027,8033,8039,8051,8053,8059,8069,8077,8081,8083,8087,8089,8093,8101,8111,8117,8119,8123,8131,&
&8137,8143,8147,8149,8153,8159,8161,8167,8171,8179,8189,8191,8201,8207,8209,8213,8219,8221,8227,8231,8233,8237,8243,8249,8251,8257,8263,8269,8273,8279,&
&8287,8291,8293,8297,8299,8303,8311,8317,8321,8329,8339,8341,8347,8353,8357,8363,8369,8377,8381,8383,8387,8389,8399,8401,8413,8417,8419,8423,8429,8431,&
&8441,8443,8447,8453,8461,8467,8471,8473,8479,8483,8497,8501,8507,8509,8513,8521,8527,8531,8537,8539,8543,8549,8551,8557,8563,8573,8579,8581,8587,8597,&
&8599,8609,8611,8621,8623,8627,8629,8633,8639,8641,8647,8651,8653,8663,8669,8677,8681,8683,8689,8693,8699,8707,8711,8713,8717,8719,8731,8737,8741,8747,&
&8753,8759,8761,8773,8777,8779,8783,8791,8797,8803,8807,8809,8819,8821,8831,8837,8839,8843,8849,8851,8857,8861,8863,8867,8873,8881,8887,8891,8893,8903,&
&8909,8917,8923,8927,8929,8933,8941,8947,8951,8959,8963,8969,8971,8977,8989,8993,8999,9001,9007,9011,9013,9017,9019,9029,9041,9043,9047,9049,9059,9067,&
&9071,9073,9077,9083,9089,9091,9101,9103,9109,9127,9131,9133,9137,9143,9151,9157,9161,9167,9169,9173,9179,9181,9187,9193,9197,9199,9203,9209,9211,9221,&
&9223,9227,9239,9241,9253,9257,9259,9263,9271,9277,9281,9283,9287,9293,9299,9301,9307,9311,9313,9319,9323,9329,9337,9341,9343,9349,9353,9367,9371,9377,&
&9379,9389,9391,9397,9403,9407,9409,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9469,9473,9479,9481,9487,9491,9497,9509,9511,9517,9521,9523,9533,&
&9539,9547,9551,9553,9557,9563,9571,9577,9587,9589,9593,9599,9601,9613,9617,9619,9623,9629,9631,9637,9641,9643,9649,9661,9671,9673,9677,9679,9683,9689,&
&9697,9701,9703,9707,9719,9721,9727,9731,9733,9739,9743,9749,9761,9767,9769,9773,9781,9787,9791,9797,9799,9803,9809,9811,9817,9827,9829,9833,9839,9847,&
&9851,9853,9857,9859,9869,9871,9881,9883,9887,9899,9901,9907,9913,9917,9923,9929,9931,9937,9941,9943,9949,9953,9959,9967,9973,9979,9983,9991,10001,10007,&
&10009,10013,10019,10027,10033,10037,10039,10051,10057,10061,10063,10067,10069,10079,10081,10091,10093,10097,10099,10103,10111,10117,10121,10123,10133,10139,10141,10147,10151,10159,&
&10163,10169,10177,10181,10183,10187,10189,10193,10201,10207,10211,10217,10223,10229,10237,10243,10247,10249,10253,10259,10261,10267,10271,10273,10277,10279,10289,10291,10301,10303,&
&10313,10319,10321,10327,10331,10333,10337,10343,10349,10357,10363,10369,10379,10391,10393,10397,10399,10403,10411,10421,10427,10429,10433,10441,10447,10453,10457,10459,10463,10469,&
&10471,10477,10481,10487,10489,10499,10501,10511,10513,10519,10523,10529,10531,10537,10541,10547,10553,10559,10561,10567,10573,10579,10583,10589,10597,10601,10603,10607,10609,10613,&
&10627,10631,10639,10643,10649,10651,10657,10663,10667,10669,10679,10687,10691,10693,10697,10709,10711,10721,10723,10727,10729,10733,10739,10741,10753,10757,10763,10771,10781,10783,&
&10789,10793,10799,10807,10811,10817,10819,10823,10831,10837,10841,10847,10849,10853,10859,10861,10867,10873,10877,10883,10889,10891,10897,10903,10909,10919,10921,10931,10937,10939,&
&10943,10949,10951,10957,10961,10963,10973,10979,10981,10987,10991,10993,10999,11003,11009,11017,11021,11023,11027,11029,11041,11047,11051,11057,11059,11069,11071,11083,11087,11093,&
&11101,11107,11111,11113,11117,11119,11129,11131,11147,11149,11153,11159,11161,11171,11173,11177,11183,11189,11191,11197,11201,11203,11213,11227,11233,11237,11239,11243,11251,11257,&
&11261,11267,11269,11273,11279,11281,11287,11293,11299,11303,11309,11311,11317,11321,11327,11329,11339,11351,11353,11357,11359,11369,11371,11377,11381,11383,11387,11393,11399,11411,&
&11413,11419,11423,11437,11441,11443,11447,11449,11461,11467,11471,11477,11483,11489,11491,11497,11503,11507,11509,11513,11519,11521,11527,11533,11537,11549,11551,11563,11567,11569,&
&11573,11579,11581,11587,11591,11593,11597,11603,11611,11617,11621,11623,11629,11633,11639,11647,11651,11653,11657,11659,11663,11677,11681,11689,11699,11701,11707,11717,11719,11723,&
&11729,11731,11741,11743,11747,11749,11761,11771,11773,11777,11779,11783,11789,11797,11801,11807,11813,11819,11821,11827,11831,11833,11839,11849,11857,11861,11863,11867,11873,11881,&
&11887,11897,11899,11903,11909,11911,11917,11923,11927,11929,11933,11939,11941,11951,11953,11959,11969,11971,11981,11983,11987,11989,11993,12007,12011,12013,12017,12029,12031,12037,&
&12041,12043,12049,12053,12059,12071,12073,12079,12083,12091,12097,12101,12107,12109,12113,12119,12121,12127,12137,12139,12143,12149,12151,12157,12161,12163,12167,12169,12179,12191,&
&12193,12197,12203,12209,12211,12217,12223,12227,12239,12241,12247,12251,12253,12263,12269,12277,12281,12283,12289,12293,12301,12307,12317,12319,12323,12329,12343,12347,12349,12359,&
&12361,12367,12371,12373,12377,12379,12391,12401,12403,12407,12409,12413,12421,12427,12431,12433,12437,12443,12449,12451,12457,12461,12469,12473,12479,12487,12491,12497,12499,12503,&
&12511,12517,12521,12527,12533,12539,12541,12547,12553,12557,12559,12563,12569,12577,12581,12583,12587,12589,12599,12601,12611,12613,12619,12629,12631,12637,12641,12643,12647,12653,&
&12659,12667,12671,12673,12679,12689,12697,12703,12707,12709,12713,12721,12731,12737,12739,12743,12751,12757,12763,12767,12769,12773,12781,12787,12791,12797,12799,12809,12811,12821,&
&12823,12827,12829,12833,12839,12841,12847,12851,12853,12863,12869,12871,12877,12889,12893,12899,12907,12911,12913,12917,12919,12923,12931,12937,12941,12949,12953,12959,12967,12973,&
&12977,12979,12983,12989,12997,13001,13003,13007,13009,13019,13021,13031,13033,13037,13043,13049,13051,13061,13063,13067,13073,13081,13087,13093,13099,13103,13109,13121,13127,13129,&
&13133,13141,13147,13151,13157,13159,13163,13171,13177,13183,13187,13193,13199,13201,13207,13213,13217,13219,13229,13231,13241,13243,13249,13253,13259,13261,13267,13271,13283,13289,&
&13291,13297,13301,13303,13309,13313,13319,13327,13331,13333,13337,13339,13357,13361,13367,13369,13373,13379,13381,13393,13397,13399,13411,13417,13421,13423,13427,13439,13441,13451,&
&13457,13459,13463,13469,13471,13477,13483,13487,13493,13499,13501,13511,13513,13523,13529,13537,13543,13547,13549,13553,13561,13567,13571,13577,13579,13583,13589,13591,13597,13603,&
&13609,13613,13619,13621,13627,13631,13633,13639,13649,13661,13667,13669,13679,13681,13687,13691,13693,13697,13703,13709,13711,13721,13723,13729,13733,13747,13751,13753,13757,13759,&
&13763,13771,13777,13781,13787,13789,13799,13801,13807,13813,13817,13823,13829,13831,13837,13841,13843,13847,13859,13861,13873,13877,13879,13883,13889,13891,13901,13903,13907,13913,&
&13919,13921,13927,13931,13933,13939,13943,13957,13961,13963,13967,13969,13973,13987,13991,13997,13999,14009,14011,14017,14023,14029,14033,14039,14041,14051,14057,14059,14071,14081,&
&14083,14087,14089,14093,14099,14101,14107,14111,14117,14123,14129,14137,14141,14143,14149,14153,14159,14167,14171,14173,14177,14191,14197,14207,14213,14219,14221,14227,14233,14237,&
&14239,14243,14249,14251,14257,14263,14269,14279,14281,14291,14293,14297,14299,14303,14309,14317,14321,14323,14327,14341,14347,14351,14353,14359,14363,14369,14381,14383,14387,14389,&
&14393,14401,14407,14411,14419,14423,14429,14431,14437,14447,14449,14453,14459,14461,14467,14471,14473,14477,14479,14489,14491,14501,14503,14507,14513,14519,14527,14533,14537,14543,&
&14549,14551,14557,14561,14563,14569,14579,14587,14591,14593,14603,14611,14617,14621,14627,14629,14633,14639,14647,14653,14657,14659,14669,14671,14681,14683,14687,14689,14699,14701,&
&14711,14713,14717,14719,14723,14731,14737,14741,14743,14747,14753,14759,14761,14767,14771,14779,14783,14789,14797,14801,14803,14809,14813,14821,14827,14831,14837,14843,14849,14851,&
&14857,14863,14867,14869,14873,14879,14881,14887,14891,14893,14897,14899,14909,14921,14923,14929,14933,14939,14941,14947,14951,14953,14957,14969,14977,14981,14983,14999,15007,15011,&
&15013,15017,15019,15023,15031,15047,15049,15053,15061,15073,15077,15079,15083,15089,15091,15097,15101,15107,15109,15121,15131,15133,15137,15139,15143,15149,15151,15157,15161,15163,&
&15167,15173,15179,15181,15187,15193,15199,15203,15209,15217,15221,15227,15229,15233,15241,15247,15251,15259,15263,15269,15271,15277,15283,15287,15289,15293,15299,15307,15311,15313,&
&15317,15319,15329,15331,15341,15343,15347,15349,15359,15361,15371,15373,15377,15383,15391,15397,15401,15403,15409,15413,15419,15427,15437,15439,15443,15451,15461,15467,15469,15473,&
&15479,15481,15487,15493,15497,15503,15511,15517,15523,15527,15529,15539,15541,15551,15553,15557,15559,15563,15569,15571,15577,15581,15583,15593,15599,15601,15607,15611,15619,15623,&
&15629,15637,15641,15643,15647,15649,15661,15667,15671,15677,15679,15683,15689,15703,15707,15709,15713,15721,15727,15731,15733,15737,15739,15749,15751,15761,15767,15773,15779,15781,&
&15787,15791,15793,15797,15803,15809,15811,15817,15823,15833,15839,15853,15857,15859,15863,15871,15877,15881,15887,15889,15893,15901,15907,15913,15919,15923,15929,15931,15937,15941,&
&15943,15947,15949,15959,15971,15973,15979,15989,15991,15997,16001,16007,16013,16019,16021,16031,16033,16039,16043,16057,16061,16063,16067,16069,16073,16087,16091,16097,16099,16103,&
&16109,16111,16117,16123,16127,16129,16139,16141,16147,16151,16153,16157,16169,16171,16183,16187,16189,16193,16199,16201,16207,16213,16217,16223,16229,16231,16241,16243,16249,16253,&
&16259,16267,16271,16273,16277,16279,16283,16297,16301,16307,16309,16319,16321,16327,16333,16337,16339,16343,16349,16351,16361,16363,16369,16381,16391,16397,16399,16403,16409,16411,&
&16417,16421,16427,16433,16439,16441,16447,16451,16453,16459,16463,16469,16477,16481,16483,16487,16493,16501,16507,16517,16519,16529,16531,16537,16543,16547,16553,16559,16561,16567,&
&16571,16573,16579,16589,16591,16603,16607,16609,16613,16619,16631,16633,16637,16649,16651,16657,16661,16663,16669,16673,16691,16693,16697,16699,16703,16711,16717,16721,16727,16729,&
&16733,16739,16741,16747,16759,16763,16769,16771,16777,16781,16787,16789,16799,16801,16811,16813,16817,16823,16829,16831,16837,16843,16847,16853,16859,16867,16871,16873,16879,16883,&
&16889,16897,16901,16903,16909,16921,16927,16931,16937,16943,16949,16957,16963,16967,16969,16979,16981,16987,16993,16997,16999,17009,17011,17021,17023,17027,17029,17033,17041,17047,&
&17051,17053,17057,17063,17071,17077,17081,17089,17093,17099,17107,17111,17113,17117,17119,17123,17131,17137,17141,17153,17159,17161,17167,17177,17179,17183,17189,17191,17197,17201,&
&17203,17207,17209,17219,17221,17231,17233,17239,17243,17249,17257,17261,17263,17267,17273,17279,17287,17291,17293,17299,17309,17317,17321,17323,17327,17333,17341,17351,17357,17359,&
&17363,17371,17377,17383,17387,17389,17393,17399,17401,17411,17417,17419,17429,17431,17441,17443,17447,17449,17453,17461,17467,17471,17473,17477,17483,17489,17491,17497,17503,17509,&
&17513,17519,17527,17531,17533,17539,17543,17551,17557,17561,17569,17573,17579,17581,17587,17593,17597,17599,17603,17609,17617,17621,17623,17627,17629,17639,17651,17653,17657,17659,&
&17663,17669,17671,17681,17683,17687,17701,17707,17711,17713,17723,17729,17737,17741,17747,17749,17753,17761,17767,17777,17779,17783,17789,17791,17803,17807,17813,17819,17821,17827,&
&17833,17837,17839,17851,17861,17863,17867,17869,17873,17879,17881,17887,17891,17893,17903,17909,17911,17917,17921,17923,17929,17933,17939,17947,17951,17957,17959,17971,17977,17981,&
&17987,17989,17993,17999,18001,18013,18017,18019,18023,18037,18041,18043,18047,18049,18059,18061,18071,18077,18079,18089,18091,18097,18101,18103,18107,18113,18119,18121,18127,18131,&
&18133,18143,18149,18157,18163,18167,18169,18173,18181,18191,18197,18199,18203,18209,18211,18217,18223,18229,18233,18241,18247,18251,18253,18257,18259,18269,18281,18283,18287,18289,&
&18299,18301,18307,18311,18313,18323,18329,18331,18341,18349,18353,18367,18371,18373,18377,18379,18383,18391,18397,18401,18407,18409,18413,18419,18427,18433,18437,18439,18443,18449,&
&18451,18457,18461,18463,18467,18479,18481,18493,18497,18503,18509,18511,18517,18521,18523,18527,18533,18539,18541,18547,18553,18559,18563,18569,18581,18583,18587,18589,18593,18607,&
&18611,18617,18619,18631,18637,18643,18647,18649,18653,18659,18661,18671,18673,18677,18679,18691,18701,18703,18709,18713,18719,18721,18727,18731,18737,18743,18749,18751,18757,18761,&
&18763,18769,18773,18779,18787,18791,18793,18797,18803,18817,18827,18829,18833,18839,18841,18847,18853,18857,18859,18869,18871,18877,18881,18883,18899,18901,18911,18913,18917,18919,&
&18923,18929,18937,18943,18947,18959,18961,18971,18973,18979,18983,18989,19001,19003,19007,19009,19013,19021,19027,19031,19037,19039,19043,19049,19051,19057,19067,19069,19073,19079,&
&19081,19087,19091,19093,19099,19109,19111,19121,19127,19133,19139,19141,19147,19153,19157,19163,19169,19171,19177,19181,19183,19189,19193,19199,19207,19211,19213,19219,19223,19231,&
&19237,19241,19247,19249,19259,19267,19273,19277,19289,19291,19297,19301,19303,19307,19309,19319,19321,19333,19337,19339,19343,19351,19361,19363,19367,19373,19379,19381,19387,19391,&
&19399,19403,19417,19421,19423,19427,19429,19433,19441,19447,19451,19457,19463,19469,19471,19477,19483,19489,19493,19499,19501,19507,19511,19517,19519,19529,19531,19541,19543,19549,&
&19553,19559,19561,19567,19571,19573,19577,19583,19589,19597,19601,19603,19609,19619,19627,19631,19633,19637,19639,19651,19661,19667,19673,19681,19687,19693,19697,19699,19703,19709,&
&19711,19717,19727,19729,19739,19741,19751,19753,19757,19759,19763,19769,19771,19777,19781,19783,19787,19793,19801,19807,19813,19819,19823,19829,19837,19841,19843,19847,19849,19853,&
&19861,19867,19871,19879,19883,19889,19891,19897,19907,19909,19913,19919,19927,19931,19933,19937,19939,19949,19951,19961,19963,19967,19969,19973,19979,19991,19993,19997,20003,20011,&
&20017,20021,20023,20029,20039,20047,20051,20057,20063,20071,20077,20081,20087,20089,20093,20099,20101,20107,20113,20117,20123,20129,20131,20143,20147,20149,20159,20161,20171,20173,&
&20177,20179,20183,20191,20197,20201,20203,20213,20219,20221,20227,20231,20233,20239,20243,20249,20257,20261,20263,20269,20281,20287,20291,20297,20299,20303,20309,20311,20323,20327,&
&20329,20333,20341,20347,20351,20353,20357,20359,20369,20381,20387,20389,20393,20399,20401,20407,20411,20413,20417,20429,20431,20437,20441,20443,20453,20459,20467,20473,20477,20479,&
&20483,20491,20497,20507,20509,20513,20519,20521,20533,20539,20543,20549,20551,20557,20561,20563,20567,20569,20591,20593,20597,20599,20609,20611,20617,20621,20623,20627,20633,20639,&
&20641,20651,20653,20659,20663,20677,20681,20687,20689,20693,20701,20707,20711,20717,20719,20723,20729,20731,20737,20743,20747,20749,20753,20759,20767,20771,20773,20777,20789,20791,&
&20803,20807,20809,20819,20821,20827,20831,20833,20837,20843,20849,20851,20857,20861,20863,20869,20873,20879,20887,20893,20897,20899,20903,20921,20927,20929,20939,20941,20947,20953,&
&20957,20959,20963,20971,20981,20983,20987,20989,21001,21011,21013,21017,21019,21023,21029,21031,21037,21041,21053,21059,21061,21067,21071,21079,21083,21089,21097,21101,21103,21107,&
&21113,21121,21127,21137,21139,21143,21149,21157,21163,21167,21169,21173,21179,21181,21187,21191,21193,21199,21209,21211,21221,21223,21227,21233,21239,21247,21251,21253,21257,21269,&
&21271,21277,21283,21289,21293,21299,21311,21313,21317,21319,21323,21331,21337,21341,21347,21349,21353,21361,21367,21377,21379,21383,21389,21391,21397,21401,21403,21407,21409,21419,&
&21421,21431,21433,21443,21449,21451,21457,21467,21473,21479,21481,21487,21491,21493,21499,21503,21509,21517,21521,21523,21529,21533,21547,21551,21557,21559,21563,21569,21577,21583,&
&21587,21589,21599,21601,21607,21611,21613,21617,21629,21631,21641,21643,21647,21649,21653,21661,21667,21673,21677,21683,21689,21691,21701,21709,21713,21719,21727,21731,21733,21737,&
&21739,21743,21751,21757,21761,21767,21773,21779,21781,21787,21793,21797,21799,21803,21809,21811,21817,21821,21823,21829,21839,21841,21851,21859,21863,21869,21871,21877,21881,21883,&
&21887,21893,21899,21907,21911,21913,21919,21929,21937,21941,21943,21947,21949,21953,21961,21971,21977,21979,21991,21997,22003,22007,22013,22019,22021,22027,22031,22037,22039,22049,&
&22051,22063,22067,22069,22073,22079,22081,22091,22093,22097,22103,22109,22111,22117,22123,22129,22133,22147,22151,22153,22157,22159,22163,22171,22177,22181,22189,22193,22199,22201,&
&22207,22213,22219,22223,22229,22237,22241,22247,22249,22259,22261,22271,22273,22277,22279,22283,22289,22291,22301,22303,22307,22313,22327,22331,22333,22339,22343,22349,22357,22361,&
&22367,22369,22381,22387,22391,22397,22403,22409,22411,22417,22423,22427,22433,22439,22441,22447,22453,22457,22459,22469,22471,22481,22483,22487,22489,22493,22499,22501,22507,22511,&
&22513,22523,22531,22537,22541,22543,22549,22553,22559,22567,22571,22573,22577,22579,22591,22597,22601,22609,22613,22619,22621,22637,22639,22643,22651,22657,22661,22663,22667,22669,&
&22679,22681,22691,22697,22699,22703,22709,22717,22721,22723,22727,22733,22739,22741,22747,22751,22753,22769,22777,22783,22787,22793,22801,22807,22811,22817,22819,22823,22829,22831,&
&22837,22843,22849,22853,22859,22861,22871,22873,22877,22879,22889,22901,22903,22907,22909,22921,22927,22931,22933,22937,22943,22949,22951,22961,22963,22969,22973,22987,22991,22993,&
&22999,23003,23011,23017,23021,23027,23029,23033,23039,23041,23047,23053,23057,23059,23063,23069,23071,23077,23081,23083,23087,23099,23113,23117,23119,23123,23129,23131,23137,23141,&
&23143,23147,23159,23161,23167,23171,23173,23183,23189,23197,23201,23203,23207,23209,23213,23227,23237,23239,23249,23251,23263,23267,23269,23273,23279,23281,23291,23293,23297,23299,&
&23311,23321,23323,23327,23329,23333,23339,23341,23347,23351,23357,23363,23369,23371,23377,23381,23383,23389,23393,23399,23407,23411,23417,23423,23431,23437,23447,23449,23453,23459,&
&23461,23467,23473,23477,23479,23483,23489,23497,23501,23503,23509,23519,23521,23531,23533,23537,23539,23549,23557,23561,23563,23567,23579,23581,23587,23591,23593,23599,23603,23609,&
&23623,23627,23629,23633,23641,23651,23657,23659,23663,23669,23671,23677,23687,23689,23693,23701,23707,23711,23713,23717,23719,23729,23731,23741,23743,23747,23753,23759,23761,23767,&
&23773,23783,23789,23791,23797,23801,23809,23813,23819,23827,23831,23833,23839,23843,23851,23857,23861,23867,23869,23873,23879,23887,23893,23897,23899,23909,23911,23917,23921,23923,&
&23927,23929,23939,23941,23951,23953,23957,23963,23971,23977,23981,23983,23987,23993,23999,24001,24007,24019,24023,24029,24041,24043,24047,24049,24053,24061,24067,24071,24077,24083,&
&24091,24097,24103,24107,24109,24113,24119,24121,24127,24131,24133,24137,24139,24149,24151,24161,24163,24169,24173,24179,24181,24187,24191,24197,24203,24209,24217,24221,24223,24229,&
&24239,24247,24251,24253,24257,24259,24263,24281,24287,24289,24293,24301,24307,24313,24317,24319,24329,24331,24337,24341,24347,24359,24361,24371,24373,24377,24379,24383,24389,24391,&
&24397,24403,24407,24413,24419,24421,24433,24439,24443,24449,24457,24461,24463,24467,24469,24473,24481,24487,24491,24499,24503,24509,24511,24517,24523,24527,24529,24533,24539,24547,&
&24551,24553,24559,24569,24571,24581,24587,24589,24593,24599,24601,24611,24613,24617,24623,24631,24637,24641,24643,24649,24653,24659,24667,24671,24677,24679,24683,24691,24697,24701,&
&24707,24709,24719,24721,24727,24733,24737,24743,24749,24751,24757,24763,24767,24769,24779,24781,24793,24797,24799,24803,24809,24811,24821,24823,24833,24839,24841,24847,24851,24853,&
&24859,24863,24877,24881,24883,24887,24889,24901,24907,24911,24917,24919,24923,24929,24931,24943,24949,24953,24961,24967,24971,24977,24979,24989,24991,25001,25007,25009,25013,25019,&
&25021,25027,25031,25033,25037,25043,25049,25057,25061,25063,25073,25079,25087,25093,25097,25099,25111,25117,25121,25127,25133,25139,25141,25147,25153,25159,25163,25169,25171,25177,&
&25183,25187,25189,25199,25211,25213,25217,25219,25229,25231,25237,25241,25243,25247,25253,25261,25271,25273,25279,25283,25297,25301,25303,25307,25309,25313,25321,25327,25331,25339,&
&25343,25349,25351,25357,25367,25369,25373,25379,25381,25387,25391,25393,25397,25409,25411,25423,25427,25429,25433,25439,25447,25451,25453,25457,25463,25469,25471,25477,25481,25483,&
&25489,25499,25507,25511,25513,25517,25523,25537,25541,25547,25549,25559,25561,25567,25573,25577,25579,25583,25589,25591,25601,25603,25607,25609,25621,25631,25633,25637,25639,25643,&
&25651,25657,25661,25667,25673,25679,25681,25687,25691,25693,25699,25703,25709,25717,25721,25723,25733,25741,25747,25757,25759,25763,25769,25771,25777,25783,25787,25789,25793,25799,&
&25801,25807,25811,25813,25819,25829,25841,25843,25847,25849,25853,25859,25867,25871,25873,25877,25889,25891,25897,25901,25903,25913,25919,25931,25933,25937,25939,25943,25951,25957,&
&25967,25969,25973,25979,25981,25997,25999,26003,26009,26011,26017,26021,26023,26027,26029,26041,26051,26053,26057,26063,26069,26071,26077,26083,26087,26093,26099,26101,26107,26111,&
&26113,26119,26123,26129,26137,26141,26149,26153,26161,26167,26171,26177,26179,26183,26189,26197,26203,26207,26209,26219,26227,26231,26233,26237,26239,26249,26251,26261,26263,26267,&
&26269,26281,26287,26291,26293,26297,26303,26309,26311,26317,26321,26329,26333,26339,26347,26353,26357,26359,26363,26371,26381,26387,26393,26399,26401,26407,26413,26417,26419,26423,&
&26431,26437,26441,26443,26447,26449,26459,26461,26471,26473,26479,26483,26489,26491,26497,26501,26503,26513,26519,26527,26531,26539,26549,26557,26561,26563,26567,26569,26573,26581,&
&26591,26597,26599,26603,26617,26623,26627,26629,26633,26639,26641,26647,26651,26657,26659,26669,26671,26681,26683,26687,26693,26699,26701,26707,26711,26713,26717,26723,26729,26731,&
&26737,26743,26749,26753,26759,26771,26773,26777,26779,26783,26791,26797,26801,26809,26813,26821,26827,26833,26837,26839,26843,26849,26857,26861,26863,26867,26869,26879,26881,26891,&
&26893,26899,26903,26909,26911,26921,26927,26933,26941,26947,26951,26953,26959,26963,26969,26977,26981,26987,26989,26993,27007,27011,27017,27019,27023,27029,27031,27037,27043,27047,&
&27059,27061,27067,27073,27077,27089,27091,27101,27103,27107,27109,27113,27119,27121,27127,27133,27143,27149,27151,27161,27163,27169,27173,27179,27187,27191,27193,27197,27199,27211,&
&27217,27221,27227,27229,27233,27239,27241,27253,27257,27259,27263,27271,27277,27281,27283,27289,27299,27301,27311,27317,27319,27323,27329,27331,27337,27341,27343,27347,27353,27359,&
&27361,27367,27371,27373,27383,27389,27397,27403,27407,27409,27413,27421,27427,27431,27437,27439,27449,27451,27457,27463,27473,27479,27481,27487,27491,27493,27497,27499,27509,27523,&
&27527,27529,27539,27541,27551,27553,27557,27563,27569,27571,27581,27583,27589,27593,27607,27611,27613,27617,27619,27623,27631,27637,27641,27647,27649,27653,27659,27661,27667,27673,&
&27679,27683,27689,27691,27697,27701,27707,27719,27721,27733,27737,27739,27743,27749,27751,27757,27761,27763,27767,27773,27779,27787,27791,27793,27799,27803,27809,27817,27821,27823,&
&27827,27829,27847,27851,27857,27869,27871,27877,27883,27887,27889,27893,27899,27901,27913,27917,27919,27931,27941,27943,27947,27949,27953,27959,27961,27967,27971,27977,27983,27991,&
&27997,28001,28003,28009,28013,28019,28027,28031,28033,28037,28043,28051,28057,28069,28073,28079,28081,28087,28097,28099,28103,28109,28111,28117,28121,28123,28129,28139,28141,28151,&
&28153,28157,28159,28163,28169,28177,28181,28183,28187,28199,28201,28207,28211,28213,28219,28229,28241,28243,28247,28253,28261,28267,28271,28277,28279,28283,28289,28291,28297,28307,&
&28309,28313,28319,28321,28331,28333,28337,28339,28349,28351,28361,28363,28367,28373,28381,28387,28393,28397,28403,28409,28411,28417,28421,28423,28429,28433,28439,28447,28451,28453,&
&28459,28463,28471,28477,28481,28487,28489,28493,28499,28507,28513,28517,28519,28529,28531,28537,28541,28543,28547,28549,28559,28571,28573,28577,28579,28583,28591,28597,28601,28603,&
&28607,28619,28621,28627,28631,28643,28649,28657,28661,28663,28667,28669,28673,28681,28687,28697,28703,28709,28711,28723,28727,28729,28733,28739,28741,28747,28751,28753,28757,28759,&
&28771,28781,28783,28789,28793,28799,28801,28807,28811,28813,28817,28823,28829,28837,28841,28843,28849,28859,28867,28871,28877,28879,28883,28891,28901,28907,28909,28913,28921,28927,&
&28933,28937,28939,28943,28949,28957,28961,28967,28969,28979,28981,28991,28993,28997,28999,29009,29011,29017,29021,29023,29027,29033,29039,29041,29047,29053,29059,29063,29069,29077,&
&29083,29087,29089,29093,29101,29111,29119,29123,29129,29131,29137,29143,29147,29149,29153,29167,29171,29173,29177,29179,29189,29191,29201,29203,29207,29209,29213,29219,29221,29231,&
&29233,29243,29251,29257,29261,29269,29273,29279,29287,29291,29297,29299,29303,29311,29317,29321,29327,29329,29333,29339,29347,29353,29357,29363,29369,29371,29377,29383,29387,29389,&
&29399,29401,29411,29413,29417,29423,29429,29431,29437,29441,29443,29453,29459,29461,29467,29473,29479,29483,29489,29501,29503,29507,29509,29521,29527,29531,29537,29539,29543,29551,&
&29563,29567,29569,29573,29581,29587,29591,29593,29597,29599,29609,29611,29621,29629,29633,29639,29641,29647,29651,29657,29663,29669,29671,29677,29681,29683,29693,29699,29707,29713,&
&29717,29719,29723,29737,29741,29747,29749,29753,29759,29761,29767,29773,29779,29789,29791,29797,29801,29803,29807,29819,29831,29833,29837,29839,29849,29851,29857,29863,29867,29873,&
&29879,29881,29891,29893,29899,29903,29917,29921,29923,29927,29929,29933,29941,29947,29951,29957,29959,29963,29969,29971,29977,29983,29987,29989,29993,29999,30001,30007,30011,30013

LET k=5760 !定数kの数
DIM A(k)
MAT READ A

LET t0=TIME
FOR w=2 TO 30013
   IF MOD(w,2)=0 THEN
      IF w=2 THEN PRINT w   ELSE
   ELSE
      FOR l=3 TO SQR(w) STEP 2
         IF MOD(w,l)=0 THEN EXIT FOR
      NEXT l
      IF l<=SQR(w) THEN  ELSE PRINT  w
   END IF
NEXT w

FOR n=1 TO 33 !100万までの素数
   FOR k=1 TO 5760
      LET p=30030*n+A(k)

      FOR i=17 TO SQR(p) STEP 2
         IF MOD(p,i)=0 THEN EXIT FOR
      NEXT i
      IF i<=SQR(p) THEN  ELSE PRINT  p

   NEXT k
NEXT n
PRINT TIME-t0;"秒で計算しました"

END

-------------------------------------------------------------
この設定で2から1021001までの素数列生成

精度確認も1021001(80050th prime)

算出結果をエクセルに貼りつけて確認しました。

下記のprogramは、素数階乗n +kの値と個数を求めるprogramです。


暫定版です。DATAリストを作成する時

360    PRINT k ! k定数プリント

 k;  とすると、半角スペースが2個残ってしまいます。

半角スペースが削除できれば完成です。方法がわかりません。
-----------------------------------------------------------------------------------------------
100 ! 素数階乗n +kの値と個数を求めるprogram
110 LET W=30030 !素数階乗を入力(素数階乗 6,30,210,2310,30030,510510,,,)
120 LET p=w
130 LET z=w
140 !   OPTION BASE 0   ! DIM文より手前の行にOPTION BASE 0を追加する。
150 DIM A(p)
160 DIM B(z)
170 LET t0=TIME
180 LET p=1           ! p の初期値を0とすると、初回 1になる。140の!を削除
190 LET z=1
200 FOR k=1 TO w STEP 2           !素数倍を代入
210    ! PRINT"----------------"
220    !  PRINT "k=+";k
230    FOR n=1 TO 20                !素数倍周期  何周でも可能
240       LET m=w*n+k             !素数倍を代入
250       FOR i=3 TO SQR(m)  STEP 2  !篩
260          IF MOD(m,i)=0 THEN 300
270       NEXT i
280       !   PRINT  m;"@";n
290       LET B(z)=m
300    NEXT n
310    IF B(z)=0 THEN 370
320    LET A(p)=p
330    LET p=p+1
340    LET z=z+1
350    !  PRINT"----------------";p;"個";k      ! k定数  kの個数
360    PRINT k ! k定数プリント
370 NEXT k
380 PRINT "----------------"
390 PRINT "k=-1から数えて";p;"個"      !  -1は出ません
400 PRINT TIME-t0;"秒で計算しました"
410 END

--------------------------------------------------------------------------

510510までは、算出結果を見ています。

510510n+k
k=-1から数えて 92160 個

30030*n+A(k)のDATAリストは、カンマ挿入はprogramで

半角スペースの削除は手動で行いました。


よろしくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 9月 1日(火)13時12分17秒
  > No.3817[元記事へ]

> 類題
> 正の整数a,b,c,dは、a<b<c<dとする。
> どの2つの数の和も平方数になるとき、a,b,c,dを求めよ。
>
> 実行結果
>  2  359  482  3362  19  22  58  29  61  62
>  8  1016  1288  3473  32  36  59  48  67  69
>    :
>    :


こちらの方が実用的です。


考察
・2つの数の和から復元
自然素u,v,w,x,y,zは、u<v<w<x<y<zとする。
2つの数の和は、1番目に小さい、2番目に小さい、2番目に大きい、1番目に大きいものは確定する。
すなわち、
 a+b=u^2
 a+c=v^2
 a+d=w^2, b+c=x^2 または a+d=x^2, b+c=w^2
 b+d=y^2
 c+d=z^2
となる。
a+d=w^2, b+c=x^2 のとき、
a+c=v^2, c+d=z^2より、a-d=v^2-z^2
これより、2a=w^2+(v^2-z^2), 2d=w^2-(v^2-z^2) ※aは正負が不明
c+d=z^2より、c=z^2-d
b+d=y^2より、b=y^2-d
b+c=x^2, a+b=u^2を確認する。

a+d=x^2, b+c=w^2 のとき、上記の式で、w,xを入れ替える。

・u,v,w,x,y,zの範囲
z=Zと固定する。
xの範囲は、
 a+b=u^2, c+d=Z^2より、a+b+c+d=u^2+Z^2=T
 a+d=w^2, b+c=x^2より、a+b+c+d=w^2+x^2 ∴T=w^2+x^2<2x^2 ∴T/2<x^2
 よって、√(T/2)<x≦Z-2
yの範囲は、X<y≦Z-1

a+c=v^2, b+d=y^2より、a+b+c+d=v^2+y^2 なので、v,wを求める。
(終り)



OPTION ARITHMETIC RATIONAL

FOR Z=6 TO 150
   FOR U=1 TO Z-5
      LET T=U^2+Z^2
      FOR X=INTSQR(T/2)+1 TO Z-2
         LET W=INTSQR(T-X^2)
         IF W^2+X^2=T THEN
            FOR Y=X+1 TO Z-1
               LET V=INTSQR(T-Y^2)
               IF V^2+Y^2=T THEN

                  LET A=(W^2+(V^2-Z^2))/2 !a+d=w^2とき
                  LET D=(W^2-(V^2-Z^2))/2
                  IF A>0 AND INT(A)=A AND INT(D)=D THEN !整数なら
                     LET B=Y^2-D
                     LET C=Z^2-D
                     IF B+C=X^2 AND A+B=U^2 THEN !残りの式を満たすか
                        PRINT A;B;C;D; U;V;W;X;Y;Z
                     END IF
                  END IF

                  LET A=(X^2+(V^2-Z^2))/2 !a+d=x^2のとき
                  LET D=(X^2-(V^2-Z^2))/2
                  IF A>0 AND INT(A)=A AND INT(D)=D THEN !整数なら
                     LET B=Y^2-D
                     LET C=Z^2-D
                     IF B+C=W^2 AND A+B=U^2 THEN !残りの式を満たすか
                        PRINT A;B;C;D; U;V;W;X;Y;Z
                     END IF
                  END IF

               END IF
            NEXT Y
         END IF
      NEXT X
   NEXT U
NEXT Z

END


実行結果
2  359  482  3362  19  22  29  58  61  62
8  1016  1288  3473  32  36  48  59  67  69
162  567  1282  4194  27  38  43  66  69  74
98  863  1346  5378  31  38  47  74  79  82
18  882  2482  4743  30  50  58  69  75  85
2  167  674  6722  13  26  29  82  83  86
98  1346  2018  5378  38  46  58  74  82  86
513  1008  1696  6048  39  47  52  81  84  88
305  1376  2720  5024  41  55  64  73  80  88
2  1022  2114  6722  32  46  56  82  88  94
792  1512  2457  6952  48  57  63  88  92  97
450  2466  3775  5634  54  65  78  79  90  97
407  3314  4082  5522  61  67  77  86  94  98
208  576  1728  8073  28  44  48  91  93  99
   :
   :
 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:しばっち  投稿日:2015年 9月 1日(火)21時49分7秒
  > No.3818[元記事へ]

たろささんへのお返事です。

> 暫定版です。DATAリストを作成する時
>
> 360    PRINT k ! k定数プリント
>
>  k;  とすると、半角スペースが2個残ってしまいます。
>
> 半角スペースが削除できれば完成です。方法がわかりません。

つまり下記のようなことでよろしいのでしょうか

PRINT "DATA ";
FOR I=1 TO 100
   IF MOD(I,10)>0 THEN
      PRINT STR$(I);",";
   ELSE
      PRINT STR$(I)
      IF I<100 THEN PRINT "DATA ";
   END IF
NEXT I
END

または

FOR I=1 TO 105
   IF A$="" THEN LET A$="DATA "
   LET A$=A$&STR$(I)&","
   IF MOD(I,10)=0 THEN
      LET A$=A$(1:LEN(A$)-1)
      PRINT A$
      LET A$=""
   END IF
NEXT I
PRINT A$(1:LEN(A$)-1)
END
 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:たろさ  投稿日:2015年 9月 3日(木)13時49分46秒
  > No.3820[元記事へ]

しばっちさんへのお返事です。

しばっちさんありがとうございました。

計算に夢中で、遅くなりました。
----------------------------------
自分なりに

SET MARGIN 700
PRINT USING "######%#":n,",";

算出後 自然数100行に半角スペースが残りす。
別のサイトで、半角スペースを削除して頂いて
手動入力で&を入れてDATA作成しました。

教えて頂いた方法の方が良いと思いました。

質問続きで申し訳ありません。

DATA kの値

DATA 素数

DATAを分けて読み込む場合なのですが

例として


DATA 1,2,3,4,5,6,7,8,9,10
DATA 11,12,13,14,15,16,17,18,19,20
DATA 21,22,23,24,25,26,27,28,29,30
DATA 31,32,33,34,35,36,37,38,39,40
DATA 41,42,43,44,45,46,47,48,49,50

LET k=50
DIM A(k)
MAT READ A


DATA 51,52,53,54,55,56,57,58,59,60
DATA 61,62,63,64,65,66,67,68,69,70
DATA 71,72,73,74,75,76,77,78,79,80
DATA 81,82,83,84,85,86,87,88,89,90
DATA 91,92,93,94,95,96,97,98,99,100

LET i=50
DIM B(i)
MAT READ B


FOR k=1 TO 50
   PRINT A(k)
NEXT k

FOR i=1 TO 50
   PRINT B(i)
NEXT i

END

こんな感じで宜しいでしょうか?


別件例
-------------------------------

篩の例
FOR l=3 TO SQR(w) STEP 2
         IF MOD(w,l)=0 THEN EXIT FOR
      NEXT l

昨日、わかったのですが SQR(x) と比べて、素数番号で

篩った方が、かなり計算回数を減らせる。

当たり前の事に気付くのが遅かったと思いました。

計算結果(AMD Athlon 64 3800+ 2.4GMHz)

510510n±k  FOR n=1 TO 20
-----------------------------------------
666988(Counter)
-----------------------------------------
10720679
6159.33 秒で計算しました(約1時間42分)
-----------------------------------------
510529 (42332nd prime)
10720679 (709319th prime)

709319-42332=666987

-----------------------------------------
510510*1-1=510509
510510*20+510491=10720691
10720691-510509=10210182
-----------------------------------------
n=1 周期の最大値のSQR(x)を取って、素数番号で篩ました。

IF MOD(w,p)=0 THEN EXIT FOR

10進
素数進

この方法があると、さらに処理速度が上がると思われます。

素数をDATAから読み込んで、一対一対応はわかりますが

SQR(x)に対応させる方法は、あるでしょうか。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:nagram  投稿日:2015年 9月 4日(金)22時08分22秒
  > No.3818[元記事へ]

たろささんへのお返事です。

これだけ膨大なデータをDATA文で制御するのは大変だと思います。ファイルを利用してはいかがでしょうか。PRINT文での出力はとても遅いので、ファイルに出力すれば10分の1の時間で終了します。
元のプログラムを多少変更しましたが、基本的なアルゴリズムは変えていません。

行番号削除可
100 ! 素数階乗n +kの値と個数を求めるprogram
    ASK DIRECTORY d$
    LET f_name1$="PRIME_BASE"   ! ファイル名
    LET f1$=d$&"\"&f_name1$&".txt"
    PRINT "ファイル保存場所[1] = ";f1$
    OPEN #1: NAME f1$
    ERASE #1
110 LET W=30030 !素数階乗を入力(素数階乗 6,30,210,2310,30030,510510,,,)
170 LET t0=TIME
180 LET p=1           ! p の初期値を0とすると、初回 1になる。140の!を削除
    PRINT #1: -1      ! ファイルの先頭に-1を出力
200 FOR k=1 TO w STEP 2           !素数倍を代入
210    ! PRINT"----------------"
220    !  PRINT "k=+";k
230    FOR n=1 TO 20                !素数倍周期  何周でも可能
240       LET m=w*n+k             !素数倍を代入
250       FOR i=3 TO SQR(m)  STEP 2  !篩
260          IF MOD(m,i)=0 THEN EXIT FOR
270       NEXT i
          IF i>SQR(m) THEN
280          !   PRINT  m;"@";n
             LET p=p+1
             !  PRINT"----------------";p;"個";k      ! k定数  kの個数
             PRINT #1: k ! k定数プリント
             EXIT FOR
          END IF
300    NEXT n
370 NEXT k
    CLOSE #1
380 PRINT "----------------"
390 PRINT "k=-1から数えて";p;"個"      !  -1は出ません
400 PRINT TIME-t0;"秒で計算しました"
410 END


REM 素数列生成プログラム
LET k9=5760 !定数kの数
DIM A(k9)
ASK DIRECTORY d$
LET f_name1$="PRIME_BASE"  ! ファイル名
LET f1$=d$&"\"&f_name1$&".txt"
PRINT "ファイル保存場所[1] = ";f1$
OPEN #1: NAME f1$ ,ACCESS INPUT
FOR i=1 TO k9
   INPUT #1: A(i)
NEXT i
CLOSE #1
LET f_name2$="PRIME_NUMBERS"  ! 素数列ファイル名
LET f2$=d$&"\"&f_name2$&".txt"
PRINT "ファイル保存場所[2] = ";f2$;"  素数列ファイル"
OPEN #2: NAME f2$
ERASE #2

LET t0=TIME
PRINT #2: 2   ! ファイルの先頭に2を出力
FOR w=3 TO 30013 STEP 2
   CALL prime_check(3,w)
NEXT w
FOR n=1 TO 33 !100万までの素数
   FOR k=1 TO k9
      CALL prime_check(17,30030*n+A(k))
   NEXT k
NEXT n
SUB prime_check(a,b)
   FOR i=a TO SQR(b) STEP 2
      IF MOD(b,i)=0 THEN EXIT SUB
   NEXT i
   PRINT #2: b
END SUB
CLOSE #2
PRINT TIME-t0;"秒で計算しました"
END

 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:しばっち  投稿日:2015年 9月 4日(金)22時24分13秒
  > No.3821[元記事へ]

たろささんへのお返事です。

> 篩の例
>  FOR l=3 TO SQR(w) STEP 2
>          IF MOD(w,l)=0 THEN EXIT FOR
>       NEXT l
>
> 昨日、わかったのですが SQR(x) と比べて、素数番号で
>
> 篩った方が、かなり計算回数を減らせる。
>
> n=1 周期の最大値のSQR(x)を取って、素数番号で篩ました。
>
> IF MOD(w,p)=0 THEN EXIT FOR
>
> 10進
> 素数進
>
> この方法があると、さらに処理速度が上がると思われます。
>
> 素数をDATAから読み込んで、一対一対応はわかりますが
>
> SQR(x)に対応させる方法は、あるでしょうか。


すみません。質問の意味がよくわからないです。
「素数番号」というのが対数積分 li(x)のことで、単にそれを求めたい
というのであれば、下記のプログラムで求めることができます。

https://ja.wikipedia.org/wiki/対数積分
https://ja.wikipedia.org/wiki/指数積分

!'INPUT Z
LET Z=10720679
PRINT LI(Z)
PRINT " 709533.461267678429779"
END

EXTERNAL  FUNCTION EI(Z) !'指数積分
LET EULER=.57721566490153286
LET S=LOG(Z)+EULER
LET A=1
FOR K=1 TO 1000
   LET A=A*Z/K
   LET S=S+A/K
   IF ABS(A)<1E-15 THEN EXIT FOR
NEXT K
LET EI=S
END FUNCTION

EXTERNAL  FUNCTION LI(Z) !'対数積分
LET LI=EI(LOG(Z))
END FUNCTION
 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:たろさ  投稿日:2015年 9月 4日(金)22時52分21秒
  > No.3823[元記事へ]

しばっちさんへのお返事です。

ありがとうございました。

> すみません。質問の意味がよくわからないです。
> 「素数番号」というのが対数積分 li(x)のことで、単にそれを求めたい
> というのであれば、下記のプログラムで求めることができます。


対数積分 li(x) のプログラム参考にします。


現在、下記のプログラムを作成中です。

DATA量が多いので、省略して書きます。
---------------------------------------------
DATA -1,1,19,23,29,31,37,41,中略 510491

LET k=92159 !定数kの数  kの個数
DIM A(k)
MAT READ A

DATA 19,23,29,31,37,41,43,中略 3571

LET i=493 ! 素数の個数
DIM B(i)
MAT READ B

LET t0=TIME

FOR n=1 TO 20       ! 510529 to 10720691 までの素数
   FOR k=1 TO 92159                 !kの個数
      LET p=510510*n+A(k)
      LET s=INT(SQR(p))

      FOR i=1 TO INT(s^0.7071067811+1480*s/30629-7)  !素数番号 19から数えて
         IF MOD(p,B(i))=0 THEN  200
      NEXT i
      PRINT  p

200    NEXT k
    NEXT n
    PRINT TIME-t0;"秒で計算しました"

END
--------------------------------------------------------

FOR n=1 TO 20  の限定範囲で、素数生成に成功しています。

n=20 以上に成ると合成数が出ます。

SQR(510510*n+A(k))の数値から、


素数 2 から数えて何番目と言う意味の素数番号です。

説明不足ですみませんでした。


http://blogs.yahoo.co.jp/donald_stinger

 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:たろさ  投稿日:2015年 9月 5日(土)00時37分13秒
  > No.3823[元記事へ]

しばっちさんへのお返事です。

重ねて、すみません。


> すみません。質問の意味がよくわからないです。
> 「素数番号」というのが対数積分 li(x)のことで、単にそれを求めたい
> というのであれば、下記のログラプムで求めることができます。


素数番号の意味を説明するために作成しました。
-----------------------------------------------
LET t0=TIME

LET c=9592  !素数の数  99991(9592)
DIM p(c)
LET P(1)=2  ! DIM 素数2を登録
LET c=2    ! DIMの番号
FOR x=3 TO 100000 STEP 2 !10万までの奇数列の篩
   FOR i=3 TO SQR(x) STEP 2      !奇数列を奇数列で篩
      IF MOD(x,i)=0 THEN 250
   NEXT i
   LET p(c)=x    ! DIM 素数3からを登録
   !  PRINT  p(c) !3~99991素数列プリント
   LET c=c+1
250 NEXT x

    FOR c=1 TO 1000 ! 素数番号 9592まで
       LET z=p(c)
       PRINT p(c); INT(LI(Z));c
    NEXT c

    PRINT TIME-t0;"秒で計算しました"
END

EXTERNAL  FUNCTION EI(Z) !'指数積分
    LET EULER=.57721566490153286
    LET S=LOG(Z)+EULER
    LET A=1
    FOR K=1 TO 1000
       LET A=A*Z/K
       LET S=S+A/K
       IF ABS(A)<1E-15 THEN EXIT FOR
    NEXT K
    LET EI=S
END FUNCTION

EXTERNAL  FUNCTION LI(Z) !'対数積分
    LET LI=EI(LOG(Z))
END FUNCTION
------------------------------------------------

PRINT p(c); INT(LI(Z));c
   素数  対数積分 素数番号


 おかげさまで助かりました。

プログラムは無事完成しました。

ありがとうございました。


http://blogs.yahoo.co.jp/donald_stinger

 

Re: 30030n±k 素数生成program 素数階乗n倍の確率的素数の探究

 投稿者:たろさ  投稿日:2015年 9月 5日(土)21時16分31秒
  > No.3822[元記事へ]

nagramさんへのお返事です。

驚くほど速かった。

最近、新しいパソコン購入計画中でしたが、延期しました。

>PRINT文での出力はとても遅いので、ファイルに出力すれば10分の1の時間で終了します。


PRINT文での出力

2 ~ 1021001  80050(Counter)
505.68 秒で計算しました
実験機 計算結果(AMD Athlon 64 3800+ 2.4GMHz)


素数列ファイル      117.38 秒で計算しました

10進BASIC 再起動後  37.56 秒で計算しました




私事ですが

ファイル出力で失敗する原因が今日、わかりました。

インスト時 C:\Program Files\Decimal BASIC\BASICw32\

HDD増設後、エクスプローラーで

E:\Program Files\Decimal BASIC\BASICw32\

移動しました。

今日まで、ファイル入出力は、なぜかUSBのメモリーだけ成功する。

HDDは、使えませんでした。問題は無事解決しました。

ありがとうございました。

パスの通し方はわかりません。素直にインストしました。

10進BASIC初心者なので、手探り状態です。


http://blogs.yahoo.co.jp/donald_stinger

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 9月 6日(日)09時40分45秒
  > No.3819[元記事へ]

問題 Self-describing numbers
10進法表記でk桁の正の整数nは、
最上位の数はnの中に現れる0の個数に等しく、
次の位の数はnの中に現れる1の個数に等しく、
同様に、
上から(p+1)桁目の数がnの中に現れるpの個数に等しくなるという。
このようなnを求めなさい。
例
1210, 2020


参考サイト http://oeis.org/A138480


考察
F[p]は、数字pの個数とする。
k桁の正の整数nは、F[0]F[1]F[2]…F[k-1](0≦p≦k-1)と表される。
F[0]は、最上位は0以外なので、1から9までの値を示す。
F[1]からF[9]は、0から9までの値を示す。
F[10]からF[k-1]は、10進法なので数字10から(k-1)まではないので、常に0である。
19桁以上では、0の個数が10以上になるので、題意を満たさなくなる。

また、Σ[i=0,k-1]F[i]=k(分割数)

最上位F[0]を固定して、0の個数とその桁位置で場合分けする。

・4桁の場合
F[0]=1の場合
 F[1],F[2],F[3]は、x0y, xy0が考えられる。
 1x0yのとき
  1201なら、不適となる。
  1102なら、不適となる。
 1xy0のとき
  1210なら、題意を満たす。
  1120なら、不適となる。
F[0]=2の場合
 F[1],F[2],F[3]は、020が考えられる。
 2020のとき、題意を満たす。
F[0]=3の場合
 F[1],F[2],F[3]は、000となって不適となる。
また、桁数が増えることになるので、F[0]が4から9までになることはない。
以上より、1210, 2020を得る。
(終り)

(簡易な)プログラムでは、
上記のような0の位置をうまく場合分けすることができないので、桁数kをk個の和で表す分割数を考える。
4桁の場合、4=2+2+0+0=2+1+1+0、それぞれを並び替えたものである。



LET M=18
DIM F(0 TO M-1) !各数字の個数
FOR K=1 TO M !桁数
   PRINT "K=";K
   FOR J=MAX(K-9,1) TO K-2 !最上位を固定する
      LET F(0)=J
      CALL try(1,K-J,K,F)
   NEXT J
NEXT K

END


EXTERNAL SUB try(P,T,K,F()) !バックトラック法で検索する
IF P=K-1 THEN !最下位なら
   LET F(P)=MIN(T,9)
   !!!MAT PRINT F; !debug

   DIM A(0 TO K-1) !作業用
   FOR i=0 TO K-1 !copy it
      LET A(i)=F(i)
   NEXT i
   FOR i=0 TO K-1 !数字を並べ替える
      LET W=F(i)
      IF A(W)=0 THEN EXIT FOR !個数が足りないので、うまく並べられない
      LET A(W)=A(W)-1
   NEXT i
   IF i>K-1 THEN !題意を満たす
      FOR i=0 TO K-1
         PRINT F(i);
      NEXT i
      PRINT
   END IF

   LET F(P)=0
ELSE
   IF P<10 THEN !F[p]を設定する ※分割数による
      FOR i=0 TO MIN(T,9) !数字0から9まで
         LET F(P)=i
         CALL try(P+1,T-i,K,F) !次へ
         LET F(P)=0
      NEXT i
   ELSE
      IF T=0 THEN
         FOR i=P TO K-2 !数字10以上
            LET F(i)=0
         NEXT i
         CALL try(K-1,0,K,F) !最下位へ
      END IF
   END IF
END IF
END SUB



実行結果

K= 1
K= 2
K= 3
K= 4
1  2  1  0
2  0  2  0
K= 5
2  1  2  0  0
K= 6
K= 7
3  2  1  1  0  0  0
K= 8
4  2  1  0  1  0  0  0
K= 9
5  2  1  0  0  1  0  0  0
K= 10
6  2  1  0  0  0  1  0  0  0
K= 11
7  2  1  0  0  0  0  1  0  0  0
K= 12
8  2  1  0  0  0  0  0  1  0  0  0
K= 13
9  2  1  0  0  0  0  0  0  1  0  0  0
K= 14
K= 15
K= 16
K= 17
K= 18


 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 9月 7日(月)19時06分52秒
  > No.3827[元記事へ]

> 問題 Self-describing numbers
> 10進法表記でk桁の正の整数nは、
> 最上位の数はnの中に現れる0の個数に等しく、
> 次の位の数はnの中に現れる1の個数に等しく、
> 同様に、
> 上から(p+1)桁目の数がnの中に現れるpの個数に等しくなるという。
> このようなnを求めなさい。
> 例
> 1210, 2020


別解です。昇順列の分割数から選出できるようです。


考察
F[p]は、数字pの個数とする。
k桁の正の整数n(数字の並び)は、F[0]F[1]F[2]…F[k-1](0≦p≦k-1)と表される。
F[0]は、最上位は0以外なので、1から9までの値を示す。
F[10]からF[k-1]は、10進法なので数字10から(k-1)まではないので、常に0である。
19桁以上では、0の個数が10以上になるので、題意を満たさなくなる。

また、Σ[i=0,k-1]F[i]=k(分割数)


F[0]からF[k-1]までは、桁数kの分割数(昇順列)を求める。ただし、F[0]を0に固定する。
F[0]F[1]F[2]…F[k-1]とみなして、数字の個数(A[])を数える。
同様に、A[0]A[1]A[2]…A[k-1]とみなして、数字の個数(B[])を数える。
A[]とB[]が同じなら題意を満たす。

・4桁の場合
桁数が増えることになるので、F[3]が4になることはない。
F[0],F[1],F[2],F[3]は、0013,0022,0112が考えられる。
 0013なら、2101さらに1210より不適となる。
 0022なら、2020さらに2020より題意を満たす。
 0112なら、1210さらに1210より題意を満たす。
以上より、1210, 2020を得る。


次の並びは一般的に題意を満たす。
k≧7のとき
(k-4)   2   1   0   0 … 0   1   0   0   0
              └ (k-7)個 ┘
(終り)



LET M=18
DIM F(0 TO M-1) !各数字の個数
FOR K=1 TO M !桁数
   PRINT "K=";K
   LET W=MAX(K-9,1) !0は少なくとも1つ
   FOR J=0 TO W-1 !F[10]以降を考慮する
      LET F(J)=0
   NEXT J
   IF K>1 THEN CALL try(W,K,K,F)
NEXT K

END


EXTERNAL SUB try(P,T,K,F()) !バックトラック法で検索する
IF P=K-1 THEN !最下位なら
   IF F(P-1)<=T AND T<K THEN !昇順列にする
      LET F(P)=T
      !!!MAT PRINT F; !debug

      DIM A(0 TO K-1),B(0 TO K-1) !作業用
      MAT A=ZER
      FOR i=0 TO K-1 !数字の個数を数える
         LET W=F(i)
         LET A(W)=A(W)+1
      NEXT i
      MAT B=ZER
      FOR i=0 TO K-1 !再度、数字の個数を数える
         LET W=A(i)
         LET B(W)=B(W)+1
      NEXT i
      FOR i=0 TO K-1 !一致する
         IF NOT(A(i)=B(i) AND A(i)<10) THEN EXIT FOR
      NEXT i
      IF i>K-1 THEN !題意を満たす
         FOR i=0 TO K-1
            PRINT A(i);
         NEXT i
         PRINT
      END IF

      LET F(P)=0
   END IF
ELSE
   FOR i=F(P-1) TO T !昇順列で分割数を得る
      LET F(P)=i
      CALL try(P+1,T-i,K,F)
      LET F(P)=0
   NEXT i
END IF
END SUB



実行結果

K= 1
K= 2
K= 3
K= 4
2  0  2  0
1  2  1  0
K= 5
2  1  2  0  0
K= 6
K= 7
3  2  1  1  0  0  0
K= 8
4  2  1  0  1  0  0  0
K= 9
5  2  1  0  0  1  0  0  0
K= 10
6  2  1  0  0  0  1  0  0  0
K= 11
7  2  1  0  0  0  0  1  0  0  0
K= 12
8  2  1  0  0  0  0  0  1  0  0  0
K= 13
9  2  1  0  0  0  0  0  0  1  0  0  0
K= 14
K= 15
K= 16
K= 17
K= 18


 

n!の末尾の0の個数

 投稿者:山中和義  投稿日:2015年 9月 9日(水)15時03分28秒
  問題
1!×2!×3!×4!× … ×100!を計算したとき、末尾の0の個数を求めなさい。

答え
5の倍数と5^2の倍数のそれぞれの個数を数える。
100!には、[100÷5]=20、[20÷5]=4なので、20+4=24個
他の階乗についても同様に、
5の倍数は、
 1!から4!までは、0個ずつ
 5!から9!までは、1個ずつ
 10!から14!までは、2個ずつ
 15!から19!までは、3個ずつ
  :
 95!から99!までは、19個ずつ
5^2の倍数は、
 1!から24!までは、0個ずつ
 25!から49!までは、1個ずつ
 50!から74!までは、2個ずつ
 75!から99!までは、3個ずつ
よって、
5×(1+2+3+ … +19) + 5^2×(1+2+3) + 24 = 5×190 + 5^2×6 + 24 = 1124 個
(終り)


LET S=0
FOR N=1 TO 100 !シミュレーション
!!!PRINT N;F(N) !debug
   LET S=S+F(N)
NEXT N
PRINT S

END

EXTERNAL FUNCTION F(N) !n!の末尾の0の個数
LET T=0 ![N/5]+[N/5^2]+[N/5^3]+ …
DO WHILE N>=5
   LET N=INT(N/5)
   LET T=T+N
LOOP
LET F=T
END FUNCTION

 

多元方程式を解く方法

 投稿者:島村1243  投稿日:2015年 9月12日(土)19時47分19秒
  次のような問題を解くプログラムを知りたいのですが、お分かりになりましたらご教示お願いします。

<条件>
1)i=1,2,3,...N(多くても100程度)
2)⊿は未知定数で、C(i)=⊿*(i-1)
3){x(i),y(i)}は、x-y直交座標上の点を表す未知座標で、
x軸上の既知定点{A,0}を中心とする既知半径Rの円周上に在り
   (x(i)-A)^2+y(i)^2=R^2
を満たす。
4){B,0}はx軸上に在る既知定点の座標。
5)Q1,Q2は既知定数
6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。
7)θ(1)+θ(2)+θ(3)+...θ(N)=2*PIを満たす。

上記条件を満たす⊿と{x(i),y(i)}或いはθ(i)を求める。
 

Re: 多元方程式を解く方法

 投稿者:山中和義  投稿日:2015年 9月13日(日)19時02分29秒
  > No.3830[元記事へ]

島村1243さんへのお返事です。

> <条件>
> 6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。


i=1のとき、Δで調整できないので、これを満たさないと思います。

このi=1の上記の条件を除いて、N=2ときはすべてが満たすと思います。


プログラムは、

0≦θ[1]≦θ[2]≦ … ≦θ[n]とする。
2π=θ[1]+θ[2]+ … +θ[n]≧nθ[1]より、2π/n≧θ[1]
2π-θ[1]=θ[2]+ … +θ[n]≧(n-1)θ[2]より、(2π-θ[1])/(n-1)≧θ[2]
2π-(θ[1]+θ[2])=θ[3]+ … +θ[n]≧(n-2)θ[3]より、(2π-(θ[1]+θ[2]))/(n-2)≧θ[3]
   :
   :
として、不定方程式を解く。
th[i]を0.25°ずつ変化させて、x[i],y[i]を求めて、
そのときの各Δ[i]で、Δ[2]≒Δ[3]≒ … ≒Δ[N]となるものを探し出す。


PUBLIC NUMERIC x(100),y(100)
PUBLIC NUMERIC N, A,B,R,Q1,Q2
LET N=3 !2以上
LET A=5 !既知定数
LET B=1
LET R=2
LET Q1=2
LET Q2=3
DIM th(N) !θ[i]
FOR t=0 TO 360/N STEP 0.25 !※調整が必要である
   LET th(1)=t
   LET x(1)=A+R*COS(RAD(t))
   LET y(1)=  R*SIN(RAD(t))
   !!IF ABS( Q1*(x(1)-A)+R*Q2*COS(ANGLE(x(1)-B,y(1))) )<1E-4 THEN !※調整が必要である
   CALL try(2,360-t, th)
   !!END IF
NEXT t
END

EXTERNAL SUB try(i,s, th()) !2π=θ[1]+θ[2]+ … +θ[n]
IF i=N THEN
   LET th(N)=s

   LET x(N)=A+R*COS(RAD(s))
   LET y(N)=  R*SIN(RAD(s))

   LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
   LET d=( Q1*COS(RAD(s))+Q2*COS(ANGLE(x(N)-B,y(N))) )/(N-1)
   IF ABS(d-d2)<1E-4 THEN !※調整が必要である
      PRINT "Δ=";d2 !解を表示する
      FOR K=1 TO N
         PRINT K;th(K);x(K);y(K)
      NEXT K
      PRINT
   END IF
ELSE
   FOR t=th(i-1) TO s/(N-i+1) STEP 0.25 !※調整が必要である
      LET th(i)=t

      LET x(i)=A+R*COS(RAD(t))
      LET y(i)=  R*SIN(RAD(t))

      IF i>2 THEN
         LET OK=0
         LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
         LET d=( Q1*COS(RAD(t))+Q2*COS(ANGLE(x(i)-B,y(i))) )/(i-1)
         IF ABS(d-d2)<1E-4 THEN LET OK=1 !※調整が必要である
      ELSE
         LET OK=1
      END IF
      IF OK<>0 THEN CALL try(i+1,s-t, th)
   NEXT t
END IF
END SUB


 

Re: 多元方程式を解く方法

 投稿者:島村1243  投稿日:2015年 9月14日(月)05時51分14秒
  山中和義さんへのお返事です。

> 島村1243さんへのお返事です。
>
> > <条件>
> > 6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。
>
> i=1のとき、Δで調整できないので、これを満たさないと思います。
> このi=1の上記の条件を除いて、N=2ときはすべてが満たすと思います。
>
> プログラムは、

山中さん、明解なご教示有り難うございます。
早速、お教え頂いたプログラムを試させて頂きます。
 

ある種の方程式

 投稿者:永野護  投稿日:2015年 9月15日(火)16時23分2秒
  a,b,cを整数とするとき方程式a*x^2+b*y^2=c*z^2が整数解を持つためには
a,b,cはいかなる数であるべきか。
この問題はどのように解けばよいのでしょうか。
ご教示のほどよろしくお願いします。
 

Re: ある種の方程式

 投稿者:GAI  投稿日:2015年 9月15日(火)22時24分12秒
  > No.3833[元記事へ]

永野護さんへのお返事です。

> a,b,cを整数とするとき方程式a*x^2+b*y^2=c*z^2が整数解を持つためには
> a,b,cはいかなる数であるべきか。
> この問題はどのように解けばよいのでしょうか。
> ご教示のほどよろしくお願いします。


(x,y,z)=(m,n,p)を解に持たせるようにa0,b0,c0を次のように決める。
a0=1/u^2+n/(2*n*u*v-m*v^2)
b0=1/v^2+m/(2*m*u*v-n*u^2)
c0=(a0*m^2+b0*n^2)/p^2
ここにu,vは任意の整数

<確認>
(x,y,z)=(2,3,5)を解に持たせるときは
u=4,v=11(任意に選択した。)
このとき
a0=35/176,b0=185/7744,c0=313/7744より
35/176*x^2+185/7744*y^2=313/7744*z^2
とし、分母を払って
1540*x^2+185*y^2=313*z^2
よって
a=1540
b=185
c=313 なる整数を選べば

確かに
1540*2^2+185*3^2=1540*4+185*9=7825
一方
313*5^2=313*25=7825
で
a*x^2+b*y^2=c*z^2
の解は(x,y,z)=(2,3,5)を満たしている。


これは一般に
a*x^2+b*x*y+c*y^2=d*z^2
の解を
(x,y,z)=(m,n,p)とするなら
a*x^2+b*x*y+c*y^2-d*p^2
=(a*m^2+b*m*n+c*n^2-d*p^2)(a*u^2+b*u*v+c*v^2)^2
という等式が,u,vを任意の整数として
x=(a*m+b*n)*u^2+2*c*n*u*v-c*m*v^2
y=-a*n*u^2+2*a*m*u*v+(b*m+c*n)*v^2
z=p*(a*u^2+b*u*v+c*v^2)
をパラメータ解として持つ。



このことを元にしてa,b,cの構成式を作りました。

もちろん(x,y,z)=(2,3,5)位なら
4a+9b=25c
から
(a,b,c)=(1,19,7),(2,13,5),(3,7,3),(4,1,1),(5,20,8),(7,8,4),・・・
など山ほど探せますが
(x,y,z)=(123,456,789)位になるとこの手法はなかなか見つけるのは困難だと思われます。
上記の式を用いてu,vを適当に選べば
例えば(u,v)=(2,11)なら
531205123735x^2+66862144681y^2=35243227511z^2
(u,v)=(1,2)なら
10306181x^2+28151783y^2=9653797z^2
とかなり大きな係数でも作り出すことができます。


 

ヨセフスの問題

 投稿者:山中和義  投稿日:2015年 9月16日(水)09時25分2秒
  問題 2009年 開成中学
1,2,3,…,nの数が1つずつ書かれたn枚のカードを時計回りに数の小さい順に円形に並べます。
次の規則にしたがって、カードを1枚ずつ取り除いていくとき、最後に残るカードがどれであるかを考えます。
・まず、1の書かれたカードを取り除く。
・あるカードを取り除いたら、次に、そのカードから時計回りに数えて2枚目のカードを取り除く。
これをカードが1枚だけ残るまで繰り返す。
(1) n=8とき、最後に残るカードに書かれた数を答えなさい。
(2),(3),(4)は省略
(5) n=2009のとき、最後に残るカードに書かれた数を答えなさい。

答え
(1) 8 ※n=2^kのとき、2^kが残る
(5) 2009=1024+985より、985枚を取り除いたら残り1024(=2^10)枚なので、
 985×2+1=1971が1に相当すると考えて、その1つ前の1970が残る。


LET N=8 !2009
LET T=1 !n≦2^k
DO WHILE T<N
   LET T=T*2
LOOP
PRINT 2*N-T
END


シミュレーションによる

LET N=8 !2009 !石の個数 ※
DIM A(0 TO N-1) !連番が付いた石
MAT A=ZER
LET P=2 !1つ飛ばし ※
LET i=0 !最初に取り除く石の番号 0~(n-1) ※
LET S=P-1
LET T=0 !取り除いた石の個数
DO WHILE T<N
   IF A(i)=0 THEN !石があるなら
      LET S=MOD(S+1,P) !(p-1)個飛ばし
      IF S=0 THEN !この石を取り除く
         PRINT i+1 !debug
         LET A(i)=1
         LET T=T+1
      END IF
   END IF
   LET i=MOD(i+1,N) !次の石を探す ※
LOOP
END




類題 ヨセフスの問題、継子立ての問題
200枚のカードが1から順に並んで束ねられています。
1番上のカードを1番下に持っていき、次のカードを捨てるという作業を繰り返したとき、
最後に残るカードは何番か答えなさい。

答え
n=2^kのとき、残るのは1が書かれたカードである。
200-72=128=2^7なので、1に相当するのは、72×2+1=145


LET N=200
LET T=1 !n≦2^k
DO WHILE T<N
   LET T=T*2
LOOP
PRINT 2*N-T+1

PRINT

!その2
LET B$=BSTR$(N,2) !2進法表記
PRINT B$
LET S$=RIGHT$(B$,LEN(B$)-1) & "1" !最上位の1を最下位へ ※2N-T+1に相当する
PRINT S$
PRINT BVAL(S$,2)

END

 

ある種の方程式

 投稿者:永野護  投稿日:2015年 9月16日(水)11時38分10秒
  GAI氏のご教示に感謝いたします。
ありがとうございました。
 

Re: ヨセフスの問題

 投稿者:山中和義  投稿日:2015年 9月17日(木)09時38分31秒
  > No.3835[元記事へ]

> ヨセフスの問題

直線状に並べた場合

http://oeis.org/A090569

k=1,2,3,4,…とする。
p=2のとき、nが2k-1と2kの値は同じになる。


シミュレーションによる

LET N=2015 !石の個数 ※
DIM A(N) !連番が付いた石
MAT A=ZER
LET P=2 !1つ飛ばし ※
LET i=P !最初に取り除く石の番号 ※
LET S=P-1
LET D=1 !方向 ±1
LET T=0 !取り除いた石の個数
DO WHILE T<N-1
   IF A(i)=0 THEN !石があるなら
      LET S=MOD(S+1,P) !(p-1)個飛ばし
      IF S=0 THEN !この石を取り除く
         PRINT i !debug
         LET A(i)=1
         LET T=T+1
      END IF
   END IF
   IF (D<0 AND i=1) OR (D>0 AND i=N) THEN !折り返す
      LET D=-D
      IF S>0 THEN LET S=S-1
   ELSE
      LET i=i+D !次の石を探す
   END IF
LOOP
FOR i=1 TO N !残った石を探す
   IF A(i)=0 THEN PRINT i;
NEXT i
PRINT
END


 

Re: ヨセフスの問題

 投稿者:山中和義  投稿日:2015年 9月17日(木)13時37分44秒
  > No.3837[元記事へ]

> ヨセフスの問題
> シミュレーション

●環状に並べた場合

・カード操作によるシミュレーション
上から順に1,2,3,…,nと並べた1束のカードを手元にとる。
1,2,1,2,…と数えながら、束の上からカードを1枚ずつ取っていく。
1にあたるカードは束の1番下にもっていき、2にあたるカードは捨てる。
これを繰り返す。
求める番号は、最後に残るカードである。


データ構造は、1つのキューになる。

初期の並び
    ────────────────
→┬→  12 11 10 9 8 7 6 5 4 3 2 1   →┬→
 ↑  ────────────────  ↓
 │                    │
 └────────────────────┘
1周目
    ────────────────
→┬→  11 9 7 5 3 1          →┬→ 12 10 8 6 4 2
 ↑  ────────────────  ↓
 │                    │
 └────────────────────┘
2周目
    ────────────────
→┬→   9 5 1             →┬→ 11 7 3
 ↑  ────────────────  ↓
 │                    │
 └────────────────────┘
3周目
    ────────────────
→┬→   9 1              →┬→ 5
 ↑  ────────────────  ↓
 │                    │
 └────────────────────┘
4周目
    ────────────────
→┬→   9               →┬→ 1
 ↑  ────────────────  ↓
 │                    │
 └────────────────────┘


DECLARE EXTERNAL SUB q.enQ, q.deQ
DECLARE EXTERNAL FUNCTION q.count

LET N=12 !石の個数 ※
LET P=2 !1つ飛ばし ※
LET S=0

FOR X=1 TO N !環状に並べる
   CALL q.enQ(X)
NEXT X

DO WHILE q.count>0
   CALL q.deQ(X)
   LET S=MOD(S+1,P) !(p-1)個飛ばし
   IF S=0 THEN !この石を取り除く
   ELSE
      PRINT X
      CALL q.enQ(X)
   END IF
LOOP

END


MODULE q !キュー
SHARE NUMERIC Q(0 TO 5000) !格納領域
SHARE NUMERIC T,B !ポインタ
LET T=0 !先頭
LET B=0 !末尾
PUBLIC FUNCTION count
EXTERNAL FUNCTION count !個数を返す
   LET count=MOD(B-T,5000+1)
END FUNCTION
PUBLIC SUB enQ,deQ
EXTERNAL SUB enQ(X) !入れる
   LET Q(B)=X
   LET B=MOD(B+1,5000+1)
END SUB
EXTERNAL SUB deQ(X) !取り出す
   LET X=Q(T)
   LET T=MOD(T+1,5000+1)
END SUB
END MODULE




●直線状に並べた場合

・カード操作によるシミュレーション
上から順に1,2,3,…,nと並べた1束のカードを机に置く。
1,2,1,2,…と数えながら、束の上からカードを1枚ずつ取っていく。
1にあたるカードは隣に積んでいき新しい束をつくり、2にあたるカードは手元に取る。
これを繰り返す。
求める番号は、最後に残るカードである。


データ構造は、2つのスタックになる。

 ┌────────────────  │
s1│12 11 10 9 8 7 6 5 4 3 2 1    ←┘
 │                 ─┐
 └────────────────  │
 ┌────────────────  │
s2│1 3 5 7 9 11           ←┘
 │                 ─┐
 └────────────────  │
 ┌────────────────  │
s1│11 7 3              ←┘
 │                 ─┐
 └────────────────  │
 ┌────────────────  │
s2│3 11               ←┘
 │                 ─┐
 └────────────────  │
 ┌────────────────  │
s1│11                ←┘
 │
 └────────────────


DECLARE EXTERNAL SUB s1.push, s1.pop
DECLARE EXTERNAL FUNCTION s1.count
DECLARE EXTERNAL SUB s2.push, s2.pop
DECLARE EXTERNAL FUNCTION s2.count

LET N=12 !石の個数 ※
LET P=2 !1つ飛ばし ※
LET S=0
LET T=0 !取り除いた石の個数

FOR X=N TO 1 STEP -1 !1列に並べる
   CALL s1.push(X)
NEXT X
FOR K=1 TO N*N !p=2のとき、n≧2^k ※半分ずつ減っていく
   PRINT "K=";K !奇数は「行き」、偶数は「帰り」

   IF MOD(K,2)<>0 THEN LET C=s1.count ELSE LET C=s2.count
   DO WHILE C>0
      IF MOD(K,2)<>0 THEN CALL s1.pop(X) ELSE CALL s2.pop(X)
      LET S=MOD(S+1,P) !(p-1)個飛ばし
      IF S=0 THEN !この石を取り除く
         LET T=T+1
         IF T=N-1 THEN EXIT FOR !残り1個なら
      ELSE
         PRINT X; !スタックの底から
         IF MOD(K,2)<>0 THEN CALL s2.push(X) ELSE CALL s1.push(X)
      END IF
      IF MOD(K,2)<>0 THEN LET C=s1.count ELSE LET C=s2.count !次へ
   LOOP
   PRINT

   IF S>0 THEN LET S=S-1 !折り返す
NEXT K

END


MODULE s1 !スタック
SHARE NUMERIC STK(5000) !格納領域
SHARE NUMERIC SP !スタック・ポインタ
LET SP=0
PUBLIC FUNCTION count
EXTERNAL FUNCTION count !個数を返す
   LET count=SP
END FUNCTION
PUBLIC SUB push,pop
EXTERNAL SUB push(X) !入れる
   LET SP=SP+1
   LET STK(SP)=X
END SUB
EXTERNAL SUB pop(X) !取り出す
   LET X=STK(SP)
   LET SP=SP-1
END SUB
END MODULE

MODULE s2 !スタック
SHARE NUMERIC STK(5000) !格納領域
SHARE NUMERIC SP !スタック・ポインタ
LET SP=0
PUBLIC FUNCTION count
EXTERNAL FUNCTION count !個数を返す
   LET count=SP
END FUNCTION
PUBLIC SUB push,pop
EXTERNAL SUB push(X) !入れる
   LET SP=SP+1
   LET STK(SP)=X
END SUB
EXTERNAL SUB pop(X) !取り出す
   LET X=STK(SP)
   LET SP=SP-1
END SUB
END MODULE




数理マジックに使えるかな!?

 

Re: ヨセフスの問題

 投稿者:GAI  投稿日:2015年 9月17日(木)15時35分58秒
  > No.3837[元記事へ]

山中和義さんへのお返事です。

> > ヨセフスの問題

円形に並べた場合と直線に並べた場合のプログラム有り難うございます。
たまたま
n=2015(個)をp=4(3つ飛ばし)でスタートも4番目の石から取り出すことで調べていたら
円形も直線も共に最後に1522の石が残ることになりました。
これって偶然でしょうがとても興味が涌きました。
そこで円形にも直線にも並べて最後のものが一致する(n,p)の組合せを見つけるプログラムを作って頂けませんか?
ただし共にスタートで取り出す石はp番目の石からとします。

今のところn<=100
を出力して、目をしばしばさせながら探したら
n=19のp=3で17残り
n=34のp=4で22残り
n=77のp=4で34残り
があるようです。
 

Re: ヨセフスの問題

 投稿者:山中和義  投稿日:2015年 9月17日(木)19時25分15秒
  > No.3839[元記事へ]

GAIさんへのお返事です。

> そこで円形にも直線にも並べて最後のものが一致する(n,p)の組合せを見つけるプログラムを作って頂けませんか?

> 今のところn<=100
> を出力して、目をしばしばさせながら探したら
> n=19のp=3で17残り
> n=34のp=4で22残り
> n=77のp=4で34残り
> があるようです。


環状の場合は、数理的処理(ヨセフス数)が可能です。
直線の場合は、現状、数理的処理がわかりませんので、シミュレーションさせます。

f(n,1)=nは自明です。


DIM A(5000) !連番が付いた石
FOR N=1 TO 100 !石の個数 ※
   FOR P=2 TO N

      MAT A=ZER
      LET i=P !最初に取り除く石の番号
      LET S=P-1
      LET D=1 !方向 ±1
      LET T=0 !取り除いた石の個数
      DO WHILE T<N-1
         IF A(i)=0 THEN !石があるなら
            LET S=MOD(S+1,P) !(p-1)個飛ばし
            IF S=0 THEN !この石を取り除く
            !!!PRINT i !debug
               LET A(i)=1
               LET T=T+1
            END IF
         END IF
         IF (D<0 AND i=1) OR (D>0 AND i=N) THEN !折り返す
            LET D=-D
            IF S>0 THEN LET S=S-1
         ELSE
            LET i=i+D !次の石を探す
         END IF
      LOOP
      FOR i=1 TO N !残った石を探す
         IF A(i)=0 THEN EXIT FOR
      NEXT i
      IF i=josephus(N,P,N) THEN PRINT N;P;i !一致するなら

   NEXT P
NEXT N

END

EXTERNAL FUNCTION josephus(N,S,K) !ヨセフス数(Josephus Number)
LET ret=S*K
DO WHILE ret>N
   LET ret=INT( ((ret-N)*S-1)/(S-1) )
LOOP
LET josephus=ret
END FUNCTION


 

ヨセフス問題のマジックへの応用

 投稿者:GAI  投稿日:2015年 9月18日(金)11時32分41秒
  ヨセフス問題(環状配列)でn=12(個)でのp(2<=p<=13)の変化を調べたら
最後に残る番号kの組合せが
(p,k);
(2,9)
(3,10)
(4,1)
(5,1)
(6,3)
(7,12)
(8,5)
(9,2)
(10,5)
(11,6)
(12,11)
(13,8)
となった。
そこで12枚を時計の文字版の位置に配置するようにして
文字盤の各時刻に次のカード(黒文字)を配置する。
1時:8か10
2時:
3時:6
4時:9
5時:4か5
6時:(将来客が選んだカードをこの位置に仕込む)
7時:
8時:3
9時:2
10時:13
11時:
12時:11

次に、空きの時刻の位置には、12時と6時を結ぶラインに対称に
黒色で置かれた数字と同じ数字の赤色カードを配置する。

即ち
1時:8か10
2時:⑬
3時:6
4時:9
5時:4か5
6時:(将来客が選んだカードをこの位置に仕込む)
7時:④か⑤
8時:3
9時:2
10時:13
11時:⑧か⑩
12時:11(⑪でもよい。)
○記号は赤色を示す。



こうすれば、黒色のカードがある位置からその数字で指定される取り方で時計回りに
カードを進めば6時位置のカードが最後に残り、
赤色のカードがあるところからは、反時計回りにカードをヨセフス方法で取り除いていくと
最後に6時位置のカードが最後に残る。
(開いたカードの次から数え始め、その数字に対応するカードを取り除く。)

この原理を利用すると
カード配列が例えば(覚えやすいように変化させた。)
④
3
⑥
13
⑧
11
の6枚をデックのトップ側に
$(ジョーカー)
8
⑬
6
③
4
の6枚をボトム側にセットした計53枚のトランプ一揃いを準備しておく。(○印は赤色)

1.ケースからデックを取り出し、トップ6枚、ボトム6枚が乱れない程度にリフルシャッフルする。

2.両手でデックを広げて、客に中程から一枚カード引かせて覚えて貰う。

3.カードをデックのトップに戻して貰い何回かカットする。(客にさせてもかまわない。)

4.デックを表向きに持ち、両手でファンに開いて行きジョーカーを探し出しこのカードが表向きでトップの位置になるようデックをカットし(右手に集まったパケットを左手のパケットの下へ入れることになる。)
テーブルにこのジョーカーを出す。

5.そのままデックを裏向きに持ち直す。(このとき上から6枚目に客のカードがある。)
 上から一枚ずつ時計の文字盤の1時の位置に相当する配置から、12時までを配る。

6.6時のカード以外ならどのカードを選ばせても、そこで現れる数字に従って黒色なら
 時計回りで、赤色なら反時計回りでカードを除いて行くと必ず最後に6時の位置のカード
 が残り客が選んでいたカードが出現する。

 

単位分数の和で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を求めよ。

参考サイト http://oeis.org/A002966


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

と改修する。

 

数列を表示する

 投稿者:山中和義  投稿日:2015年 9月21日(月)13時19分48秒
  次の数列を表示するプログラムをつくりなさい。

(1) 1,2,4,8,16,(  ),26,38,62,74,・・・

(2) 1,2,4,6,16,12,64,24,36,48,(  ),・・・

(3) 1,3,4,7,6,12,8,15,13,(  ),・・・

(4) 66,72,53,34,25,29,85,(  ),・・・

(5) 0,1,10,2,100,11,1000,3,20,(  ),・・・

(6) 14,91,62,53,64,96,48,11,(  ),・・・


答え

!(1) 1,2,4,8,16,(  ),26,38,62,74,・・・
!mとmの各桁の積との和、すなわちm=16なら、次は16+1×6=22
LET M=1
FOR N=1 TO 10
   PRINT M;
   LET T=M
   LET S=1 !各桁の積
   DO WHILE T>0
      LET S=S*MOD(T,10)
      LET T=INT(T/10)
   LOOP
   LET M=M+S
NEXT N
PRINT

!(2) 1,2,4,6,16,12,64,24,36,48,(  ),・・・
!mの約数の個数がn個になる最小のもの
!n=3のとき、4=1,2,4
!n=5のとき、16=1,2,4,8,16
FOR N=1 TO 11
   LET M=0
   DO
      LET M=M+1
      LET K=0 !約数の個数
      FOR D=1 TO M
         IF MOD(M,D)=0 THEN LET K=K+1
      NEXT D
   LOOP UNTIL K=N
   PRINT M;
NEXT N
PRINT

!(3) 1,3,4,7,6,12,8,15,13,(  ),・・・
!nの約数の和、すなわちn=6なら約数は1,2,3,6なので、1+2+3+6=12
FOR N=1 TO 10
   LET S=0 !約数の和
   FOR D=1 TO N
      IF MOD(N,D)=0 THEN LET S=S+D
   NEXT D
   PRINT S;
NEXT N
PRINT

!(4) 66,72,53,34,25,29,85,(  ),・・・
!数字の並びがx[k]=ab…cなら、x[k+1]=a^2+b^2+ … +c^2
LET X=66
FOR K=1 TO 8
   PRINT X;
   LET T=X !次へ
   LET S=0
   DO WHILE T>0
      LET S=S+MOD(T,10)^2
      LET T=INT(T/10)
   LOOP
   LET X=S
NEXT K
PRINT

!(5) 0,1,10,2,100,11,1000,3,20,(  ),・・・
!nを素因数分解する。n=(2^a)(3^b)…(p^c)のとき、指数をc…baと並べる。
!n=3=(2^0)(3^1)のとき、10
!n=5=(2^0)(3^0)(5^1)のとき、100
!n=6=(2^1)(3^1)のとき、11
!n=8=2^3のとき、3
DATA 15
DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 !素数列
READ M
DIM P(M)
MAT READ P
LET D$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" !数字
FOR N=1 TO 10
   LET S$=""
   FOR i=1 TO M !因数分解
      LET A=0
      LET T=N
      DO WHILE MOD(T,P(i))=0
         LET A=A+1
         LET T=T/P(i)
      LOOP
      LET S$=D$(A+1:A+1) & S$
      IF P(i)>N THEN EXIT FOR
   NEXT i
   IF LEN(S$)>1 THEN !0サプレス
      DO WHILE S$(1:1)="0"
         LET S$=S$(2:LEN(S$))
      LOOP
   END IF
   PRINT " ";S$;
NEXT N
PRINT

!(6) 14,91,62,53,64,96,48,11,(  ),・・・
!n^2すなわち1,4,9,16,25,…を1491625…と並べて、2つずつ並べていく。
LET S$=""
FOR N=1 TO 11
   LET S$=S$ & STR$(N^2)
   IF LEN(S$)>1 THEN !次へ
      LET L=LEN(S$)
      PRINT S$(1:2);" ";
      LET S$=S$(3:L)
   END IF
NEXT N
PRINT

END


 

Re: 数列を表示する

 投稿者:GAI  投稿日:2015年 9月21日(月)14時01分4秒
  > No.3844[元記事へ]

山中和義さんへのお返事です。

すごい。全部見破られた。
こんなプログラムになるんですね、勉強になります。
(4)はハッピー数と言われている数を求めるときの手順で
どんな整数もこれを繰り返せば最後は1になるか4->4のサイクルになるという。
1に到達するスタートの数をハッピー数というらしい。
これは約1/7存在しているらしく(1~1000で143個、1~10000で1442個、1~100000で14377個でした。運試しにちょうどいい割合だ。)
1になるまでの回数が10回になるスタートにある数が凄かったです。

 

ぞろ目になる倍数

 投稿者:山中和義  投稿日:2015年 9月24日(木)18時48分25秒
  問題
n,mは自然数として、nの倍数nm(nのm倍)を考える。
各桁の数字がすべて同じになるときの最小のnm,mを求めよ。


考察
n=2015=5×13×31
5の倍数は、一の位の数は0,5となる。0のぞろ目はないので、5のぞろ目になる。
n=2014=2×19×53
2の倍数は、一の位の数は0,2,4,6,8となる。0のぞろ目はないので、2,4,6,8のぞろ目になる。
n=2013=3×11×61
n=2012=2^2×503
4の倍数は、下二桁でぞろ目になるのは、44,88のみなので、4,8のぞろ目になる。
n=2011
n=2010=2×3×5×67
10の倍数は、一の位の数は0となる。0のぞろ目はないので、ぞろ目にはならない。
(終り)


nが10,16,25の倍数は、ぞろ目にならない。

考察
・16の倍数
16,32,48,64,80,…(16の倍数)は、
2の倍数なので、一の位は2,4,6,8から、Rep(2),Rep(4),Rep(6),Rep(8)を検証する。
このとき、(16k)m=Rep(2) ∴8km=Rep(1)
8kmは2の倍数から一の位は2,4,6,8で、Rep(1)は1なので、一致しない。
同様に、Rep(4),Rep(6),Rep(8)のときも一致しない。
よって、ぞろ目にならない

・25の倍数
25,50,75,100,125,…(25の倍数)は、
5の倍数なので、Rep(5)のみ検証する。
このとき、(25k)m=Rep(5) ∴5km=Rep(1)
5kmは5の倍数から一の位は0,5で、Rep(1)は1なので、一致しない。
よって、ぞろ目にならない
(終り)


nm=p(10^k-1)/9で表される。


アルゴリズム
         0.00055
      -------------
 2002 )  ①
       __0__
         1① ← (1÷2002の余り)×10+①
       ___0__
         11① ← (11÷2002の余り)×10+①
        ___0__
         111① ← (111÷2002の余り)×10+①
        ____0__
         1111① ← (1111÷2002の余り)×10+①
       __10010__
          1101① ← (11111÷2002の余り)×10+①
        __10010__
           1001 ← 111111÷2002の余り
                    このとき、1001×2=2002となって割り切れる。

これより、222222,444444,666666,888888を得る。



!!OPTION ARITHMETIC RATIONAL !多桁の整数
LET N=1234 !2011 !2015 !2014 !2012
LET K=1 !k個(k桁)
LET R=1
DO !わり算の筆算による
   LET P=1 !(1)÷n、(11)÷n、(111)÷n、…、(11…1)÷nの余り
   LET R=MOD(R,N)
   IF R=0 THEN EXIT DO !Rep(k,1)で見つかったなら
   FOR P=2 TO 9 !(p)÷n、(pp)÷n、(ppp)÷n、…、(pp…p)÷nの余り
      IF MOD(R*P,N)=0 THEN EXIT DO !Rep(k,p)で見つかったなら
   NEXT P
   LET R=R*10+1 !次へ
   LET K=K+1
LOOP
PRINT K;"個の";P
END


 

与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月24日(木)23時24分46秒
  前回は大変お世話になりました。

FOR n=1 TO 2
   PRINT n;
   PRINT n-1
NEXT n

FOR n=3 TO 6
   PRINT n;
   LET  p=n*((2-1)/2)*((3-1)/3)+MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)+(2-1)
   PRINT p
NEXT n

FOR n=7 TO 120
   PRINT n;
   LET  p=(n*1*2*4*6/(2*3*5*7))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210+4-1
   PRINT p
NEXT n

END


You Tube のコメントに書いてありました。数式をプログラムにしました。

コメントには、リウヴィルの定理を使って、非自明なゼロ点(リーマン予想)を求め

解析接続すると書いてありましたが、詳細はわかりません。

120以上も試していますが、全く歯が立ちません。



宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月25日(金)19時33分1秒
  > No.3847[元記事へ]

たろささんへのお返事です。

少し、わかってきました。

FOR n=1 TO 2
   PRINT n;
   PRINT n-1
NEXT n

FOR n=3 TO 24
   PRINT n;
   LET  p=n*((2-1)/2)*((3-1)/3)+MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)+(2-1)
   PRINT p
NEXT n

FOR n=25 TO 48
   PRINT n;
   LET  p=n*(1*2*4/(2*3*5))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5-MOD(n,6)/6-MOD(n,10)/10-MOD(n,15)/15+MOD(n,30)/30+3-1
   PRINT p
NEXT n


FOR n=49 TO 120
   PRINT n;
   LET  p=(n*1*2*4*6/(2*3*5*7))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210+4-1
   PRINT p
NEXT n

FOR n=121 TO 168
   PRINT n;
   LET  p=(n*1*2*4*6*10/(2*3*5*7*11))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231-MOD(n,210)/210-MOD(n,330)/330-mod(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155+MOD(n,2310)/2310+5-1
   PRINT p
NEXT n

END


自己流です。
---------
*1桁+
*2桁-
*3桁+
*4桁-
*5桁+
--------


宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月25日(金)23時41分30秒
  > No.3848[元記事へ]

たろささんへのお返事です。

また、少し進みました。

FOR n=1 TO 2
   PRINT n;
   PRINT n-1
NEXT n

FOR n=3 TO 24
   PRINT n;
   LET  p=n*((2-1)/2)*((3-1)/3)+MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)+(2-1)
   PRINT p
NEXT n

FOR n=25 TO 48
   PRINT n;
   LET  p=n*(1*2*4/(2*3*5))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5-MOD(n,6)/6-MOD(n,10)/10-MOD(n,15)/15+MOD(n,30)/30+3-1
   PRINT p
NEXT n

FOR n=49 TO 120
   PRINT n;
   LET  p=(n*1*2*4*6/(2*3*5*7))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210+4-1
   PRINT p
NEXT n

FOR n=121 TO 168
   PRINT n;
   LET  p=(n*1*2*4*6*10/(2*3*5*7*11))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155+MOD(n,2310)/2310+5-1
   PRINT p
NEXT n

FOR n=169 TO 288
   PRINT n;
   LET p=(n*1*2*4*6*10*12/(2*3*5*7*11*13))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11+MOD(n,13)/13-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77-MOD(n,26)/26-MOD(n,39)/39-MOD(n,65)/65-MOD(n,91)/91-MOD(n,143)/143+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231+MOD(n,78)/78+MOD(n,130)/130+MOD(n,182)/182+MOD(n,195)/195+MOD(n,455)/455+MOD(n,1001)/1001+MOD(n,273)/273+MOD(n,286)/286+MOD(n,429)/429+MOD(n,715)/715-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155-MOD(n,390)/390-MOD(n,910)/910-MOD(n,2002)/2002-MOD(n,1365)/1365-MOD(n,3003)/3003-MOD(n,5005)/5005-MOD(n,546)/546-MOD(n,1430)/1430-MOD(n,2145)/2145-MOD(n,858)/858+MOD(n,2310)/2310+MOD(n,2730)/2730+MOD(n,10010)/10010+MOD(n,15015)/15015+MOD(n,6006)/6006+MOD(n,4290)/4290-MOD(n,30030)/30030+(6-1)
   PRINT p
NEXT n

END


2*3*5*7*11*13の組み合わせ表
---------------------------
1 6
2 15
3 20
4 15
5 6
6 1
---------------------------
+(6-1)は欄外(素数の個数?)

この組み合わせのプログラムが出来たら、完成します。

組み合わせ関数は、わかりません。


  宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月26日(土)02時43分2秒
  > No.3849[元記事へ]

たろささんへのお返事です。

また、少し進みました。

FOR n=1 TO 2  !(2-1)
   PRINT n;
   PRINT n-1
NEXT n

FOR n=3 TO 24
   PRINT n;
   LET  p=n*((2-1)/2)*((3-1)/3)+MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)+(2-1)
   PRINT p
NEXT n

FOR n=25 TO 48
   PRINT n;
   LET  p=n*(1*2*4/(2*3*5))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5-MOD(n,6)/6-MOD(n,10)/10-MOD(n,15)/15+MOD(n,30)/30+3-1
   PRINT p
NEXT n

FOR n=49 TO 120
   PRINT n;
   LET  p=(n*1*2*4*6/(2*3*5*7))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210+4-1
   PRINT p
NEXT n

FOR n=121 TO 168
   PRINT n;
   LET  p=(n*1*2*4*6*10/(2*3*5*7*11))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155+MOD(n,2310)/2310+5-1
   PRINT p
NEXT n

FOR n=169 TO 288
   PRINT n;
   LET p=(n*1*2*4*6*10*12/(2*3*5*7*11*13))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11+MOD(n,13)/13-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77-MOD(n,26)/26-MOD(n,39)/39-MOD(n,65)/65-MOD(n,91)/91-MOD(n,143)/143+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231+MOD(n,78)/78+MOD(n,130)/130+MOD(n,182)/182+MOD(n,195)/195+MOD(n,455)/455+MOD(n,1001)/1001+MOD(n,273)/273+MOD(n,286)/286+MOD(n,429)/429+MOD(n,715)/715-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155-MOD(n,390)/390-MOD(n,910)/910-MOD(n,2002)/2002-MOD(n,1365)/1365-MOD(n,3003)/3003-MOD(n,5005)/5005-MOD(n,546)/546-MOD(n,1430)/1430-MOD(n,2145)/2145-MOD(n,858)/858+MOD(n,2310)/2310+MOD(n,2730)/2730+MOD(n,10010)/10010+MOD(n,15015)/15015+MOD(n,6006)/6006+MOD(n,4290)/4290-MOD(n,30030)/30030+(6-1)
   PRINT p
NEXT n

FOR n=289 TO 360
   PRINT n;
   LET p=(n*1*2*4*6*10*12*16/(2*3*5*7*11*13*17))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11+MOD(n,13)/13+MOD(n,17)/17-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77-MOD(n,26)/26-MOD(n,39)/39-MOD(n,65)/65-MOD(n,91)/91-MOD(n,143)/143-MOD(n,34)/34-MOD(n,51)/51-MOD(n,85)/85-MOD(n,119)/119-MOD(n,187)/187-MOD(n,221)/221+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231+MOD(n,78)/78+MOD(n,130)/130+MOD(n,182)/182+MOD(n,195)/195+MOD(n,455)/455+MOD(n,1001)/1001+MOD(n,273)/273+MOD(n,286)/286+MOD(n,429)/429+MOD(n,715)/715+MOD(n,102)/102+MOD(n,170)/170+MOD(n,238)/238+MOD(n,374)/374+MOD(n,442)/442+MOD(n,255)/255+MOD(n,357)/357+MOD(n,561)/561+MOD(n,663)/663+MOD(n,595)/595+MOD(n,935)/935+MOD(n,1105)/1105+MOD(n,1309)/1309+MOD(n,1547)/1547+MOD(n,2431)/2431-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155-MOD(n,390)/390-MOD(n,910)/910-MOD(n,2002)/2002-MOD(n,1365)/1365-MOD(n,3003)/3003-MOD(n,5005)/5005-MOD(n,546)/546-MOD(n,1430)/1430-MOD(n,2145)/2145-MOD(n,858)/858-MOD(n,510)/510-MOD(n,714)/714-MOD(n,1122)/1122-MOD(n,1326)/1326-MOD(n,1190)/1190-MOD(n,1870)/1870-MOD(n,2210)/2210-MOD(n,2618)/2618-MOD(n,3094)/3094-MOD(n,4862)/4862-MOD(n,1785)/1785-MOD(n,2805)/2805-MOD(n,3315)/3315-MOD(n,3927)/3927-MOD(n,4641)/4641-MOD(n,7293)/7293-MOD(n,6545)/6545-MOD(n,7735)/7735-MOD(n,12155)/12155-MOD(n,17017)/17017+MOD(n,2310)/2310+MOD(n,2730)/2730+MOD(n,10010)/10010+MOD(n,15015)/15015+MOD(n,6006)/6006+MOD(n,4290)/4290+MOD(n,3570)/3570+MOD(n,5610)/5610+MOD(n,6630)/6630+MOD(n,7854)/7854+MOD(n,9282)/9282+MOD(n,14586)/14586+MOD(n,13090)/13090+MOD(n,15470)/15470+MOD(n,24310)/24310+MOD(n,34034)/34034+MOD(n,19635)/19635+MOD(n,23205)/23205+MOD(n,36465)/36465+MOD(n,51051)/51051+MOD(n,85085)/85085-MOD(n,30030)/30030-MOD(n,39270)/39270-MOD(n,46410)/46410-MOD(n,72930)/72930-MOD(n,102102)/102102-MOD(n,170170)/170170-MOD(n,255255)/255255+MOD(n,510510)/510510+(7-1)
   PRINT p
NEXT n

END


2*3*5*7*11*13*17(p7=17#)組み合わせ表  *(素数階乗)
19^2-1=360
----------------------------
【p0】    (p6=13#)
【p1】1 7 (6)  1組 (+)符号
【p2】2 21(15) 2組 (-)符号
【p3】3 35(20) 3組 (+)符号
【p4】4 35(15) 4組 (-)符号
【p5】5 21(6)  5組 (+)符号
【p6】6 7 (1)  6組 (-)符号
【p7】7 1      7組 (+)符号

------------------------------------
   (素数-1)/素数 素数階乗(素数積)
【p0】
(n*1*2*4*6*10*12*16/(2*3*5*7*11*13*17))

【p1】7個 1組(+) (増1)
+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11+MOD(n,13)/13+MOD(n,17)/17

   宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:山中和義  投稿日:2015年 9月26日(土)06時06分5秒
  > No.3850[元記事へ]

たろささんへのお返事です。

>  また、少し進みました。

> FOR n=25 TO 48
>    PRINT n;
>    LET  p=n*(1*2*4/(2*3*5))+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5-MOD(n,6)/6-MOD(n,10)/10-MOD(n,15)/15+MOD(n,30)/30+3-1
>    PRINT p
> NEXT n


n*1*2*4*6/(2*3*5*7)やMOD(n,p)/pなどを計算するので、有理数モードで計算する必要があります。

一応、プログラムとしては、このような記述になると思います。
しかし、MOD(n,p)/pの項数が増えますので、Kが15以上で計算困難です。

一般的に、1からnまでの素数の個数は、(nは10^6程度)
・試し割り法
・篩い法
 エラトステネスの篩い
 個数定理
がありますが、
この計算式は、個数定理と同様あまり実用的ではないようです。



OPTION ARITHMETIC RATIONAL !有理数

LET K=7 !個数 ※1以上

DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 !素数列
DIM P(25)
MAT READ P

LET X=1 !分子
LET Y=1 !分母
FOR i=1 TO K
   LET X=X*(P(i)-1) !1,2,4,6,10,12,16,18,…
   LET Y=Y*P(i)     !2,3,5,7,11,13,17,19,…
NEXT i

FOR N=P(K)^2 TO P(K+1)^2-1 !範囲

   LET C=0
   FOR J=1 TO 2^K-1 !k個kからm個を選ぶ C(k,m)通り
      LET T=J

      LET S=1 !その積
      LET B=0 !1の個数
      FOR i=1 TO K !k桁の2進法に展開する
         IF MOD(T,2)=1 THEN
            LET S=S*P(i)
            LET B=B+1
         END IF
         LET T=INT(T/2)
      NEXT i
      LET C=C+(-1)^(B+1)*MOD(N,S)/S
   NEXT J

   PRINT N; N*X/Y+C+K-1;"個"
NEXT N

END


 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月26日(土)08時32分31秒
  > No.3851[元記事へ]

山中和義さんへのお返事です。

ありがとうございました。大変感激しました。

> n*1*2*4*6/(2*3*5*7)やMOD(n,p)/pなどを計算するので、有理数モードで計算する必要があります。
>
> 一応、プログラムとしては、このような記述になると思います。
> しかし、MOD(n,p)/pの項数が増えますので、Kが15以上で計算困難です。


k=16
2809  409個
3480  487個
22分50.54秒(i3 3.7G+SSD256GB)

確認しました。


> 一般的に、1からnまでの素数の個数は、(nは10^6程度)
> ・試し割り法
> ・篩い法
>  エラトステネスの篩い
>  個数定理
> がありますが、
> この計算式は、個数定理と同様あまり実用的ではないようです。


リーマン予想については素人なのでわかりません。

元に成っている数式のご紹介です。

YouTube
enlong chiouさん
https://www.youtube.com/channel/UCgNAhHlBDOJ6hTkJVlf5gIw/feed

enlong chiou さんが 1 本の動画を高く評価しました。その中の動画のコメントに書かれています。
----------------------------------------------------------------
pi(1)=0,
pi(10)=10*((2-1)/2)*((3-1)/3)+MOD(10,2)/2+MOD(10,3)/3-MOD(10,2*3)/(2*3)+(2-1)=10/3+0/2+1/3-4/6+1=4,
pi(100)=(100*1*2*4*6/(2*3*5*7))+(0/2)+(1/3)+(0/5)+(2/7)-(4/6)-(0/10)-(2/14)-(10/15)-(16/21)-(30/35)+(10/30)+(16/42)+(30/70)+(100/105)-(100/210)+4-1=25,
----------------------------------------------------------------

実用性については、この式の一部がli(x)対数積分とpi(x)を挟んで下限値として有効で

li(x)対数積分と足して/2だと

(li(10000)+(10000*1*2*4*6*10*12*16*18*22*28*30*36*40*42*46*52*58*60*66*70*72*78*82*88*96
/(2*3*5*7*11*13*17*19*23*29*31*37*41*43*47*53*59*61*67*71*73*79*83*89*97)+mod(10000,2)/2+mod(10000,3)/3+mod(10000,5)/5+mod(10000,7)/7+mod(10000,11)/11+mod(10000,13)/13+mod(10000,17)/17+mod(10000,19)/19+mod(10000,23)/23+mod(10000,29)/29+mod(10000,31)/31+mod(10000,37)/37+mod(10000,41)/41+mod(10000,43)/43+mod(10000,47)/47+mod(10000,53)/53+mod(10000,59)/59+mod(10000,61)/61+mod(10000,67)/67+mod(10000,71)/71+mod(10000,73)/73+mod(10000,79)/79+mod(10000,83)/83+mod(10000,89)/89+mod(10000,97)/97))/2=1230.741065


こんな近似が取れます。



http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:山中和義  投稿日:2015年 9月26日(土)15時15分22秒
  > No.3852[元記事へ]

たろささんへのお返事です。

> k=16
> 2809  409個
> 3480  487個
> 22分50.54秒(i3 3.7G+SSD256GB)
>
> 確認しました。


mod(n,p)/pについて
すべてのnでpは1回だけ計算すればよいですね。 劇的ビフォーアフターです。



OPTION ARITHMETIC RATIONAL !有理数

LET t0=TIME

LET K=16 !個数 ※1以上

DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 !素数列
DIM P(25)
MAT READ P

LET X=1 !分子
LET Y=1 !分母
FOR i=1 TO K
   LET X=X*(P(i)-1) !1,2,4,6,10,12,16,18,…
   LET Y=Y*P(i)     !2,3,5,7,11,13,17,19,…
NEXT i

DIM C(P(K)^2 TO P(K+1)^2-1)
MAT C=ZER

FOR J=1 TO 2^K-1 !k個からm個を選ぶ C(k,m)通り
   LET T=J

   LET S=1 !その積
   LET B=0 !1の個数
   FOR i=1 TO K !k桁の2進法に展開する(ビットパターン)
      IF MOD(T,2)=1 THEN
         LET S=S*P(i)
         LET B=B+1
      END IF
      LET T=INT(T/2)
   NEXT i
   FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
      LET C(N)=C(N)+(-1)^(B+1)*MOD(N,S)/S
   NEXT N

NEXT J

FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
   PRINT N; N*X/Y+C(N)+K-1;"個"
NEXT N

PRINT TIME-t0
END


 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月26日(土)16時20分18秒
  > No.3853[元記事へ]

山中和義さんへのお返事です。


ありがとうございます。

> > k=16
> > 2809  409個
> > 3480  487個
> > 22分50.54秒(i3 3.7G+SSD256GB)

同環境で試しました。6分12.47秒

最初は、AMD 2.4G  K=8 で 体感的高速処理

(i3 3.7G+SSD256GB) K=16 しばらく、何も出ないので、戸惑いました。

前programの方は

K=19 3時間04分38.05秒 まで確認しました。


> mod(n,p)/pについて
> すべてのnでpは1回だけ計算すればよいですね。 劇的ビフォーアフターです。


確かに倍速以上ですから劇的な進化です。

早速K=20 計算中です。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月26日(土)18時02分14秒
  > No.3853[元記事へ]

山中和義さんへのお返事です。

プログラムについて教えてください。

> LET K=16 !個数 ※1以上
>
> DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 !素数列
> DIM P(25)


K=25  を設定しました。 添え字が枠外と出ましたので

DATA 101 を加えて

DIM P(26) としたところ実行中で計算しているようですが、これで良いでしょうか?

K=20 は1時間02分00.06秒 でした。前program k=19 3時間04分38.05秒

K=19 の倍の時間がかかりそう。予想でした。1/6 時短でしょうか?

数式をプログラムにした時から、1000の97を目標としてました。

宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:山中和義  投稿日:2015年 9月26日(土)19時01分14秒
  > No.3855[元記事へ]

たろささんへのお返事です。

> K=25  を設定しました。 添え字が枠外と出ましたので
>  DATA 101 を加えて
>  DIM P(26) としたところ実行中で計算しているようですが、これで良いでしょうか?

はい、そうです。
以降必要に応じて、素数を追加していけばよいですが、処理時間はだんだん増加します。


> K=19 の倍の時間がかかりそう。予想でした。1/6 時短でしょうか?

こちらでは、3~4倍速くなりました。


> K=20 は1時間02分00.06秒 でした。

n→∞で、ΣC(n+1,k)/ΣC(n,k)≒2なので、K=25では、2^5=32
これより、32時間でしょうか。



 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月26日(土)19時56分48秒
  > No.3856[元記事へ]

山中和義さんへのお返事です。


> はい、そうです。
> 以降必要に応じて、素数を追加していけばよいですが、処理時間はだんだん増加します。

ありがとうございます。安心しました。


> > K=19 の倍の時間がかかりそう。予想でした。1/6 時短でしょうか?
>
> こちらでは、3~4倍速くなりました。

恐れ入ります。

> > K=20 は1時間02分00.06秒 でした。
>
> n→∞で、ΣC(n+1,k)/ΣC(n,k)≒2なので、K=25では、2^5=32
> これより、32時間でしょうか。

monitorの電源落として気長に寝て待つことにしました。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 組み合わせを考える

 投稿者:山中和義  投稿日:2015年 9月27日(日)11時24分42秒
  > No.3828[元記事へ]

問題
4つの解を、1,2,3,4とする4次方程式を求めよ。

答え
解と係数の関係より、
1+2+3+4=10
1×2+1×3+1×4+2×3+2×4+3×4=35
1×2×3+1×2×4+1×3×4+2×3×4=50
1×2×3×4=24
よって、x^4-10t^3+35t^2-50t+24=0
(終り)


DATA 4!個数
DATA 1,2,3,4 !解

READ K !解を読み込む
DIM X(K)
MAT READ X

DIM C(0 TO K) !係数
MAT C=ZER
FOR P=0 TO 2^K-1 !組み合わせ
   LET T=P

   LET S=1 !その積
   LET M=0 !1の個数
   FOR B=1 TO K !k桁の2進法表記(ビットパターン)
      IF MOD(T,2)=1 THEN
         LET S=S*X(B)
         LET M=M+1
      END IF
      LET T=INT(T/2)
   NEXT B
   LET C(M)=C(M)+(-1)^M*S !符号を考慮する

NEXT P
MAT PRINT C; !c[0]x^4+c[1]x^3+c[2]x^2+c[3]x+c[4]

END




問題
4つの文字による基本対称式を求めよ。


LET D$="abcdefghijklmnopqrstuvwxyz"
DIM S$(K) !文字がk個ずつ
FOR i=1 TO K
   LET S$(i)=""
NEXT i
FOR P=1 TO 2^K-1 !組み合わせ
   LET T=P

   LET A$="" !その積
   LET M=0 !1の個数
   FOR B=1 TO K !k桁の2進法表記(ビットパターン)
      IF MOD(T,2)=1 THEN
         LET A$=A$ & D$(B:B)
         LET M=M+1
      END IF
      LET T=INT(T/2)
   NEXT B
   LET S$(M)=S$(M) & "+" & A$

NEXT P
FOR i=1 TO K
   PRINT S$(i)
NEXT i

END


 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月27日(日)22時15分31秒
  山中和義さんへのお返事です。

今晩は。

> > K=20 は1時間02分00.06秒 でした。
>
> n→∞で、ΣC(n+1,k)/ΣC(n,k)≒2なので、K=25では、2^5=32
> これより、32時間でしょうか。

24時間は過ぎたと思いますが、まだ、計算中です。

なので、テストマシーンの環境 AMD64 Athlon 3800+ 2.4G Win8.1 32bt

素数の組み合わせ
ファイル出力プログラム

ファイル読み込み素数の個数算出プログラム

!プライムコンビ 1848 K=13
OPTION ARITHMETIC RATIONAL
LET t0=TIME
LET A1=78
DIM A(A1)  !p2
LET B1=286
DIM B(B1)  !p3
LET C1=715
DIM C(C1)  !p4
LET D1=1287
DIM D(D1)  !p5
LET E1=1716
DIM E(E1)  !p6
LET F1=1716
DIM F(F1)  !p7
LET G1=1287
DIM G(G1)  !p8
LET H1=715
DIM H(H1)  !p9
LET J1=286
DIM J(J1)  !p10
LET K1=78
DIM K(K1)  !p11
LET L1=13
DIM L(L1)  !p12

ASK DIRECTORY d$
LET f_name3$="PRIME_COMBI_P2"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i2=1 TO A1
   INPUT #3: A(i2)
NEXT i2
CLOSE #3

LET f_name3$="PRIME_COMBI_P3"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i3=1 TO B1
   INPUT #3: B(i3)
NEXT i3
CLOSE #3

LET f_name3$="PRIME_COMBI_P4"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i4=1 TO C1
   INPUT #3: C(i4)
NEXT i4
CLOSE #3

LET f_name3$="PRIME_COMBI_P5"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i5=1 TO D1
   INPUT #3: D(i5)
NEXT i5
CLOSE #3

LET f_name3$="PRIME_COMBI_P6"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i6=1 TO E1
   INPUT #3: E(i6)
NEXT i6
CLOSE #3

LET f_name3$="PRIME_COMBI_P7"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i7=1 TO F1
   INPUT #3: F(i7)
NEXT i7
CLOSE #3

LET f_name3$="PRIME_COMBI_P8"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i8=1 TO G1
   INPUT #3: G(i8)
NEXT i8
CLOSE #3

LET f_name3$="PRIME_COMBI_P9"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i9=1 TO H1
   INPUT #3: H(i9)
NEXT i9
CLOSE #3

LET f_name3$="PRIME_COMBI_P10"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR ia=1 TO J1
   INPUT #3: J(ia)
NEXT ia
CLOSE #3

LET f_name3$="PRIME_COMBI_P11"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR ib=1 TO K1
   INPUT #3: K(ib)
NEXT ib
CLOSE #3

LET f_name3$="PRIME_COMBI_P12"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR ic=1 TO L1
   INPUT #3: L(ic)
NEXT ic
CLOSE #3
! LET format$="#." & REPEAT$("#",999)
LET p=1*2*4*6*10*12*16*18*22*28*30*36*40/(2*3*5*7*11*13*17*19*23*29*31*37*41)
FOR n=1681 TO 1848
   PRINT n;
   LET s2=0
   LET s3=0
   LET s4=0
   LET s5=0
   LET s6=0
   LET s7=0
   LET s8=0
   LET s9=0
   LET sa=0
   LET sb=0
   LET sc=0

   LET p1=(n*p)+MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11+MOD(n,13)/13+MOD(n,17)/17+MOD(n,19)/19+MOD(n,23)/23+MOD(n,29)/29+MOD(n,31)/31+MOD(n,37)/37+MOD(n,41)/41

   FOR i2=1 TO A1
      LET p2=(-MOD(n,A(i2))/A(i2))+s2
      LET s2=p2
   NEXT i2
   FOR i3=1 TO B1
      LET p3=(MOD(n,B(i3))/B(i3))+s3
      LET s3=p3
   NEXT i3
   FOR i4=1 TO C1
      LET p4=(-MOD(n,C(i4))/C(i4))+s4
      LET s4=p4
   NEXT i4
   FOR i5=1 TO D1
      LET p5=(MOD(n,D(i5))/D(i5))+s5
      LET s5=p5
   NEXT i5
   FOR i6=1 TO E1
      LET p6=(-MOD(n,E(i6))/E(i6))+s6
      LET s6=p6
   NEXT i6
   FOR i7=1 TO F1
      LET p7=(MOD(n,F(i7))/F(i7))+s7
      LET s7=p7
   NEXT i7
   FOR i8=1 TO G1
      LET p8=(-MOD(n,G(i8))/G(i8))+s8
      LET s8=p8
   NEXT i8
   FOR i9=1 TO H1
      LET p9=(MOD(n,H(i9))/H(i9))+s9
      LET s9=p9
   NEXT i9
   FOR ia=1 TO J1
      LET pa=(-MOD(n,J(ia))/J(ia))+sa
      LET sa=pa
   NEXT ia
   FOR ib=1 TO K1
      LET pb=(MOD(n,K(ib))/K(ib))+sb
      LET sb=pb
   NEXT ib
   FOR ic=1 TO L1
      LET pc=(-MOD(n,L(ic))/L(ic))+sc
      LET sc=pc
   NEXT ic

   LET z=p1+p2+p3+p4+p5+p6+p7+p8+p9+pa+pb+pc+MOD(n,304250263527210)/304250263527210+(13-1)
   PRINT z
NEXT n
PRINT TIME-t0;"秒で計算しました"
END

-------------------------------------------------------

素数の組み合わせ
ファイル出力プログラム

行数オバーのためつづく

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年 9月27日(日)22時18分13秒
  たろささんへのお返事です。


> 素数の組み合わせ
> ファイル出力プログラム
>
> 行数オバーのためつづく

続きです。

素数の組み合わせ
ファイル出力プログラム

LET t0=TIME
DATA 2,3,5,7,11,13,17,19,23,29,31,37,41 !K=13
LET k9=13
LET k1=13
DIM P(k9)
MAT READ P
ASK DIRECTORY d$
LET f_name7$="PRIME_COMBI_P2"   ! ファイル名
LET f7$=d$&"\"&f_name7$&".txt"
PRINT "ファイル保存場所[7] = ";f7$
OPEN #7: NAME f7$
ERASE #7

LET N=k1
LET S=0
FOR A=1 TO N-1 !2組(A,B)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N
      LET k9=B
      LET BB=p(k9)
      LET S=AA*BB
      !PRINT AA;"*";BB;"=";s
      !PRINT #7:s             !ファイル出力
      !   LET S=S+A*B
   NEXT B
NEXT A
!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-2 !3組(A,B,C)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-1
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N
         LET k9=C
         LET CC=p(k9)
         LET S=AA*BB*CC
         ! PRINT AA;"*";BB;"*";CC;"=";s
         !PRINT #7:s                    !ファイル出力
         !   LET S=S+A*B*C
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-3 !4組(A,B,C,D)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-2
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-1
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N
            LET k9=D
            LET DD=p(k9)
            LET S=AA*BB*CC*DD
            ! PRINT AA;"*";BB;"*";CC;"*";DD;"=";s
            !PRINT #7:s                        !ファイル出力
            !   LET S=S+A*B*C*D
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-4 !5組(A,B,C,D,E)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-3
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-2
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-1
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N
               LET k9=E
               LET EE=p(k9)
               LET S=AA*BB*CC*DD*EE
               ! PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"=";s
               !PRINT #7:s                  !ファイル出力
               !   LET S=S+A*B*C*D*E
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-5 !6組(A,B,C,D,E,F)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-4
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-3
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-2
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-1
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N
                  LET k9=F
                  LET FF=p(k9)
                  LET S=AA*BB*CC*DD*EE*FF
                  ! PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"=";s
                  !PRINT #7:s                  !ファイル出力
                  !   LET S=S+A*B*C*D*E*F
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-6 !7組(A,B,C,D,E,F,G)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-5
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-4
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-3
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-2
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-1
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N
                     LET k9=G
                     LET GG=p(k9)
                     LET S=AA*BB*CC*DD*EE*FF*GG
                     ! PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"=";s
                     !PRINT #7:s                  !ファイル出力
                     !   LET S=S+A*B*C*D*E*F*G
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-7 !8組(A,B,C,D,E,F,G,H)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-6
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-5
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-4
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-3
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-2
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N-1
                     LET k9=G
                     LET GG=p(k9)
                     FOR H=G+1 TO N
                        LET k9=H
                        LET HH=p(k9)
                        LET S=AA*BB*CC*DD*EE*FF*GG*HH
                        ! PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"*";HH;"=";s
                        !PRINT #7:s                  !ファイル出力
                        !   LET S=S+A*B*C*D*E*F*G*H
                     NEXT H
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-8 !9組(A,B,C,D,E,F,G,H,I)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-7
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-6
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-5
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-4
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-3
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N-2
                     LET k9=G
                     LET GG=p(k9)
                     FOR H=G+1 TO N-1
                        LET k9=H
                        LET HH=p(k9)
                        FOR I=H+1 TO N
                           LET k9=I
                           LET II=p(k9)
                           LET S=AA*BB*CC*DD*EE*FF*GG*HH*II
                           !  PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"*";HH;"*";II;"=";s
                           !PRINT #7:s                  !ファイル出力
                           !   LET S=S+A*B*C*D*E*F*G*H*I
                        NEXT I
                     NEXT H
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-9 !10組(A,B,C,D,E,F,G,H,I,J)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-8
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-7
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-6
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-5
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-4
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N-3
                     LET k9=G
                     LET GG=p(k9)
                     FOR H=G+1 TO N-2
                        LET k9=H
                        LET HH=p(k9)
                        FOR I=H+1 TO N-1
                           LET k9=I
                           LET II=p(k9)
                           FOR J=I+1 TO N
                              LET k9=J
                              LET JJ=p(k9)
                              LET S=AA*BB*CC*DD*EE*FF*GG*HH*II*JJ
                              !PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"*";HH;"*";II;"*";JJ;"=";s
                              !PRINT #7:s                  !ファイル出力
                              !   LET S=S+A*B*C*D*E*F*G*H*I
                           NEXT J
                        NEXT I
                     NEXT H
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-10 !11組(A,B,C,D,E,F,G,H,I,J,K)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-9
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-8
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-7
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-6
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-5
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N-4
                     LET k9=G
                     LET GG=p(k9)
                     FOR H=G+1 TO N-3
                        LET k9=H
                        LET HH=p(k9)
                        FOR I=H+1 TO N-2
                           LET k9=I
                           LET II=p(k9)
                           FOR J=I+1 TO N-1
                              LET k9=J
                              LET JJ=p(k9)
                              FOR K=J+1 TO N
                                 LET k9=K
                                 LET KK=p(k9)
                                 LET S=AA*BB*CC*DD*EE*FF*GG*HH*II*JJ*KK
                                 !PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"*";HH;"*";II;"*";JJ;"*";KK;"=";s
                                 !PRINT #7:s                  !ファイル出力
                                 !   LET S=S+A*B*C*D*E*F*G*H*I*J*K
                              NEXT K
                           NEXT J
                        NEXT I
                     NEXT H
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A

!PRINT "-----------------------"

LET N=k1
LET S=0
FOR A=1 TO N-11 !12組(A,B,C,D,E,F,G,H,I,J,K,L)
   LET k9=A
   LET AA=p(k9)
   FOR B=A+1 TO N-10
      LET k9=B
      LET BB=p(k9)
      FOR C=B+1 TO N-9
         LET k9=C
         LET CC=p(k9)
         FOR D=C+1 TO N-8
            LET k9=D
            LET DD=p(k9)
            FOR E=D+1 TO N-7
               LET k9=E
               LET EE=p(k9)
               FOR F=E+1 TO N-6
                  LET k9=F
                  LET FF=p(k9)
                  FOR G=F+1 TO N-5
                     LET k9=G
                     LET GG=p(k9)
                     FOR H=G+1 TO N-4
                        LET k9=H
                        LET HH=p(k9)
                        FOR I=H+1 TO N-3
                           LET k9=I
                           LET II=p(k9)
                           FOR J=I+1 TO N-2
                              LET k9=J
                              LET JJ=p(k9)
                              FOR K=J+1 TO N-1
                                 LET k9=K
                                 LET KK=p(k9)
                                 FOR L=K+1 TO N
                                    LET k9=L
                                    LET LL=p(k9)
                                    LET S=AA*BB*CC*DD*EE*FF*GG*HH*II*JJ*KK*LL
                                    !PRINT AA;"*";BB;"*";CC;"*";DD;"*";EE;"*";FF;"*";GG;"*";HH;"*";II;"*";JJ;"*";KK;"*";LL;"=";s
                                    !PRINT #7:s                  !ファイル出力
                                    !   LET S=S+A*B*C*D*E*F*G*H*I*J*K*L
                                 NEXT L
                              NEXT K
                           NEXT J
                        NEXT I
                     NEXT H
                  NEXT G
               NEXT F
            NEXT E
         NEXT D
      NEXT C
   NEXT B
NEXT A


PRINT TIME-t0;"秒で計算しました"
END


-----------------------------------------------------

K=13
----------------------------
OPTION ARITHMETIC DECIMAL_HIGH
1000桁モード
1681  263
1848  283
38.17 秒で計算しました
----------------------------
OPTION ARITHMETIC DECIMAL
10進モード
1681  263
1848  283
6.35 秒で計算しました
----------------------------
OPTION ARITHMETIC RATIONAL
1681  263
1848  283
1848  283
1337/100 秒で計算しました
(13.37秒)

1848  283
13 秒で計算しました

1848  283
1301/100 秒で計算しました
(13.01秒)

K=X V2 作って頂いたプログラム
----------------------------
OPTION ARITHMETIC RATIONAL
1681  263 個
1848  283 個
267/20
(13.35秒)

1848  283 個
1327/100
(13.27秒)


現状では、ファイル出力のプログラム !PRINT #7:s の開け閉めとファイル名変更で出力しています。

1発でザット出力するには?

どのようにしたら良いかわかりません。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 不定方程式の解

 投稿者:山中和義  投稿日:2015年 9月29日(火)20時36分13秒
  > No.3450[元記事へ]

> > 両替問題 http://izumi-math.jp/T_Ogasawara/ryougae/ryougae.pdf
>
> 10000円の5000札、1000円札、500円玉、100円玉、50円玉、10円玉、5円玉、1円玉への両替方法は、
> 18155171408通りある。


動的計画法による

OPTION ARITHMETIC RATIONAL !多桁の整数
LET M=10000 !金額
DATA 8 !種類
DATA 1,5,10,50,100,500,1000,5000 !硬貨
READ K
DIM C(K),N(K)
MAT READ C
FOR i=1 TO K !十分多くある
   LET N(i)=INT(M/C(i))
NEXT i
DIM F(0 TO M) !kは金額、f[k]は場合の数
MAT F=ZER
LET F(0)=1 !1通り
FOR i=1 TO K
   FOR X=M TO 0 STEP -1 !この金額kから、さらに
      IF F(X)>0 THEN
         FOR J=N(i) TO 1 STEP -1 !硬貨c[i]を、1からm[i]個
            LET W=X+C(i)*J
            IF W<=M THEN LET F(W)=F(W)+F(X)
         NEXT J
      END IF
   NEXT X
NEXT i
PRINT F(M);"通り" !18155171408 通り
END



個数が限定される場合

問題
1円玉が50個, 5円玉が10個, 10円玉が5個, 50円玉が1個ある。
いま、これらの硬貨を組み合わせて50円にしたい。
たとえば、1円玉5個,5円玉3個,10円玉3個,50円玉0個という組み合わせも
その1つと考えることにすると、このような組み合わせは全部で何通りありますか。

OPTION ARITHMETIC RATIONAL !多桁の整数
LET M=50 !金額
DATA 4 !種類
DATA 1,5,10,50 !硬貨
DATA 50,10,5,1 !個数
READ K
DIM C(K),A(K)
MAT READ C
MAT READ A
DIM F(0 TO M) !kは金額、f[k]は場合の数
MAT F=ZER
LET F(0)=1 !1通り
FOR i=1 TO K
   FOR X=M TO 0 STEP -1 !この金額kから、さらに
      IF F(X)>0 THEN
         FOR J=A(i) TO 1 STEP -1 !硬貨c[i]を、1からm[i]個
            LET W=X+C(i)*J
            IF W<=M THEN LET F(W)=F(W)+F(X)
         NEXT J
      END IF
   NEXT X
NEXT i
PRINT F(M);"通り"
END


 

Re: 不定方程式の解

 投稿者:山中和義  投稿日:2015年 9月30日(水)13時28分58秒
  > No.3861[元記事へ]

> 個数が限定される場合
>
> 問題
> 1円玉が50個, 5円玉が10個, 10円玉が5個, 50円玉が1個ある。
> いま、これらの硬貨を組み合わせて50円にしたい。
> たとえば、1円玉5個,5円玉3個,10円玉3個,50円玉0個という組み合わせも
> その1つと考えることにすると、このような組み合わせは全部で何通りありますか。


与えられた各硬貨の個数は、「十分多くあるものとする」と同じである。

母関数による
1円玉 1+x+x^2+x^3+ … +x^50
5円玉 1+x^5+x^10+x^15+ … +x^50
10円玉 1+x^10+x^20+x^30+x^40+x^50
50円玉 1+x^50


LET M=50 !金額

DATA 4 !種類
DATA 1,5,10,50 !硬貨
DATA 50,10,5,1 !個数

READ K
DIM C(K),N(K)
MAT READ C
MAT READ N

DIM T1(0 TO M),T2(0 TO M) !作業用
DIM P(0 TO M) !係数
LET P(0)=1
FOR X=1 TO K
   MAT T1=ZER
   FOR J=0 TO N(X) !n[x]個
      LET W=C(X)*J
      IF W>M THEN EXIT FOR !x^mを上限とする
      LET T1(W)=1
   NEXT J

   MAT T2=ZER !乗算 t2=p*t1
   FOR i=0 TO M
      FOR J=0 TO M
         IF i+J<=M THEN LET T2(i+J)=T2(i+J)+P(i)*T1(J) !x^mを上限とする
      NEXT J
   NEXT i
   MAT P=T2 !copy it
NEXT X

PRINT P(M) !x^mの係数

END


 

Re: 与えられた数より小さい素数の個数について

 投稿者:山中和義  投稿日:2015年 9月30日(水)21時37分13秒
  > No.3853[元記事へ]

> mod(n,p)/pについて


mod(n,p)/sの和の計算は、通分,約分が必要なので、整数(分母が1)になるように式を変形してみました。
3倍弱時短できました。



OPTION ARITHMETIC RATIONAL !有理数

LET t0=TIME

LET K=15 !個数 ※1以上

DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101 !素数列
DIM P(26)
MAT READ P

LET X=1 !分子
LET Y=1 !分母
FOR i=1 TO K
   LET X=X*(P(i)-1) !1,2,4,6,10,12,16,18,…
   LET Y=Y*P(i)     !2,3,5,7,11,13,17,19,…
NEXT i

DIM C(P(K)^2 TO P(K+1)^2-1)
MAT C=ZER

FOR J=1 TO 2^K-1 !k個からm個を選ぶ
   LET T=J

   LET S=1 !その積
   LET B=-1 !符号 ※奇数個は正、偶数個は負
   FOR i=1 TO K !k桁の2進法に展開する(ビットパターン)
      IF MOD(T,2)=1 THEN
         LET S=S*P(i)
         LET B=-B
      END IF
      LET T=INT(T/2)
   NEXT i
   FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
      LET C(N)=C(N)+B*MOD(N,S)*Y/S
   NEXT N

NEXT J

FOR N=P(K)^2 TO P(K+1)^2-1 !結果を表示する
   PRINT N; (N*X+C(N))/Y+K-1;"個"
NEXT N

PRINT TIME-t0
END

 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年10月 1日(木)07時46分51秒
  > No.3863[元記事へ]

山中和義さんへのお返事です。

おはようございます。

> > mod(n,p)/pについて
>
>
> mod(n,p)/sの和の計算は、通分,約分が必要なので、整数(分母が1)になるように式を変形してみました。
> 3倍弱時短できました。


早速 K=16  試しました。

AMD 2.4GHz Win8.1 32bt

山中様V3 2分16.09秒

自作  7分50.11秒


自作のプログラムでi3 3.7+SSD Win7 32bt  K=23 約 30時間 1時間で30回

あと1時間で計算終了しますので

K=24から試してみたいと思います。

数式の検証が楽になりました。

ありがとうございます。

この数式がどのように求められた?

興味があります。

私は数論は詳しくは知らないのですが、『 Full BASIC による算法通論』

SRQ(x) -領域の 複素根のグラフが掲載されています。

本に掲載されているプログラムは、この掲示板に書くと問題ありますか?

なお、本に掲載されているプログラムは、10進BASIC 動作確認しています。

ax^2+bx+c=0 2次方程式を解く副プログラムの関係プログラムです。


http://blogs.yahoo.co.jp/donald_stinger

 

Re: 与えられた数より小さい素数の個数について

 投稿者:山中和義  投稿日:2015年10月 1日(木)20時03分18秒
  > No.3864[元記事へ]

たろささんへのお返事です。

> 早速 K=16  試しました。

前出のプログラムの修正です。

 FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
    LET C(N)=C(N)+B*MOD(N,S)*Y/S
 NEXT N
で、Y/SはFOR文内では定数ですから外に出します。この方が速いです。

Ver3.1


OPTION ARITHMETIC RATIONAL !有理数

LET t0=TIME

LET K=16 !個数 ※1以上

DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101 !素数列
DIM P(26)
MAT READ P

LET X=1 !分子
LET Y=1 !分母
FOR i=1 TO K
   LET X=X*(P(i)-1) !1,2,4,6,10,12,16,18,…
   LET Y=Y*P(i)     !2,3,5,7,11,13,17,19,…
NEXT i

DIM C(P(K)^2 TO P(K+1)^2-1)
MAT C=ZER

FOR J=1 TO 2^K-1 !k個からm個を選ぶ
   LET T=J

   LET S=1 !その積
   LET B=-1 !符号 ※奇数個は正、偶数個は負
   FOR i=1 TO K !k桁の2進法に展開する(ビットパターン)
      IF MOD(T,2)=1 THEN
         LET S=S*P(i)
         LET B=-B
      END IF
      LET T=INT(T/2)
   NEXT i
   LET YS=Y/S
   FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
      LET C(N)=C(N)+B*MOD(N,S)*YS
   NEXT N

NEXT J

FOR N=P(K)^2 TO P(K+1)^2-1 !結果を表示する
   PRINT N; (N*X+C(N))/Y+K-1;"個"
NEXT N

PRINT TIME-t0
END




> この数式がどのように求められた?


k=3すなわちp=2,3,5、n=5^2..7^2-1すなわちn=25..48 のとき、
  (n*(2-1)*(3-1)*(5-1)/(2*3*5))
 +(mod(n,2)/2+mod(n,3)/3+mod(n,5)/5)
 -(mod(n,2*3)/(2*3)+mod(n,2*5)/(2*5)+mod(n,3*5)/(3*5))
 +mod(n,2*3*5)/(2*3*5)
 +(3-1)
で与えられる。

mod(n,p)=n-[n/p]pより、mod(n,p)/p=n/p-[n/p]となる。

modを置き換えると、
mod(n,2)/2+mod(n,3)/3+mod(n,5)/5
=(n-[n/2]*2)/2+(n-[n/3]*3)/3+(n-[n/5]*5)/5
=(n/2-[n/2])+(n/3-[n/3])+(n/5-[n/5])
=(n/2+n/3+n/5)-([n/2]+[n/3]+[n/5])

mod(n,2*3)/(2*3)+mod(n,2*5)/(2*5)+mod(n,3*5)/(3*5)
=(n/(2*3)+n/(2*5)+n/(3*5))-([n/(2*3)]+[n/(2*5)]+[n/(3*5)])

mod(n,2*3*5)/(2*3*5)=n/(2*3*5)-[n/(2*3*5)]
なので、

前半部分は、
n((3*5+2*5+2*3)-(5+3+2)+1)/(2*3*5)=22n/(2*3*5)
(n*(2-1)*(3-1)*(5-1)/(2*3*5))=8n/(2*3*5)と合わせると、n

さらに後半部分(ガウス関数)と(3-1)とを合わせると、
 n-([n/2]+[n/3]+[n/5]-([n/(2*3)]+[n/(2*5)]+[n/(3*5)])+[n/(2*3*5])+(3-1)
となる。
これは包除原理(個数定理)で個数を求める式ある。

他も同様(だと思う)


よって、逆にたどれば与式を得る。



参考 包除原理(個数定理)による
n=25の場合
√25=5以下の素数は、2,3,5
1からnまでの数で、pで割り切れる数の個数は、[n/p]
包除原理(個数定理)より、2,3,5のいずれかで割り切れる数の個数は、
[25/2]+[25/3]+[25/5] -([25/(2*3)]+[25/(3*5)]+[25/(5*2)]) +[25/(2*3*5)] = 18
この値は、1を含み、2,3,5が除かれている。
よって、素数の個数は、(25-18)+3-1=9個

 

素数個数関数

 投稿者:しばっち  投稿日:2015年10月 1日(木)23時29分30秒
  http://tsujimotter.hatenablog.com/entry/2014/06/29/002109
https://ja.wikipedia.org/wiki/リーマンの素数公式

OPTION ARITHMETIC COMPLEX
PUBLIC NUMERIC P(100)
FOR I=1 TO 100
   READ K
   LET P(I)=COMPLEX(.5,K) !'ゼータ関数 非自明な零点  http://www.dtc.umn.edu/~odlyzko//zeta_tables/index.html
NEXT I
DATA 14.134725142
DATA 21.022039639
DATA 25.010857580
DATA 30.424876126
DATA 32.935061588
DATA 37.586178159
DATA 40.918719012
DATA 43.327073281
DATA 48.005150881
DATA 49.773832478
DATA 52.970321478
DATA 56.446247697
DATA 59.347044003
DATA 60.831778525
DATA 65.112544048
DATA 67.079810529
DATA 69.546401711
DATA 72.067157674
DATA 75.704690699
DATA 77.144840069
DATA 79.337375020
DATA 82.910380854
DATA 84.735492981
DATA 87.425274613
DATA 88.809111208
DATA 92.491899271
DATA 94.651344041
DATA 95.870634228
DATA 98.831194218
DATA 101.317851006
DATA 103.725538040
DATA 105.446623052
DATA 107.168611184
DATA 111.029535543
DATA 111.874659177
DATA 114.320220915
DATA 116.226680321
DATA 118.790782866
DATA 121.370125002
DATA 122.946829294
DATA 124.256818554
DATA 127.516683880
DATA 129.578704200
DATA 131.087688531
DATA 133.497737203
DATA 134.756509753
DATA 138.116042055
DATA 139.736208952
DATA 141.123707404
DATA 143.111845808
DATA 146.000982487
DATA 147.422765343
DATA 150.053520421
DATA 150.925257612
DATA 153.024693811
DATA 156.112909294
DATA 157.597591818
DATA 158.849988171
DATA 161.188964138
DATA 163.030709687
DATA 165.537069188
DATA 167.184439978
DATA 169.094515416
DATA 169.911976479
DATA 173.411536520
DATA 174.754191523
DATA 176.441434298
DATA 178.377407776
DATA 179.916484020
DATA 182.207078484
DATA 184.874467848
DATA 185.598783678
DATA 187.228922584
DATA 189.416158656
DATA 192.026656361
DATA 193.079726604
DATA 195.265396680
DATA 196.876481841
DATA 198.015309676
DATA 201.264751944
DATA 202.493594514
DATA 204.189671803
DATA 205.394697202
DATA 207.906258888
DATA 209.576509717
DATA 211.690862595
DATA 213.347919360
DATA 214.547044783
DATA 216.169538508
DATA 219.067596349
DATA 220.714918839
DATA 221.430705555
DATA 224.007000255
DATA 224.983324670
DATA 227.421444280
DATA 229.337413306
DATA 231.250188700
DATA 231.987235253
DATA 233.693404179
DATA 236.524229666
FOR X=2 TO 100
   PRINT X;":";π(X)
NEXT X
END

EXTERNAL  FUNCTION π(X) !'素数個数関数
OPTION ARITHMETIC COMPLEX
LET S=R(X)-T(X)
!'FOR M=1 TO INT(LOG2(X)) !'第3項
!'   IF U(M)<>0 THEN
!'      LET A=X^(1/M)
!'      RESTORE
!'      LET SS=0
!'      FOR I=1 TO 7 !'ガウス・ラゲール求積
!'         READ TT,W
!'         LET SS=SS+F2(TT)*EXP(TT-A)*W
!'      NEXT I
!'      LET S=S+U(M)/M*(SS-LOG(2))
!'   END IF
!'NEXT M
LET π=S
DATA     .1930436765603624138382479,4.0931895170127390213043288E-01
DATA    1.0266648953391919503451994,4.2183127786171977992928101E-01
DATA    2.5678767449507462069077862,1.4712634865750527839537418E-01
DATA    4.9003530845264845681017144,2.0633514468716939865705615E-02
DATA    8.1821534445628607910818276,1.0740101432807455221319596E-03
DATA   12.7341802917978137580126425,1.5865464348564201268732622E-05
DATA   19.3957278622625403117125821,3.1703154789955805622713222E-08
END FUNCTION

EXTERNAL  FUNCTION F2(T)
OPTION ARITHMETIC COMPLEX
LET F2=1/T/(T*T-1)/LOG(T)
END FUNCTION

EXTERNAL  FUNCTION R(X) !'リーマン関数(主要項)
OPTION ARITHMETIC COMPLEX
FOR M=1 TO INT(LOG2(X))
   IF U(M)<>0 THEN LET S=S+U(M)/M*LI(X^(1/M))
NEXT M
LET R=S
END FUNCTION

EXTERNAL  FUNCTION EI(Z) !'指数積分
OPTION ARITHMETIC COMPLEX
LET EULER=.57721566490153286
LET S=LOG(Z)+EULER
LET A=1
FOR K=1 TO 1000
   LET A=A*Z/K
   LET S=S+A/K
   IF ABS(A)<1E-15 THEN EXIT FOR
NEXT K
LET EI=S
END FUNCTION

EXTERNAL  FUNCTION LI(Z) !'対数積分
OPTION ARITHMETIC COMPLEX
LET LI=EI(LOG(Z))
END FUNCTION

!'EXTERNAL  FUNCTION T(X) !'振動項(うまく収束しない)
!'OPTION ARITHMETIC COMPLEX
!'FOR M=1 TO INT(LOG2(X))
!'   IF U(M)<>0 THEN
!'      FOR K=1 TO 100
!'         LET PP=P(K)/M
!'         LET S=S+U(M)/M*(LI(X^PP)+LI(X^CONJ(PP)))
!'      NEXT K
!'   END IF
!'NEXT M
!'LET T=S
!'END FUNCTION

EXTERNAL  FUNCTION T(X) !'振動項
OPTION ARITHMETIC COMPLEX
FOR M=1 TO INT(LOG2(X))
   FOR K=1 TO 100
      IF U(M)<>0 THEN LET S=S+U(M)/M*2*SQR(X)/ABS(P(K))/LOG(X)*COS(IM(P(K))*LOG(X)-ANGLE(RE(P(K)),IM(P(K))))
   NEXT K
NEXT M
LET T=S
END FUNCTION

EXTERNAL  FUNCTION U(N) !'メビウス関数
OPTION ARITHMETIC COMPLEX
FOR K=1 TO N
   IF GCD(K,N)=1 THEN
      LET S=S+COS(2*PI*K/N)
   END IF
NEXT K
LET U=INT(S+.1)
END FUNCTION

EXTERNAL FUNCTION GCD(M,N)
OPTION ARITHMETIC COMPLEX
DO WHILE N<>0
   LET TT=MOD(M,N)
   LET M=N
   LET N=TT
LOOP
LET GCD=M
END FUNCTION

----------------------------------------------------------------------------------

OPTION ARITHMETIC RATIONAL
FOR J=2 TO 100
   PRINT J;":";π(J)
NEXT J
END

EXTERNAL  FUNCTION π(M) !'素数個数関数
OPTION ARITHMETIC RATIONAL
LET S=0
FOR J=2 TO M
   LET S=S+F(J)
NEXT J
LET π=S
END FUNCTION

EXTERNAL  FUNCTION F(J)
OPTION ARITHMETIC RATIONAL
LET F=INT(((FACT(J-1)+1)/J)-INT(FACT(J-1)/J))
END FUNCTION

----------------------------------------------------------------------------------

OPTION ARITHMETIC NATIVE
FOR I=2 TO 100
   PRINT I;":";PRIMECOUNT(I)
NEXT I
END

EXTERNAL  FUNCTION PRIMECOUNT(N) !'素数個数関数
OPTION ARITHMETIC NATIVE
FOR I=2 TO N
   LET FL=0
   FOR J=2 TO INT(SQR(I))
      IF MOD(I,J)=0 THEN
         LET FL=1
         EXIT FOR
      END IF
   NEXT J
   IF FL=0 THEN LET C=C+1
NEXT I
LET PRIMECOUNT=C
END FUNCTION
 

Re: 与えられた数より小さい素数の個数について

 投稿者:たろさ  投稿日:2015年10月 2日(金)00時38分50秒
  > No.3865[元記事へ]

山中和義さんへのお返事です。


> 前出のプログラムの修正です。
>
>  FOR N=P(K)^2 TO P(K+1)^2-1 !範囲
>     LET C(N)=C(N)+B*MOD(N,S)*Y/S
>  NEXT N
> で、Y/SはFOR文内では定数ですから外に出します。この方が速いです。
>
> Ver3.1

現在 Ver3  にて K=24  計算中です。

私の自作のプログラムより3倍位はやいので、予想している時間は24時間前後です。



> > この数式がどのように求められた?

> よって、逆にたどれば与式を得る。


私は算数レベルの知識で下記の式をプログラムにしました。
YouTube

enlong chiouさん
https://www.youtube.com/channel/UCgNAhHlBDOJ6hTkJVlf5gIw

動画サイトのコメント

------------------------------------------------------------------------
pi(1)=0,
pi(10)=10*((2-1)/2)*((3-1)/3)+MOD(10,2)/2+MOD(10,3)/3-MOD(10,2*3)/(2*3)+(2-1)=10/3+0/2+1/3-4/6+1=4,
pi(100)=(100*1*2*4*6/(2*3*5*7))+(0/2)+(1/3)+(0/5)+(2/7)-(4/6)-(0/10)-(2/14)-(10/15)-(16/21)-(30/35)+(10/30)+(16/42)+(30/70)+(100/105)-(100/210)+4-1=25,
------------------------------------------------------------------------
この後にコメントがあるのですが、わたしは読んでも理解できませんでした。


> 参考 包除原理(個数定理)による

大変参考になりました。重ねて感謝致します。

リーマン予想について、私の知識は、

書店で売られている本で読んだ程度の知識です。

 ζ(s)のゼロ点は、カシオ高精度計算サイトにて計算すると

算定対象の桁数を増やすと、ゼロ点が移動してしまいます。

なので、今回の数式(enlong chiouさん)を求める場合

例えば100だとすると、小数点以下3桁でゼロ点を求めれば良いのかも

その様な予感がしました。

しかし、解析接続法については、わかりません。

もし、上手く接続できると、ブラフに現れるのは素数階段になるはずです。

ここがわからないのに、素数の個数を求める数式だけ

ここで得られた、その数式の法則性も興味があります。

一つ問題なのは、数学的に数式で書くと、どのように書けるのだろう。

と、言う事です。もし、数論的に発表予定がある場合はその後でお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年10月 2日(金)01時44分34秒
  > No.3866[元記事へ]

しばっちさんへのお返事です。

今、私が一番見たいプログラムです。感激しました。書店で売られている本よりも

興奮しました。

私の個人的予想では、プログラムで書きました。

FOR n=1 TO 2
   PRINT n;
   PRINT n-1
NEXT n

FOR n=3 TO 48
   PRINT n;
   LET  p=MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)
   PRINT p
NEXT n

FOR n=49 TO 120
   PRINT n;
   LET  p=MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210
   PRINT p
NEXT n

FOR n=121 TO 168
   PRINT n;
   LET  p=MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155+MOD(n,2310)/2310
   PRINT p
NEXT n


END



数式を解読していた時、数式の部分を抜き取ると

実行結果
---------------------
18  0
19  .666666666666667
20  .333333333333333
21  0
22 -.333333333333333
23  .333333333333333
24  0
25  .666666666666667
26  .333333333333333
27  0
--------------------

一次篩6n±1の探究時見つけた性質

(6n-1)/3    小数点以下.66666666

(6n+1)/3    小数点以下.333333333

私の場合は、判別法に使用しています。


この度々登場するゼロと、非自明なゼロ点には、何らかの関係があるのでは?

そのように思っていました。

ちなみにこのゼロは K=4 (2,3,5,7) 以降は出ません。105  0  確認

素数の性質探究をしていると、ある一定領域にだけある性質が見られます。

今回enlong chiouさんの数式もどこまでなのか?

検証中です。K=25 でも10000  せめて10万までは、と思ってていますが

どうでしょうか?



http://blogs.yahoo.co.jp/donald_stinger

 

ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年10月 2日(金)02時34分40秒
  ! ζ(x)  X=500 を求めるプログラム
100 OPTION ARITHMETIC RATIONAL
101 LET t0=TIME
110 LET format$="#." & REPEAT$("#",1140)
120 LET p=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420199
130 LET b=-16596380640568557229852123088077134206658664302806671892352650993155331641220960084014956088135770921465025323942809207851857992860213463783252745409096420932509953165466735675485979034817619983727209844291081908145597829674980159889976244240633746601120703300698329029710482600069717866917229113749797632930033559794717838407415772796504419464932337498642714226081743688706971990010734262076881238322867559275748219588404488023034528296023051638858467185173202483888794342720837413737644410765563213220043477396887812891242952336301344808165757942109887803692579439427973561487863524556256869403384306433922049078300720480361757680714198044230522015775475287075315668886299978958150756677417180004362981454396613646612327019784141740499835461/8365830
140 LET q=1
150 FOR n=1 TO 500 ! 階乗数
160    LET k=n*q
170    LET q=k
180 NEXT n
190 LET z=(-1*b*2^499)/k*p^500
200 PRINT USING format$: z
210 PRINT TIME-t0;"秒で計算しました"
220 END

実行結果

1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305493636349960468205197939321361769978940274057232666389361390928129162652472045770185751013331084857067694824349847835941470546838642267279113733370156013676833730923434530872620333347455442425607860198374600438389341457088354275417213227146995205688275457893692917327448071083856710385116593545333980085810590902040565924433365890972440295472134967177946250193272901910685580918026995490249850797834908996937559304168159737646719914815706639565554808346422994189258230903331312648052123784001572222418899043993491675713595743325898062662150739575848900411992098649088533778468543823487152960410139299824092427165312585873162835834785390156964316151479380817898770583201397753046035925243913393144514022226717256820109064643891961466904626664792337893058039537925892858730037171249346830463620064564420926132913346370610578490178139276012234619998000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
19027/100 秒で計算しました

----------------------------
LET z=(-1*b*2^499)/k*p^500
----------------------------
数式について

P=π
B=ベルヌーイ数 -1と1が出ます。
K=階乗

----------------------------
なお、ζ(x)求められるのは偶数のみで奇数はできせん。

質問です。

REPEAT$("#",1140)

999以上は全て0になるのでしょうか?


上記の数式はWikipedia 「リーマンゼータ関数」ゼータ関数の特殊値を参照しました。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%BC%E3%83%BC%E3%82%BF%E9%96%A2%E6%95%B0

http://blogs.yahoo.co.jp/donald_stinger

 

Sieve of Sundaram サンダラムの篩(ふるい)

 投稿者:たろさ  投稿日:2015年10月 2日(金)02時40分53秒
  Wikipedia「サンダラムの篩」を参照しました。
https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%83%80%E3%83%A9%E3%83%A0%E3%81%AE%E7%AF%A9


!  Sieve of Sundaram サンダラムの篩(ふるい)
! 素数リスト作成プログラム
LET t0=TIME
ASK DIRECTORY d$
LET t0=TIME
LET f_name1$="PRIME_N_P100003"   ! ファイル名
LET f1$=d$&"\"&f_name1$&".txt"
PRINT "ファイル保存場所[1] = ";f1$
OPEN #1: NAME f1$
ERASE #1

PRINT #1:2
PRINT #1:3
LET N=50005 !素数100003まで生成   99991(9592nd prime)
DIM A(N)
FOR I=1 TO N
   LET  A(I)=0
NEXT I
LET  A(1)=1
LET  S=3
LET  D=4
LET U=INT(N/3)
100 FOR I=D TO N STEP S
       LET  A(I)=1
    NEXT I
    LET  S=S+2
200 LET  D=D+3
    IF A(D)=0 THEN 200
    IF D>(N/3) THEN 300
    GOTO 100
300 FOR I=1 TO N
       IF A(I)=1 THEN 400
       LET z=I*2+1
       PRINT #1:z
400 NEXT I

    PRINT TIME-t0;"秒で計算しました"
END



実行結果

ファイル保存場所[1] = E:\10進BASIC\サンダラムの篩\PRIME_N_P100003.txt

.64 秒で計算しました(AMD 2.4GHz Win8.2 32bt の環境)

----------------------------------------------------------------
素数 2と3は出ませんので、プリント出力しています。

プログラムを保存したフォルダーに素数リスト ファイル生成されます。

素数生成の処理速度を高速化する狙いで書きました。

PRINT 出力時での比較ではエラトステネスの篩と同程度でした。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 素数個数関数

 投稿者:しばっち  投稿日:2015年10月 2日(金)20時41分31秒
  > No.3868[元記事へ]

たろささんへのお返事です。

> 私の個人的予想では、プログラムで書きました。
>
> FOR n=1 TO 2
>    PRINT n;
>    PRINT n-1
> NEXT n
>
> FOR n=3 TO 48
>    PRINT n;
>    LET  p=MOD(n,2)/2+MOD(n,3)/3-MOD(n,2*3)/(2*3)
>    PRINT p
> NEXT n
>
> FOR n=49 TO 120
>    PRINT n;
>    LET  p=MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,15)/15-MOD(n,21)/21-MOD(n,35)/35+MOD(n,30)/30+MOD(n,42)/42+MOD(n,70)/70+MOD(n,105)/105-MOD(n,210)/210
>    PRINT p
> NEXT n
>
> FOR n=121 TO 168
>    PRINT n;
>    LET  p=MOD(n,2)/2+MOD(n,3)/3+MOD(n,5)/5+MOD(n,7)/7+MOD(n,11)/11-MOD(n,6)/6-MOD(n,10)/10-MOD(n,14)/14-MOD(n,22)/22-MOD(n,15)/15-MOD(n,21)/21-MOD(n,33)/33-MOD(n,35)/35-MOD(n,55)/55-MOD(n,77)/77+MOD(n,30)/30+MOD(n,42)/42+MOD(n,66)/66+MOD(n,70)/70+MOD(n,105)/105+MOD(n,110)/110+MOD(n,165)/165+MOD(n,385)/385+MOD(n,154)/154+MOD(n,231)/231-MOD(n,210)/210-MOD(n,330)/330-MOD(n,462)/462-MOD(n,770)/770-MOD(n,1155)/1155+MOD(n,2310)/2310
>    PRINT p
> NEXT n
>
> END

山中氏のプログラムを少しいじってみました。


OPTION ARITHMETIC RATIONAL
DIM P(25)
MAT READ P
DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
PRINT "SELECT CASE N"
FOR K=1 TO 10
   IF K=1 THEN
      PRINT "CASE 2 TO 8"
   ELSE
      PRINT "CASE";P(K)^2;"TO";P(K+1)^2-1
   END IF
   LET X=1
   LET Y=1
   FOR I=1 TO K
      LET X=X*(P(I)-1)
      LET Y=Y*P(I)
   NEXT I
   PRINT "P=N*";STR$(X/Y);
   LET L=0
   FOR J=1 TO 2^K-1
      LET T=J
      LET S=1
      LET B=-1
      FOR I=1 TO K
         IF MOD(T,2)=1 THEN
            LET S=S*P(I)
            LET B=-B
         END IF
         LET T=INT(T/2)
      NEXT I
      IF B<0 THEN PRINT "-"; ELSE PRINT "+";
      LET S$="MOD(N,"&STR$(S)&")/"&STR$(S)
      PRINT S$;
      LET L=L+LEN(S$)
      IF L>1000 THEN
         LET L=0
         PRINT
         PRINT "P=P";
      END IF
   NEXT J
   IF K>1 THEN PRINT "+";STR$(K-1) ELSE PRINT
NEXT K
PRINT "CASE ELSE"
PRINT "P=0"
PRINT "END SELECT"
END
 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年10月 2日(金)21時15分29秒
  > No.3871[元記事へ]

しばっちさんへのお返事です。

ありがとうございます。最初は電卓で計算してました。

今年の4月から10進BASIC を始めました。

まだ、副プログラムの勉強中です。年齢的には3回目の二十歳代に爆走中なので

中々進みません。


ゼータ関数のζ(x)奇数を求める為

OPTION ARITHMETIC COMPLEX

LET P1=3.141592653589793
LET  E=2.718281828459045
FOR X= 3 TO 12
   FOR N= 1 TO 500
      LET P=(2*P1*n)
      LET Z=(1/(n^x*(E^P-1)))+R
      LET R=Z
   NEXT N
NEXT X
PRINT Z
END



エラー
EXTYP 1002
数値演算の桁あふれ

どのようにしたら良いかわかりません。


カシオ高精度計算サイト

zeta(3)-(7/180)*pi^3=-0.0037427455187320547576740910980487115437749296661

zeta(7)-(19/56700)*pi^7=-0.0037419276931926807928289645835153181149727186343





http://blogs.yahoo.co.jp/donald_stinger

 

Re: 素数個数関数

 投稿者:しばっち  投稿日:2015年10月 2日(金)21時53分11秒
  > No.3872[元記事へ]

たろささんへのお返事です。

> カシオ高精度計算サイト
>
> zeta(3)-(7/180)*pi^3=-0.0037427455187320547576740910980487115437749296661
>
> zeta(7)-(19/56700)*pi^7=-0.0037419276931926807928289645835153181149727186343

OPTION ARITHMETIC NATIVE
LET S=0
FOR N=1 TO 100
   LET S=S+1/N^3/(EXP(2*PI*N)-1)
NEXT N
PRINT 7/180*PI^3-2*S

LET S=0
FOR N=1 TO 100
   LET S=S+1/N^7/(EXP(2*PI*N)-1)
NEXT N
PRINT 19/56700*PI^7-2*S
END

とりあえず下記のプログラムでゼータ関数計算できます

OPTION ARITHMETIC COMPLEX
LET X=COMPLEX(.5,14)
DO
   LET X=X-ZETA(X)/DF(X)
LOOP UNTIL ABS(ZETA(X))<1E-12
PRINT X
END

EXTERNAL  FUNCTION DF(X)
OPTION ARITHMETIC COMPLEX
LET H=1/128
LET DF=(ZETA(X+H)-ZETA(X))/H
END FUNCTION

EXTERNAL  FUNCTION ZETA(S)
OPTION ARITHMETIC COMPLEX
FOR M=1 TO 300
   LET SS=0
   FOR J=1 TO M
      LET SS=SS+(-1)^(J-1)*COMB(M-1,J-1)*J^(-S)
   NEXT J
   LET SUM=SUM+SS*2^(-M)
   IF ABS(SUM-S0)<1E-12 THEN
      LET ZETA=SUM/(1-2^(1-S))
      EXIT FUNCTION
   END IF
   LET S0=SUM
NEXT M
STOP
END FUNCTION

 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年10月 3日(土)17時41分24秒
  しばっちさんへのお返事です。

ありがとうございます。自分の不勉強を棚に上げて、ろくに計算もしないで聞いてしまいました。

> たろささんへのお返事です。
>
> > カシオ高精度計算サイト
> >
> > zeta(3)-(7/180)*pi^3=-0.0037427455187320547576740910980487115437749296661
> >
> > zeta(7)-(19/56700)*pi^7=-0.0037419276931926807928289645835153181149727186343

(1/(n^3*e^(2*pi*n)-1))
(1/(n^7*e^(2*pi*n)-1))
カシオ高精度計算サイトで計算すると

計算回数 約300回 1000桁近くに
n^3---300買い目 8.7664534439000242640980007802080033699960889978E-827
n^7---300買い目 1.08227820295062027951827170126024732962914678985E-836

これをファイルにして読み込んで足しました。

!ゼータ関数 無限級数
OPTION ARITHMETIC RATIONAL
LET t0=TIME
LET A1=300
DIM A(A1)  !(1/(n^3*e^(2*pi*n)-1))

ASK DIRECTORY d$
LET f_name3$="ZATA_300_7"  ! ファイル名
LET f3$=d$&"\"&f_name3$&".txt"
!PRINT "ファイル保存場所[3] = ";f3$
OPEN #3: NAME f3$ ,ACCESS INPUT
FOR i2=1 TO A1
   INPUT #3: A(i2)
NEXT i2
CLOSE #3

FOR i2=1 TO A1
   LET Z=Z+A(i2)
NEXT i2
PRINT z

PRINT TIME-t0;"秒で計算しました"
END

------------------------------------------
有理数で出力すと

n^3

LET A=935686379017925191250796553673194052656087227132291731219603613975701972323372795070695707341051694333041461416617798292371870729138153420944855330166120553231062822792396969033035360742846471276962070515879208592530422237728427074787476956806821438649529241985758293460776861047916507563818694858789693813033935181462985075817986091401949987781387743696302049044433168708633425757646360787940379289393388500551855962450087280840910692903919579357382237509178105019962393425014909447675389857239761822966852476224426083709633194368749215953739803792878253703381223654493097348243698510213924057817098878283764085832228580612853735483995801712437547770824140608563623408511336820377837558294827506581439784956022278968540875346486789721414494706684449204326539775370091752190464631981938297646713105054959842789605364543275838448245221799947599825254618548523356213744489
LET B=500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
LET C=A/B
PRINT C*2
END
---------------------------------------
n^7

LET A=3741927693004140332863323157154235280467492756639334868567736653531814410941068770273590457531817355482005567002520408237720864547747721915916632587337776871933554687440080221071837310612327048769869521368660532830662354618883340779056093909806287487307684737302990106378585033070689464667036609902257636263307834325932679257576365681308595684841223259003559811275552937939579468842247542992272639058147977458713961480879276330002345365041104429191683348220167165522183005997757054728185792689086254331004637345347886072827617812926614305566197373185614245504655532125170388501140465714366951122966623111461256342374237003511786934661579718335126518422632496452302601740010396932535438346433415789501967033598982822413606269794652725843767089198596350512947505152492439682962193409574018904035316878264253458871562563344052079407237129934768119930808096245605085658529547003491997
LET B=2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
LET C=A/B
PRINT C*2
END

--------------------------------------
この他、最初は20個のDATA読み込みで試しましたところ、n^3の場合は20個で20桁近くになり収束は速いと思いました。

この有理数を1000桁モードで小数にすると

              300   - .003742745516071700765003186214692776210624348908529166924878414455902807889293491180282782829364206777332165845666471193169487482916552613683779421320664482212924251291169587876132141442971385885107848282063516834370121688950913708299149907827227285754598116967943033173843107444191666030255274779435158775252135740725851940303271944365607799951125550974785208196177732674834533703030585443151761517157573554002207423849800349123363642771615678317429528950036712420079849573700059637790701559428959047291867409904897704334838532777474996863814959215171513014813524894617972389392974794040855696231268395513135056343328914322451414941935983206849750191083296562434254493634045347281511350233179310026325759139824089115874163501385947158885657978826737796817306159101480367008761858527927753190586852420219839371158421458173103353792980887199790399301018474194093424854977956
              100    - .0037427455160717007650031862146927762106243489085291669248784144559028078892934911802827828293642067773321658456664711931694874829165526136837794213206644822129242512911695878761321414429713858851078482820635168343701216889509137082991499078272272857545981169679430331738431074441868261957336010182715750390027869414412865137
zeta(3)-(7/180)*pi^3=-0.0037427455187320547576740910980487115437749296661

----------------------------------------------
zeta(7)-(19/56700)*pi^7=-0.0037419276931926807928289645835153181149727186343
              300       - .003741927693004140332863323157154235280467492756639334868567736653531814410941068770273590457531817355482005567002520408237720864547747721915916632587337776871933554687440080221071837310612327048769869521368660532830662354618883340779056093909806287487307684737302990106378585033070689464667036609902257636263307834325932679257576365681308595684841223259003559811275552937939579468842247542992272639058147977458713961480879276330002345365041104429191683348220167165522183005997757054728185792689086254331004637345347886072827617812926614305566197373185614245504655532125170388501140465714366951122966623111461256342374237003511786934661579718335126518422632496452302601740010396932535438346433415789501967033598982822413606269794652725843767089198596350512947505152492439682962193409574018904035316878264253458871562563344052079407237129934768119930808096245605085658529547003491997


他サイトの計算結果を持ち込み大変失礼だとお詫びします。

素人の興味本位の探究なので、お許しください。

自分の計算の仕方が間違っているのか不安でもあるし、

少々困惑しています。

別件で恐縮ですが


素数個数関数のプログラムで1000万刻みの最後の11を算出しています。

毎度説明の仕方が悪いので画像を添付させて頂きます。

現在5000万のラスト11個を計算中です。

どこまで、計算できるかわかりませんが、興味があります。

http://blogs.yahoo.co.jp/donald_stinger

 

ガウス・クロンロッド求積

 投稿者:しばっち  投稿日:2015年10月 3日(土)22時26分16秒
  https://ja.wikipedia.org/wiki/ガウス=クロンロッド求積法
http://keisan.casio.jp/exec/system/1331182061
https://en.wikipedia.org/wiki/Gaussian_quadrature

!'/1
!'| f(x)dx
!'/-1
LET A=1
!'INPUT  PROMPT "下限 =":A
INPUT PROMPT "上限 =":B
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO 15
   READ X,W
   LET S=S+W*FUNC(U+V*X)*V
NEXT I
PRINT S
PRINT LOG(B)
DATA -0.991455371120813,0.022935322010529
DATA -0.949107912342759,0.063092092629979
DATA -0.864864423359769,0.104790010322250
DATA -0.741531185599394,0.140653259715525
DATA -0.586087235467691,0.169004726639267
DATA -0.405845151377397,0.190350578064785
DATA -0.207784955007898,0.204432940075298
DATA 0.000000000000000,0.20948214108472
DATA 0.991455371120813,0.022935322010529
DATA 0.949107912342759,0.063092092629979
DATA 0.864864423359769,0.104790010322250
DATA 0.741531185599394,0.140653259715525
DATA 0.586087235467691,0.169004726639267
DATA 0.405845151377397,0.190350578064785
DATA 0.207784955007898,0.204432940075298
END

EXTERNAL FUNCTION FUNC(X)
LET FUNC=1/X
END FUNCTION
 

ガウス・ロバート求積

 投稿者:しばっち  投稿日:2015年10月 3日(土)22時27分18秒
  http://mathworld.wolfram.com/LobattoQuadrature.html
http://keisan.casio.jp/exec/system/1360718708

!'/1
!'| f(x)dx
!'/-1
LET N=8
LET H=1/N/7
DIM X(N),W(N)
LET I=1
LET X(1)=-1
LET X(N)=1
LET W(1)=2/N/(N-1)
LET W(N)=W(1)
PRINT "        零点                重み"
FOR XX=-1+H TO 1-H STEP H
   LET LO=XX
   LET HI=XX+H
   IF LEGENDREDIFF(N-1,LO)*LEGENDREDIFF(N-1,HI)<0 THEN
      DO
         LET M=(LO+HI)/2
         IF LEGENDREDIFF(N-1,LO)*LEGENDREDIFF(N-1,M)<0 THEN LET HI=M ELSE LET LO=M
      LOOP UNTIL ABS(LO-HI)<1E-13
      LET I=I+1
      LET X(I)=LO
      LET W(I)=WEIGHT(N,X(I))
      PRINT I;":";X(I);W(I)
   END IF
NEXT XX
LET A=1
INPUT  PROMPT "LOG(X) X=":B
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO N
   LET S=S+W(I)*F(U+V*X(I))*V
NEXT I
PRINT S
PRINT LOG(B)
END

EXTERNAL  FUNCTION F(X)
LET F=1/X
END FUNCTION

EXTERNAL FUNCTION LEGENDRE(K,X)
LET OLDP=1
LET P=X
FOR N=1 TO K-1
   LET NEWP=((2*N+1)*X*P-N*OLDP)/(N+1)
   LET OLDP=P
   LET P=NEWP
NEXT N
LET LEGENDRE=P
END FUNCTION

EXTERNAL FUNCTION LEGENDREDIFF(N,X)
LET LEGENDREDIFF=(N*X*LEGENDRE(N,X)-N*LEGENDRE(N-1,X))/(X*X-1)
END FUNCTION

EXTERNAL FUNCTION WEIGHT(N,X)
LET WEIGHT=2/N/(N-1)/LEGENDRE(N-1,X)^2
END FUNCTION
 

ガウス・ヤコビ求積

 投稿者:しばっち  投稿日:2015年10月 3日(土)22時28分50秒
  https://en.wikipedia.org/wiki/Gauss?Jacobi_quadrature

!'/1
!'| f(x)dx/(1-x)^α/(1+x)^β
!'/-1
LET N=10
LET ALPHA=1 !'α,β>-1 整数のみ
LET BETA=2
LET H=1/N/8
DIM X(N),W(N)
PRINT "          零点                重み"
FOR XX=-1+H TO 1-H STEP H
   LET LO=XX
   LET HI=XX+H
   IF P(ALPHA,BETA,N,LO)*P(ALPHA,BETA,N,HI)<0 THEN
      DO
         LET M=(LO+HI)/2
         IF P(ALPHA,BETA,N,LO)*P(ALPHA,BETA,N,M)<0 THEN LET HI=M ELSE LET LO=M
      LOOP UNTIL ABS(HI-LO)<1E-13
      LET I=I+1
      LET X(I)=(LO+HI)/2
      LET W(I)=LAMDA(ALPHA,BETA,N,X(I))
      PRINT I;":";X(I);W(I)
   END IF
NEXT XX
INPUT PROMPT "下限 =":A
INPUT PROMPT "上限 =":B
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO N
   LET S=S+W(I)*F(U+V*X(I))*V/(1-X(I))^ALPHA/(1+X(I))^BETA
NEXT I
PRINT S
PRINT B^3/3-A^3/3
END

EXTERNAL  FUNCTION F(X)
LET F=X*X
END FUNCTION

EXTERNAL  FUNCTION P(A,B,N,Z) !'Jacobi polynomials  ※ガンマ関数gamma(n+1)を階乗fact(n)で代用
FOR M=0 TO N
   LET S=S+COMB(N,M)*FACT(A+B+N+M)/FACT(A+M)*((Z-1)/2)^M
NEXT M
LET P=S*FACT(A+N)/FACT(N)/FACT(A+B+N)
END FUNCTION

EXTERNAL  FUNCTION DIFFP(K,A,B,N,Z) !'d^k/dz^k P(A,B,N,Z)
LET DIFFP=FACT(A+B+N+K)/2^K/FACT(A+B+N)*P(A+K,B+K,N-K,Z)
END FUNCTION

EXTERNAL  FUNCTION LAMDA(A,B,N,X)
LET LAMDA=-(2*N+A+B+2)/(N+A+B+1)*FACT(N+A)*FACT(N+B)/FACT(N+A+B)/FACT(N+1)*2^(A+B)/DIFFP(1,A,B,N,X)/P(A,B,N+1,X)
END FUNCTION
 

ガウス・チェビシェフ求積

 投稿者:しばっち  投稿日:2015年10月 3日(土)22時29分54秒
  https://en.wikipedia.org/wiki/Chebyshev?Gauss_quadrature

!'/1
!'|f(x)dx*SQR(1-x^2)
!'/-1
LET N=5000
!'INPUT PROMPT "下限 =":A
INPUT PROMPT "上限 =":B
LET A=1
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO N
   LET X=COS((2*I-1)/2/N*PI)
   LET XX=U+V*X
   LET S=S+SQR((B-XX)*(XX-A))*FUNC(XX)
   LET SS=SS+SQR(1-X*X)*FUNC(XX)*V
NEXT I
PRINT S*PI/N;SS*PI/N
PRINT LOG(B)
END

EXTERNAL FUNCTION FUNC(X)
LET FUNC=1/X
END FUNCTION

------------------------------------------------------------------------------------

!'/1
!'|f(x)dx/SQR(1-x^2)
!'/-1
LET N=5000
INPUT PROMPT "下限 =":A
INPUT PROMPT "上限 =":B
LET U=(B+A)/2
LET V=(B-A)/2
FOR I=1 TO N
   LET X=COS(I*PI/(N+1))
   LET XX=V*X+U
   LET W=PI/(N+1)*SIN(I*PI/(N+1))^2
   LET S=S+FUNC(XX)/SQR(1-X*X)*W*V
NEXT I
PRINT S
PRINT B^4/4-A^4/4
END

EXTERNAL FUNCTION FUNC(X)
LET FUNC=X^3
END FUNCTION
 

ガウス・ラゲール求積

 投稿者:しばっち  投稿日:2015年10月 3日(土)22時31分4秒
  http://keisan.casio.jp/exec/system/1360718967

!'/∞
!'| f(x)dx*exp(b*(x-a))/(x-a)^α  (α>-1)
!'/a
LET N=8
LET EPS=1E-12
DIM XX(N),WW(N)
LET H=1/N
LET ALPHA=2 !'整数のみ
PRINT "          零点                重み"
FOR X=0 TO 50 STEP H
   IF L(N,ALPHA,X)*L(N,ALPHA,X+H)<0 THEN
      LET A=X
      LET B=X+H
      DO
         LET C=(A+B)/2
         IF L(N,ALPHA,A)*L(N,ALPHA,C)<0 THEN LET B=C ELSE LET A=C
      LOOP UNTIL ABS(A-B)<EPS
      LET I=I+1
      LET XX(I)=C
      LET WW(I)=WEIGHT(N,ALPHA,C)
      PRINT I;":";XX(I);WW(I)
   END IF
NEXT  X
LET A=0
INPUT PROMPT "GAMMA(X) X=":U
FOR I=1 TO N
   LET  S=S+WW(I)*F(XX(I),U)*EXP(XX(I)-A)/(XX(I)-A)^ALPHA
NEXT I
PRINT S
END

EXTERNAL  FUNCTION F(U,X)
LET  F=EXP(-U)*U^(X-1)
END FUNCTION

EXTERNAL FUNCTION L(N,A,X) !'ラゲール陪関数
LET OLDLL=1
LET LL=A+1-X
FOR K=1 TO N-1
   LET NEWLL=((2*K+1+A-X)*LL-(K+A)*OLDLL)/(K+1)
   LET OLDLL=LL
   LET LL=NEWLL
NEXT  K
LET L=NEWLL
END FUNCTION

EXTERNAL FUNCTION WEIGHT(N,A,X)
LET WEIGHT=FACT(N+A)*X/FACT(N)/((N+1)*L(N+1,A,X))^2
END FUNCTION
 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年10月 4日(日)01時53分50秒
  > No.3874[元記事へ]

たろささんへのお返事です。

> しばっちさんへのお返事です。


ありがとうございます。


こんな計算もしてみました。


高精度計算サイト[実数 DEG]

(1/tanh(pi*n))/n^7  1000個の総和(50桁)
------------------------------------------------------------------------
1.0120912050751155074664592644340120758815100958282601246804669728404888


-------------------------------------------------------------------------------------
1.0120912050751155074664592644340120758815100958282601246804669728404888/pi^7*56700
=18.999999999999999996880540277244697295616850505925



(1/tanh(pi*n))/n^7  2000個の総和(50桁)
--------------------------------------------------------------------------
1.012091205075115507635321564404603510287059971500990852791159096798337985


1.012091205075115507635321564404603510287059971500990852791159096798337985/pi^7*56700
=19.00000000000000000005059420455169038793700513113


(1/tanh(pi*n))/n^7  3000個の総和(50桁)
--------------------------------------------------------------------------
1.01209120507511550763769343194927773249232817807833932916910770970633823112

1.01209120507511550763769343194927773249232817807833932916910770970633823112/pi^7*56700
=19.0000000000000000000951213016382277088487439393


(1/tanh(pi*n))/n^7  4000個の総和(50桁)
--------------------------------------------------------------------------
1.012091205075115507637881167504425825408204474419642945099075257796859948129

1.012091205075115507637881167504425825408204474419642945099075257796859948129/pi^7*56700
=19.000000000000000000098645663405158616205502952777


(1/tanh(pi*n))/n^7  5000個の総和(50桁)
--------------------------------------------------------------------------
1.012091205075115507637911166831755326765437554701091235620833422619592271006

1.012091205075115507637911166831755326765437554701091235620833422619592271006/pi^7*56700
=19.00000000000000000009920884112708953883115534931


(1/tanh(pi*n))/n^7  6000個の総和(50桁)
--------------------------------------------------------------------------
1.0120912050751155076379182566406059766316666495830741765231805968595393737569

1.0120912050751155076379182566406059766316666495830741765231805968595393737569/pi^7*56700
=19.00000000000000000009934193819135298118050986422


(1/tanh(pi*n))/n^7  7000個の総和(50桁)
--------------------------------------------------------------------------
1.0120912050751155076379204110636549249928637609364754523867038275935567615542

1.0120912050751155076379204110636549249928637609364754523867038275935567615542/pi^7*56700
=19.00000000000000000009938238320038453463162448429


(1/tanh(pi*n))/n^7  8000個の総和(50桁)
--------------------------------------------------------------------------
1.01209120507511550763792119155542153225318634345472572283306849628438330899987

1.01209120507511550763792119155542153225318634345472572283306849628438330899987/pi^7*56700
=19.000000000000000000099397035381424322780077309755


(1/tanh(pi*n))/n^7  9000個の総和(50桁)
--------------------------------------------------------------------------
1.01209120507511550763792151359170216143722870003985016630132115095218768678188

1.01209120507511550763792151359170216143722870003985016630132115095218768678188/pi^7*56700
=19.000000000000000000099403080972277471611835907716


(1/tanh(pi*n))/n^7  10000個の総和(50桁)
--------------------------------------------------------------------------
1.0120912050751155076379216604832428266938275622085900642365819094261613209145

1.0120912050751155076379216604832428266938275622085900642365819094261613209145/pi^7*56700
=19.00000000000000000009940583856888402718121212196


ラストDATA
10000 1E-28
-------------------------------------------------------------------------------------
1.0120912050751155076379533102494968961760606292754/pi^7*56700
=19.000000000000000000099999999999999999999999999998

1.0120912050751155076379533102494968961760606292755/pi^7*56700
=19.0000000000000000001

1.01209120507511550763795331024949689617606062927545/pi^7*56700
=19.000000000000000000099999999999999999999999999999

1.01209120507511550763795331024949689617606062927546/pi^7*56700
=19.0000000000000000001

1.012091205075115507637953310249496896176060629275455/pi^7*56700
=19.000000000000000000099999999999999999999999999999

1.012091205075115507637953310249496896176060629275456/pi^7*56700
=19.0000000000000000001

1.0120912050751155076379533102494968961760606292754556/pi^7*56700
=19.000000000000000000099999999999999999999999999999

1.0120912050751155076379533102494968961760606292754557/pi^7*56700
=19.0000000000000000001

1.01209120507511550763795331024949689617606062927545567/pi^7*56700
=19.000000000000000000099999999999999999999999999999

1.01209120507511550763795331024949689617606062927545568/pi^7*56700
=19.0000000000000000001

1.01209120507511550763795331024949689617606062927545567/pi^7*56700
=19.000000000000000000099999999999999999999999999999

1.01209120507511550763795331024949689617606062927545568/pi^7*56700
=19.0000000000000000001

1.012091205075115507637953310249496896176060629275455679/pi^7*56700
=19.000000000000000000099999999999999999999999999999

どこかで、DATA飛ばしてしまったのだろうか?


http://blogs.yahoo.co.jp/donald_stinger

 

Project Euler の問題から

 投稿者:GAI  投稿日:2015年10月 4日(日)15時55分31秒
  https://projecteuler.net/problem=484
arithmetic derivative に興味を持ち、検索作業をしていたらこの問題に出くわしました。
プログラムを組んで取り組もうとしましたが、5*10^15の値が余りにも大きいため、単純に
計算機の作業だけに任せても解答に至らない状態です。
何かしらの理論を組み合わせないといけないように感じるんですが、その法則や規則が見えて来ません。
もしヒントなりがありましたらお教え下さい。
 

Re: 素数個数関数

 投稿者:しばっち  投稿日:2015年10月 5日(月)00時15分29秒
  > No.3880[元記事へ]

たろささんへのお返事です。

下記のようにするとムダな計算をしないで済みます

OPTION ARITHMETIC NATIVE
FOR N=2 TO 10000000
   LET FL=0
   FOR J=2 TO INT(SQR(N))
      IF MOD(N,J)=0 THEN
         LET FL=1
         EXIT FOR
      END IF
   NEXT J
   IF FL=0 THEN LET COUNT=COUNT+1
   IF MOD(N,100000)=0 THEN PRINT N;COUNT
   !' IF N>=9999990 AND N<=10000000 THEN PRINT N;COUNT
NEXT N
END
 

Re: ガンマ関数

 投稿者:たろさ  投稿日:2015年10月 5日(月)05時40分17秒
  > No.3761[元記事へ]

しばっちさんへのお返事です。

しばっちさんのプログラム勉強中です。先週は画像変換のプログラムで楽しませて頂きました。

お忙しいところ恐縮ですが、プログラムを実行するとエラーが出ます。

日を置いて何度か試していますが、INPUTで、10を入力しても数値溢れと出ます。

モードも知る限り試しました。

私の方は、急いでいませんので、暇な時に教えてください。

毎度、説明がわかりにくいので、画像を添付しました。

最近『オイラーの定数ガンマ』Julian Havil(著)共立出版 を読んでいます。

もし メビウス関数のプログラムも有ったら教えてください。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年10月 5日(月)06時11分4秒
  > No.3882[元記事へ]

しばっちさんへのお返事です。

お世話になります。

素数個数関数Ver.1
FOR I=100000036 TO 100000036
3273.54秒(54分33.54秒)

素数個数関数Ver.2
FOR N=2 TO 100000036
IF MOD(N,10000000)=0
1659.37秒(27分39.37秒)


IF N>=9999990 AND N<=10000000 THEN PRINT N;COUNT
も試しました。計算時間は、同様でした。

今朝は、10億で計算中です。

1億  5761455個 約28分で表示されました。
------------------------------------------------

何もお礼は出来ませんが、先週買った。インテルのCPUが1個約8千円で

4.3GHz で、自作PC組み立ててから、ずっと素数個数関数Ver.1です。

画像のハンドルネーム間違えてました。目が老眼なのでお許しください。

------------------------------------------------------------------
追記

3億まで算出しました。まだ計算中


99999989(5761455th prime)
199999991(11078937th prime)
299999977(16252325th prime)

素数個数関数Ver.2  算出時間 約2時間(インテルG3258 4.3GHz)


自作プログラムとの比較

自然数 n億からn億までの素数リスト作成所要時間

8億から9億まで 2時間17分48.61秒(インテルi3-4170 3.7GHz)
7億から8億まで 2時間11分23.74秒(以下同じ)
6億から7億まで 2時間04分51.08秒
5億から6億まで 1時間56分54.41秒
4億から5億まで 1時間48分24.34秒
3億から4億まで 1時間27分19.75秒
2億から3億まで 1時間27分04.62秒
1億から2億まで 1時間12分04.92秒
2から1億まで   0時間49分08.87秒


億単位の素数の個数を数える場合は、実用性があると思います。

------------------------------------------------------------------
追記

10億 45006.83秒(12時間30分06.83秒)


http://blogs.yahoo.co.jp/donald_stinger

 

Re: Project Euler の問題から

 投稿者:山中和義  投稿日:2015年10月 5日(月)14時07分38秒
  > No.3881[元記事へ]

GAIさんへのお返事です。

> https://projecteuler.net/problem=484


https://en.wikipedia.org/wiki/Arithmetic_derivative

k=p[1]^a[1] * p[2]^a[2] * … * p[n]^a[n] と素因数分解されるとすると、
k' = k*(a[1]/p[1] + a[2]/p[2] + … + a[n]/p[n]) と表される。
なので、
素因数分解のプログラムで処理することができます。

配列(10^7程度)が確保できれば、篩い法で処理するのが速いと思います。


どちらにしても、5*10^15は天文学的な数です。


LET t0=TIME
LET K=10^6 !2からkまで
DIM D(K) !k'
MAT D=CON
LET S=0 !Σgcd(k,k')
FOR N=2 TO K !エラトステネスの篩いによる
!!!PRINT N;D(N) !k,k' debug
   IF D(N)=1 THEN !素数なら
      LET S=S+1 !p'=1
      FOR J=N*N TO K STEP N !倍数を篩う
         LET dK=J/N+N*D(J/N) !k'=a'b+ab'
         LET D(J)=dK
      NEXT J
   ELSE !合成数なら
      LET S=S+GCD(N,D(N))
   END IF
NEXT N
PRINT S !結果を表示する
PRINT TIME-t0
END

EXTERNAL FUNCTION gcd(a,b) !最大公約数 a,b≧0
DO UNTIL b=0
   LET t=b
   LET b=MOD(a,b)
   LET a=t
LOOP
LET gcd=a
END FUNCTION


 

Re: ガンマ関数

 投稿者:しばっち  投稿日:2015年10月 5日(月)20時18分34秒
  > No.3883[元記事へ]

たろささんへのお返事です。

> お忙しいところ恐縮ですが、プログラムを実行するとエラーが出ます。
>
> 日を置いて何度か試していますが、INPUTで、10を入力しても数値溢れと出ます。

エラーは二重指数関数法にて発生しているようです。
Tの範囲を少し狭くしても、誤差はたいして出ていないようです。

INPUT PROMPT "GAMMA(X) X=":U
LET H=1/1024
FOR T=-4 TO 4 STEP H     !' Tの範囲を修正(FOR T=-2 TO 2 STEP H としても、まだ大丈夫なようです)
   LET SS=SS+F(EXP(PI/2*SINH(T)),U)*PI/2*COSH(T)*EXP(PI/2*SINH(T))*H !'二重指数関数法(半無限区間)
NEXT T
PRINT "Γ(";STR$(U);")=";SS
END

EXTERNAL FUNCTION F(U,X)
LET F=EXP(-U)*U^(X-1)
END FUNCTION

> もし メビウス関数のプログラムも有ったら教えてください。

既に「素数個数関数」にてメビウス関数を使用しています。

https://ja.wikipedia.org/wiki/メビウス関数
http://6317.teacup.com/basic/bbs/3866

EXTERNAL  FUNCTION U(N) !'メビウス関数
FOR K=1 TO N
   IF GCD(K,N)=1 THEN
      LET S=S+COS(2*PI*K/N)
   END IF
NEXT K
LET U=INT(S+.1)
END FUNCTION
 

Re: ガンマ関数

 投稿者:たろさ  投稿日:2015年10月 5日(月)20時59分27秒
  > No.3886[元記事へ]

しばっちさんへのお返事です。

ありがとうございます。自分の基礎知識が足りない事がわかりました。
もう、頑張る歳ではありませんが、もう少し粘って見ます。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: Sieve of Sundaram サンダラムの篩(ふるい)

 投稿者:たろさ  投稿日:2015年10月 5日(月)21時12分12秒
  > No.3870[元記事へ]

たろささんへのお返事です。

OPTION ARITHMETIC NATIVE

入れたら処理速度が速くなった気がします。

メモリー限界まで

素数リストの精度確認は下記程度の確認です。

97(25th prime)
997(168th prime)
9973(1229th prime)
99991(9592nd prime)
999983(78498th prime)
9999991(664579th prime)
99999989(5761455th prime)
100000007(5761456th prime)


199999991(11078937th prime)

113.71秒 1分53.71秒

2億以上は 2億1千万も試しましたが駄目でした。

1億単位でプログラムが書けると良いのですが

今の私には無理です。

http://blogs.yahoo.co.jp/donald_stinger

 

不具合の報告

 投稿者:山中和義  投稿日:2015年10月 6日(火)21時52分48秒
  2進モード、複素数モードで
プログラムが中断された場合(中断した場合)、配列メモリの解放がされない。
「メモリが足りません」となって、再度実行できない。

DIM A(5*10^7) !ほぼ上限
LET A(-1)=1 !ここで中断させる
END


DIM A(5*10^7) !ほぼ上限
LET T=0
DO WHILE T=0 !ここで「中断」
LOOP
END


 

公式サイト一部ページの文字化け

 投稿者:碁盤鮫  投稿日:2015年10月 7日(水)03時21分12秒
  はじめまして、お邪魔します。

さきほど、(仮称)十進BASICのサイトにある
http://hp.vector.co.jp/authors/VA008683/BASICAccJa.htm
なるページを開いたところ、こちらの閲覧環境では文字化けして見えました。

調べてみたところでは、HTML文書中に「charset=SHIFT_JIS」と指定してあることと、文書自体がUTF-8に符号化されていることとが矛盾しているようでした。いかがでしょうか。
(なお、2009年頃に見たときはこうではなかったと思います。)
 

Re: ガンマ関数

 投稿者:たろさ  投稿日:2015年10月 7日(水)12時37分55秒
  > No.3886[元記事へ]

しばっちさんへのお返事です。


> 既に「素数個数関数」にてメビウス関数を使用しています。

最初は、何度やってもゼロばかりでしたが、無事出来ました。

PRINT N;U(N)
1  1
2 -1
3 -1
4  0
5 -1
6  1
7 -1


素数個数関数 20億まで確認しました。

100000000  5761455
200000000  11078937
300000000  16252325
400000000  21336326
500000000  26355867
600000000  31324703
700000000  36252931
800000000  41146179
900000000  46009215
1000000000  50847534
1100000000  55662470
1200000000  60454705
1300000000  65228333
1400000000  69985473
1500000000  74726528
1600000000  79451833
1700000000  84163019
1800000000  88862422
1900000000  93547928
2000000000  98222287


35957.86 秒+24時間

http://blogs.yahoo.co.jp/donald_stinger

 

Re: 不具合の報告

 投稿者:白石 和夫  投稿日:2015年10月 7日(水)17時29分22秒
  > No.3889[元記事へ]

ご報告ありがとうございます。
確かに問題があるようです。
調査を進めます。


> 2進モード、複素数モードで
> プログラムが中断された場合(中断した場合)、配列メモリの解放がされない。
> 「メモリが足りません」となって、再度実行できない。
>
> DIM A(5*10^7) !ほぼ上限
> LET A(-1)=1 !ここで中断させる
> END
>
>
> DIM A(5*10^7) !ほぼ上限
> LET T=0
> DO WHILE T=0 !ここで「中断」
> LOOP
> END
>
>
>
 

Re: 公式サイト一部ページの文字化け

 投稿者:白石 和夫  投稿日:2015年10月 7日(水)17時30分16秒
  > No.3890[元記事へ]

ご報告ありがとうございました。
修正しました。


> はじめまして、お邪魔します。
>
> さきほど、(仮称)十進BASICのサイトにある
> http://hp.vector.co.jp/authors/VA008683/BASICAccJa.htm
> なるページを開いたところ、こちらの閲覧環境では文字化けして見えました。
>
> 調べてみたところでは、HTML文書中に「charset=SHIFT_JIS」と指定してあることと、文書自体がUTF-8に符号化されていることとが矛盾しているようでした。いかがでしょうか。
> (なお、2009年頃に見たときはこうではなかったと思います。)
 

素数判定

 投稿者:しばっち  投稿日:2015年10月 9日(金)22時46分54秒
  http://mojaie.hatenablog.jp/entry/2011/12/04/001545
https://ja.wikipedia.org/wiki/ミラー–ラビン素数判定法

!'素数判定 Miller-Rabin法
OPTION ARITHMETIC RATIONAL
LET L=100000000000000 !'100兆
FOR N=L+1 TO L+10001 STEP 2
   IF ISPRIME(N)=1 THEN
   !'PRINT N
      LET COUNT=COUNT+1
   END IF
NEXT N
PRINT COUNT;"個"
END

EXTERNAL  FUNCTION ISPRIME(N)
OPTION ARITHMETIC RATIONAL
IF N = 2 THEN
   LET ISPRIME=1
   EXIT FUNCTION
END IF
IF N = 1 OR MOD(N , 2) = 0 THEN
   LET ISPRIME=0
   EXIT FUNCTION
END IF
LET D = (N - 1) / 2
LET S = 0
DO WHILE MOD(D , 2) = 0
   LET D = INT(D / 2)
   LET S=S+1
LOOP
FOR I=1 TO 10
   LET ISP=0
   READ A    !' n < 341550071728321 なら a = 2, 3, 5, 7, 11, 13, 17
   DATA 2,3,5,7,11,13,17,23,29,31
   LET ISP = 0
   LET R = POWMOD(A, D, N)
   IF R = 1 OR R = N - 1 THEN
      LET ISP = 1
   END IF
   LET R = POWMOD(R, 2, N)
   FOR J = 0 TO S-1
      IF R = N - 1 THEN
         LET ISP = 1
      END IF
      LET R = POWMOD(R, 2, N)
   NEXT J
   IF ISP=0 THEN
      LET ISPRIME=0
      EXIT FUNCTION
   END IF
NEXT I
LET ISPRIME=1
END FUNCTION

EXTERNAL  FUNCTION POWMOD(B,P,M)
OPTION ARITHMETIC RATIONAL
LET RESULT = 1
DO WHILE P > 0
   IF MOD(P , 2)= 1 THEN
      LET RESULT = MOD(RESULT * B , M)
   END IF
   LET B = MOD(B * B, M)
   LET P = INT(P / 2)
LOOP
LET POWMOD=RESULT
END FUNCTION
 

Re: 素数判定

 投稿者:たろさ  投稿日:2015年10月10日(土)08時31分11秒
  しばっちさんへのお返事です。

素数100万個刻みのリストを作成しています。

素数個数関数と合わせて便利に使用させて頂いてます。

素数個数関数30億までの計算中ですが

処理速度の変化は、はじめてなのでわかりません。

素数個数関数の30億の計算は予想した約60時間で終わりそうです。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年10月22日(木)20時01分35秒
  > No.3869[元記事へ]

たろささんへのお返事です。

副プログラムの勉強中です。少し改良しました。

! ζ(x)1000桁  X=偶数を求めるプログラム
OPTION ARITHMETIC RATIONAL
LET t0=TIME
LET format$="#." & REPEAT$("#",999)
LET p=PI
FOR K=2 TO 100 STEP 2
   LET q=1
   FOR n=1 TO k ! 階乗数
      LET ka=n*q
      LET q=ka
   NEXT n
   LET b=BERNOULLI(K)
   IF b<0 THEN LET L=-1  ELSE LET L=1
   LET z=(L*b*2^(k-1))/q*p^k
   PRINT "zeta(";k;")";
   PRINT USING format$: z
NEXT k
PRINT TIME-t0;"秒で計算しました"
END

EXTERNAL FUNCTION BERNOULLI(K) !'ベルヌーイ定数
OPTION ARITHMETIC RATIONAL
LET C=1
LET D=1
LET N=K/2
IF K=1 THEN
   LET BERNOULLI=-1/2
ELSEIF MOD(K,2)=1 THEN
   LET BERNOULLI=0
ELSE
   FOR M=N TO 1 STEP-1
      LET T=T+(-1)^M*D*M^(K-1)
      LET C=C*(N+M+1)/(N-M+1)
      LET D=D+C
   NEXT M
   LET BERNOULLI=-T*K/(2^K*(2^K-1))
END IF
END FUNCTION




zeta( 3000 )まで、zeta( 3100 )計算中です。
この辺りで、1000桁 1に収束?

できたら、zata(奇数)1000桁も出して見たいと思っています。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年10月25日(日)12時30分34秒
  > No.3896[元記事へ]

たろささんへのお返事です。

参照 ゼータ関数の特殊値 https://ja.wikipedia.org/wiki/

副プログラムの勉強中です。ζ(x)の奇数を求めるプログラム

今のところ、ζ(2n+1) のn=奇数限定です。偶数が上手く出ません。

! Ramanujan ζ(2n+1)
OPTION ARITHMETIC DECIMAL_HIGH
LET t0=TIME
FOR n=1 TO 10 STEP 2
   LET f=2^(2*n)*pi^(2*n+1)
   LET S=0
   FOR k1=0 TO n+1
      LET S=S+((-1)^(k1+1))*BERNOULLI(2*k1)/FACT(2*k1)*BERNOULLI(2*n+2-2*k1)/FACT(2*n+2-2*k1)
   NEXT k1
   LET S1=0
   FOR k2=1 TO 330
      LET q=2*PI*k2
      LET S1=S1+(k2^(-2*n-1))/(EX(q)-1)
   NEXT k2
   LET zeta=f*S-2*S1
   PRINT 2*n+1;zeta
NEXT n
PRINT TIME-t0;"秒"
END

EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s = 0
   FOR i=0 TO k-2
      LET  s = s + comb(k,i)*b(i)
   NEXT i
   LET  b(k-1) = - s / k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION

!1000桁モードで利用する指数関数
EXTERNAL FUNCTION EX(x)
OPTION ARITHMETIC DECIMAL_HIGH
FUNCTION s(y,n)
   LET t=y*x/n
   IF ABS(t)<=EPS(0) THEN
      LET s=y+t
   ELSE
      LET s=y+s(t,n+1)
   END IF
END FUNCTION
LET EX=s(1,1)
END FUNCTION


上限
FACT(452)226まで

FOR n=223 TO 225 STEP 2
447
451

4329.45 秒
1時間12分09.45秒
AMD 2.4GHz

かなり重いです。

数式の展開方法がわからないので、手探り状態です。

出来れば、有理数モードで、と思っていますが、今のところ成功しません。

宜しくお願いします。

http://blogs.yahoo.co.jp/donald_stinger

 

Schroder's Method

 投稿者:しばっち  投稿日:2015年10月28日(水)22時02分3秒
  http://mathworld.wolfram.com/SchroedersMethod.html

!'Schroder's Method
INPUT T
LET X=T
DO
   LET X=X-F(X)*DF1(X)/(DF1(X)^2-F(X)*DF2(X))
   PRINT X
LOOP UNTIL ABS(F(X))<1E-13
PRINT X;X^3

FUNCTION F(X)
   LET F=X*X*X-T
END FUNCTION

FUNCTION DF1(X)
   LET DF1=3*X^2
END FUNCTION

FUNCTION DF2(X)
   LET DF2=6*X
END FUNCTION
END
 

Method of False Position

 投稿者:しばっち  投稿日:2015年10月28日(水)22時02分41秒
  http://mathworld.wolfram.com/MethodofFalsePosition.html

!'Method of False Position
INPUT T
LET X2=1
LET X1=T
DO
   LET X=X1-(X2-X1)/(F(X2)-F(X1))*F(X1)
   LET X2=X1
   LET X1=X
   PRINT X
LOOP UNTIL ABS(F(X))<1E-13
PRINT X;X^3

FUNCTION F(X)
   LET F=X^3-T
END FUNCTION
END
 

Householder's Method

 投稿者:しばっち  投稿日:2015年10月28日(水)22時03分7秒
  http://mathworld.wolfram.com/HouseholdersMethod.html

!'Householder's Method
INPUT PROMPT "X=":T
LET XX=T
DO
   LET X=XX
   LET XX=X-F(X)/DF1(X)*(1+F(X)*DF2(X)/2/DF1(X)^2)
   PRINT XX
LOOP UNTIL ABS(X-XX)<1E-13
PRINT X;X^3

FUNCTION F(X)
   LET F=X*X*X-T
END FUNCTION

FUNCTION DF1(X)
   LET DF1=3*X^2
END FUNCTION

FUNCTION DF2(X)
   LET DF2=6*X
END FUNCTION
END
 

Muller's Method

 投稿者:しばっち  投稿日:2015年10月28日(水)22時03分53秒
  http://mathworld.wolfram.com/MullersMethod.html

!'Muller's Method
INPUT T
LET X1=T
LET X2=(1+T)/2
LET X3=1
DO
   LET Q=(X3-X2)/(X2-X1)
   LET A=Q*F(X3)-Q*(1+Q)*F(X2)+Q^2*F(X1)
   LET B=(2*Q+1)*F(X3)-(1+Q)^2*F(X2)+Q^2*F(X1)
   LET C=(1+Q)*F(X3)
   LET DD=B^2-4*A*C
   IF DD>0 THEN
      LET X4=X3-(X3-X2)*2*C/MAX(B+SQR(DD),B-SQR(DD))
   ELSE
      LET X4=X3-(X3-X2)*2*C/B
   END IF
   LET X1=X2
   LET X2=X3
   LET X3=X4
LOOP UNTIL ABS(F(X4))<1E-13
PRINT X4;X4^3

FUNCTION F(X)
   LET F=X*X*X-T
END FUNCTION
END
 

Halley's Method

 投稿者:しばっち  投稿日:2015年10月28日(水)22時04分34秒
  http://mathworld.wolfram.com/HalleysMethod.html

!'Halley's Method
INPUT T
LET X=T
DO
   LET X=X-2*F(X)*DF1(X)/(2*DF1(X)^2-F(X)*DF2(X))
   PRINT X
LOOP UNTIL ABS(F(X))<1E-13
PRINT X;X^3

FUNCTION F(X)
   LET F=X*X*X-T
END FUNCTION

FUNCTION DF1(X)
   LET DF1=3*X^2
END FUNCTION

FUNCTION DF2(X)
   LET DF2=6*X
END FUNCTION
END
 

Halley's Irrational Formula

 投稿者:しばっち  投稿日:2015年10月28日(水)22時05分1秒
  http://mathworld.wolfram.com/HalleysIrrationalFormula.html

!'Halley's Irrational Formula
INPUT T
LET X=T
DO
   LET J=DF1(X)^2-2*F(X)*DF2(X)
   IF J=<0 THEN LET J=0 ELSE LET J=SQR(J)
   LET X1=X+(-DF1(X)+J)/DF2(X)
   LET X2=X+(-DF1(X)-J)/DF2(X)
   IF ABS(F(X1))<ABS(F(X2)) THEN LET X=X1 ELSE LET X=X2
   PRINT X
LOOP UNTIL ABS(F(X))<1E-13
PRINT X;X^3

FUNCTION F(X)
   LET F=X*X*X-T
END FUNCTION

FUNCTION DF1(X)
   LET DF1=3*X^2
END FUNCTION

FUNCTION DF2(X)
   LET DF2=6*X
END FUNCTION
END
 

Lambert's Method

 投稿者:しばっち  投稿日:2015年10月28日(水)22時05分25秒
  http://mathworld.wolfram.com/LambertsMethod.html

!'Lambert's Method
INPUT R
LET D=2
LET X=1
DO
   LET X=H(X)
   PRINT X
LOOP UNTIL ABS(F(X))<1E-12
PRINT X;X^D

FUNCTION F(X)
   LET F=X^D-R
END FUNCTION

FUNCTION H(X)
   LET H=((D-1)*X^D+(D+1)*R)/((D+1)*X^D+(D-1)*R)*X
END FUNCTION
END
 

求積法

 投稿者:しばっち  投稿日:2015年10月28日(水)22時06分14秒
  http://mathworld.wolfram.com/BoolesRule.html
http://mathworld.wolfram.com/DurandsRule.html
http://mathworld.wolfram.com/HardysRule.html
http://mathworld.wolfram.com/ShoveltonsRule.html
http://mathworld.wolfram.com/WoolhousesFormulas.html
http://mathworld.wolfram.com/WeddlesRule.html

!'求積法
LET A=1
LET B=2
PRINT BOOLES(A,B)
PRINT DURAND(A,B)
PRINT HARDYS(A,B)
!'PRINT WOOLHOUSE(A,B)
PRINT WOOLHOUSE2(A,B)
PRINT WEDDLE(A,B)
PRINT B^3/3-A^3/3
END

EXTERNAL  FUNCTION F(X)
LET F=X^2
END FUNCTION

EXTERNAL  FUNCTION BOOLES(A,B)
LET X=A
LET H=(B-A)/4
LET BOOLES=2*H/45*(7*F(X)+32*F(X+H)+12*F(X+2*H)+32*F(X+3*H)+7*F(X+4*H))
END FUNCTION

EXTERNAL  FUNCTION DURAND(A,B)
LET X=A
LET H=(B-A)/5
LET DURAND=H*(2/5*F(X)+11/10*F(X+H)+F(X+2*H)+F(X+3*H)+11/10*F(X+4*H)+2/5*F(X+5*H))
END FUNCTION

EXTERNAL  FUNCTION HARDYS(A,B)
LET X=A
LET H=(B-A)/6
LET HARDYS=H/100*(28*F(X)+162*F(X+H)+220*F(X+3*H)+162*F(X+5*H)+28*F(X+6*H))
END FUNCTION

EXTERNAL  FUNCTION SHOVELTON(A,B)
LET H=(B-A)/10
LET X=A
LET SHOVELTON=5*H/126*(8*(F(X)+F(X+10*H))+35*(F(X+H)+F(X+3*H)+F(X+7*H)+F(X+9*H))+15*(F(X+2*H)+F(X+4*H)+F(X+6*H)+F(X+8*H))+36*F(X+5*H))
END FUNCTION

EXTERNAL  FUNCTION WOOLHOUSE(A,B)
LET H=(B-A)/10
LET X=A
LET WOOLHOUSE=5*H*(223/3969*(F(X)+F(X+10*H))+5875/18144*(F(X+H)+F(X+9*H))+4625/10584*(F(X+3*H)+F(X+7*H))+41/112*F(X+4*H))
END FUNCTION

EXTERNAL  FUNCTION WOOLHOUSE2(A,B)
LET H=(B-A)/28
LET X=A
LET WOOLHOUSE2=14*H*(7/195*(F(X)+F(X+28*H))+16807/66690*(F(X+2*H)+F(X+26*H))+128/285*(F(X+7*H)+F(X+21*H))+71/135*F(X+14*H))
END FUNCTION

EXTERNAL  FUNCTION WEDDLE(A,B)
LET X=A
LET H=(B-A)/6
LET WEDDLE=3*H/10*(F(X)+5*F(X+H)+F(X+2*H)+6*F(X+3*H)+F(X+4*H)+5*F(X+5*H)+F(X+6*H))
END FUNCTION
 

悪魔の階段

 投稿者:しばっち  投稿日:2015年10月28日(水)22時06分41秒
  http://mathworld.wolfram.com/DevilsStaircase.html
http://mathworld.wolfram.com/CantorFunction.html
https://ja.wikipedia.org/wiki/カントール関数

!'悪魔の階段
SET WINDOW 0,1,0,1
DRAW GRID(.1,.1)
LET H=1/128
FOR X=0 TO 1-H STEP H  !' 0<=X<1
   LET A$=TERNARY$(X)
   IF POS(A$,"1")>0 THEN
      FOR I=1 TO LEN(A$)
         IF A$(I:I)="1" THEN
            FOR J=I+1 TO LEN(A$)
               IF A$(J:J)="1" OR A$(J:J)="2" THEN LET A$(J:J)="0"
            NEXT J
            EXIT FOR
         END IF
      NEXT I
   END IF
   IF POS(A$,"2")>0 THEN
      FOR I=1 TO LEN(A$)
         IF A$(I:I)="2" THEN LET A$(I:I)="1"
      NEXT I
   END IF
   PLOT LINES: X,BINARY(A$);
NEXT X
PLOT LINES:1,1
END

EXTERNAL  FUNCTION TERNARY$(X) !'10進小数 to 3進小数 (0<=X<1)
!'LET B$="0."
FOR I=1 TO 10
   LET A$=MID$("012",MOD(INT(X*3),3)+1,1)
   LET B$=B$&A$
   LET X=X*3-INT(X*3)
NEXT I
LET TERNARY$=B$
END FUNCTION

EXTERNAL  FUNCTION BINARY(X$)  !'2進小数 to 10進小数
FOR I=1 TO LEN(X$)
   IF X$(I:I)="1" THEN
      LET S=S+2^(-I)
   END IF
NEXT I
LET BINARY=S
END FUNCTION

-----------------------------------------------------------------------------------------
SET WINDOW 0,1,0,1
DRAW GRID(.1,.1)
FOR N=0 TO 3
   SET LINE COLOR N+1
   FOR X=0 TO 1 STEP 1/32
      PLOT LINES: X,CANTOR(N,X);
   NEXT X
   PLOT LINES
NEXT N
END

EXTERNAL  FUNCTION CANTOR(N,X)  !'カントル関数
IF N=0 THEN
   LET CANTOR=X
ELSE
   IF X>=0 AND X<1/3 THEN
      LET CANTOR=1/2*CANTOR(N-1,3*X)
   ELSEIF X>=1/3 AND X<2/3 THEN
      LET CANTOR=1/2
   ELSEIF X>=2/3 AND X<=1 THEN
      LET CANTOR=1/2+1/2*CANTOR(N-1,3*X-2)
   END IF
END IF
END FUNCTION
 

Greatest Common Divisor

 投稿者:しばっち  投稿日:2015年10月28日(水)22時07分12秒
  http://mathworld.wolfram.com/GreatestCommonDivisor.html
http://mathworld.wolfram.com/RelativelyPrime.html

!'Greatest Common Divisor
SET WINDOW 1,3,0,1.2
SET POINT STYLE 7
FOR M=1 TO 50
   FOR N=1 TO 100
      PLOT POINTS : N/M,GCD(1,N/M)
   NEXT  N
NEXT  M

!'Relatively Prime
!'DIM M(100,100)
!'SET COLOR MIX(0) 1,1,1
!'SET COLOR MIX(1) 0,0,0
!'SET COLOR MIX(2) 1,1,1
!'SET COLOR MIX(3) 1,1,1
!'SET COLOR MIX(4) 1,1,1
!'SET COLOR MIX(5) 1,1,1
!'SET COLOR MIX(6) 1,1,1
!'SET COLOR MIX(7) 1,1,1
!'FOR Y=1 TO 99
!'   FOR X=1 TO 99
!'      LET M(X,Y)=MOD(GCD(X,Y),8)
!'   NEXT X
!'NEXT Y
!'SET WINDOW 0,1,1,0
!'MAT PLOT CELLS, IN 0,0; 1,1: M
END

EXTERNAL  FUNCTION GCD(M,N) !'最大公約数
DO WHILE N<>0
   LET T=MOD(M,N)
   LET M=N
   LET N=T
LOOP
LET GCD=M
END FUNCTION
 

Irreducible Fraction

 投稿者:しばっち  投稿日:2015年10月28日(水)22時07分44秒
  http://mathworld.wolfram.com/IrreducibleFraction.html

!'Irreducible Fraction
OPTION ARITHMETIC COMPLEX
LET R=30
DIM M(-R TO R,-R TO R)
FOR Y=1 TO R
   FOR X=1 TO R
      IF GCD(X,Y)=1 AND ISPRIME(COMPLEX(X,Y))<>0 THEN
         LET M(X,Y)=1
         LET M(-X,Y)=1
         LET M(X,-Y)=1
         LET M(-X,-Y)=1
      END IF
   NEXT X
NEXT Y
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1,1 : M
END

EXTERNAL  FUNCTION GCD(M,N) !'最大公約数
OPTION ARITHMETIC COMPLEX
DO WHILE N<>0
   LET T=MOD(M,N)
   LET M=N
   LET N=T
LOOP
LET GCD=M
END FUNCTION

EXTERNAL  FUNCTION ISPRIME(Z)
OPTION ARITHMETIC COMPLEX
FOR I=1 TO INT(SQR(RE(Z)))
   FOR J=1 TO INT(SQR(IM(Z)))
      LET ZZ=Z/COMPLEX(I,J)
      IF FRAC(RE(ZZ))=0 AND FRAC(IM(ZZ))=0 THEN
         LET ISPRIME=0
         EXIT FUNCTION
      END IF
   NEXT J
NEXT I
LET ISPRIME=1
END FUNCTION

EXTERNAL  FUNCTION FRAC(Z)
OPTION ARITHMETIC COMPLEX
LET FRAC=Z-INT(Z)
END FUNCTION

EXTERNAL SUB GINIT(XSIZE,YSIZE)
OPTION ARITHMETIC COMPLEX
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

Ice Fractal

 投稿者:しばっち  投稿日:2015年10月28日(水)22時08分25秒
  http://mathworld.wolfram.com/IceFractal.html

!'Ice Fractal
PUBLIC NUMERIC X,Y,ALPHA
CALL GINIT(800,800)
INPUT PROMPT "LEVEL=":N
LET MODE=0
SELECT CASE MODE
CASE 0
   LET L=600
   LET X=100
   LET Y=700
   FOR I=1 TO 3
      CALL RECURSIVE(N,L)
      CALL TURN(120)
   NEXT I
CASE 1
   LET L=600
   LET X=100
   LET Y=700
   FOR I=1 TO 4
      CALL RECURSIVE(N,L)
      CALL TURN(90)
   NEXT I
CASE 2
   LET L=600
   LET X=100
   LET Y=600
   CALL TURN(60)
   FOR I=1 TO 3
      CALL RECURSIVE(N,L)
      CALL TURN(-120)
   NEXT I
CASE 3
   LET L=500
   LET X=150
   LET Y=650
   CALL TURN(90)
   FOR I=1 TO 4
      CALL RECURSIVE(N,L)
      CALL TURN(-90)
   NEXT I
CASE 4
   LET L=600
   LET X=100
   LET Y=700
   FOR I=1 TO 4
      CALL RECURSIVE2(N,L)
      CALL TURN(90)
   NEXT I
CASE 5
   LET L=400
   LET X=200
   LET Y=600
   CALL TURN(90)
   FOR I=1 TO 4
      CALL RECURSIVE2(N,L)
      CALL TURN(-90)
   NEXT I
END SELECT
END

EXTERNAL SUB RECURSIVE(LEV,L)
IF LEV=0 THEN
   CALL MOVE(L)
ELSE
   CALL RECURSIVE(LEV-1,L/2)
   CALL TURN(120)
   CALL RECURSIVE(LEV-1,L/4)
   CALL TURN(-180)
   CALL RECURSIVE(LEV-1,L/4)
   CALL TURN(120)
   CALL RECURSIVE(LEV-1,L/4)
   CALL TURN(-180)
   CALL RECURSIVE(LEV-1,L/4)
   CALL TURN(120)
   CALL RECURSIVE(LEV-1,L/2)
END IF
END SUB

EXTERNAL SUB RECURSIVE2(LEV,L)
IF LEV=0 THEN
   CALL MOVE(L)
ELSE
   CALL RECURSIVE2(LEV-1,L/2)
   CALL TURN(90)
   CALL RECURSIVE2(LEV-1,L/3)
   CALL TURN(-180)
   CALL RECURSIVE2(LEV-1,L/3)
   CALL TURN(90)
   CALL RECURSIVE2(LEV-1,L/2)
END IF
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
SET COLOR 7
END SUB

EXTERNAL SUB MOVE(L)
PLOT LINES:X,Y;
LET X=X+L*COS(ALPHA*PI/180)
LET Y=Y-L*SIN(ALPHA*PI/180)
PLOT LINES:X,Y;
END SUB

EXTERNAL SUB TURN(R)
LET ALPHA=MOD(ALPHA+R+360,360)
END SUB
 

Cesaro Fractal

 投稿者:しばっち  投稿日:2015年10月28日(水)22時09分4秒
  http://mathworld.wolfram.com/CesaroFractal.html

!'Cesaro Fractal
PUBLIC NUMERIC X,Y,ALPHA,R1,L1,L2,CC,XX,YY
CALL GINIT(800,800)
INPUT PROMPT "LEVEL=":N
RESTORE 2
READ XX,YY,R1
1 DATA .5,.288675134,60 !'SQR(3)/6=0.2886...
2 DATA .5,.45,85
3 DATA .3,.4,85
  LET CC=YY/TAN(RAD(R1))
  LET L1=XX-CC
  LET L2=CC/COS(RAD(R1))
  LET X=100
  LET Y=700
  LET L=600
  FOR I=1 TO 4
     CALL RECURSIVE(N,L)
     CALL TURN(90)
  NEXT I
END

EXTERNAL SUB RECURSIVE(LEV,L)
  IF LEV=0 THEN
     CALL MOVE(L)
  ELSE
     CALL RECURSIVE(LEV-1,L*L1)
     CALL TURN(R1)
     CALL RECURSIVE(LEV-1,L*L2)
     CALL TURN(-2*R1)
     CALL RECURSIVE(LEV-1,L*L2)
     CALL TURN(R1)
     CALL RECURSIVE(LEV-1,L*(1-(XX+CC)))
  END IF
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
  SET BITMAP SIZE XSIZE,YSIZE
  SET WINDOW 0,XSIZE-1,YSIZE-1,0
  SET POINT STYLE 1
  SET COLOR MODE "REGULAR"
  SET COLOR MIX(0) 0,0,0
  SET COLOR MIX(1) 0,0,1
  SET COLOR MIX(2) 1,0,0
  SET COLOR MIX(3) 1,0,1
  SET COLOR MIX(4) 0,1,0
  SET COLOR MIX(5) 0,1,1
  SET COLOR MIX(6) 1,1,0
  SET COLOR MIX(7) 1,1,1
  CLEAR
  SET COLOR 7
END SUB

EXTERNAL SUB MOVE(L)
  PLOT LINES:X,Y;
  LET X=X+L*COS(ALPHA*PI/180)
  LET Y=Y-L*SIN(ALPHA*PI/180)
  PLOT LINES:X,Y;
END SUB

EXTERNAL SUB TURN(R)
  LET ALPHA=MOD(ALPHA+R+360,360)
END SUB
 

LindenmayerSystem

 投稿者:しばっち  投稿日:2015年10月28日(水)22時09分55秒
  http://mathforum.org/advanced/robertd/lsys2d.html
http://mathworld.wolfram.com/LindenmayerSystem.html
http://mathworld.wolfram.com/Peano-GosperCurve.html
http://mathworld.wolfram.com/PeanoCurve.html
http://mathworld.wolfram.com/SierpinskiCurve.html
http://mathworld.wolfram.com/SierpinskiArrowheadCurve.html

!'LindenmayerSystem
DIM P$(128)
INPUT  PROMPT "MODE =":MODE
INPUT  PROMPT "LEVEL=":N
LET X0=0
LET Y0=0
LET L=10
LET TH=0
FOR I=32 TO 128
   LET P$(I)=CHR$(I)
NEXT I
SELECT CASE MODE
CASE 1
   LET PARA$="F"
   LET P$(ORD("F"))="F+F--F+F" !'Koch curve
   LET TH=0
   LET R=60
CASE 2
   LET PARA$="F"
   LET P$(ORD("F"))="F+F-F-F-F+F+F+F-F" !'Peano curve
   LET TH=0
   LET R=90
CASE 3
   LET PARA$="F+F+F+F"
   LET P$(ORD("F"))="F-F+F+FFF-F-F+F" !'Quadratic Koch island
   LET TH=0
   LET R=90
CASE 4
   LET PARA$="F+F+F+F"
   LET P$(ORD("F"))="-F+F-F-F+F+FF-F+F+FF+F-F-FF+FF-FF+F+F-FF-F-F+FF-F-F+F+F-F+" !'32-segment curve
   LET TH=0
   LET R=90
CASE 5
   LET PARA$="YF"
   LET P$(ORD("X"))="YF+XF+Y" !'Sierpinski arrowhead
   LET P$(ORD("Y"))="XF-YF-X"
   LET TH=0
   LET R=60
CASE 6
   LET PARA$="FX"
   LET P$(ORD("X"))="X+YF++YF-FX--FXFX-YF+" !'Peano-Gosper curve
   LET P$(ORD("Y"))="-FX+YFYF++YF+FX--FX-Y"
   LET TH=0
   LET R=60
CASE 7
   LET PARA$="FXF--FF--FF"
   LET P$(ORD("F"))="FF" !'Sierpinski triangle
   LET P$(ORD("X"))="--FXF++FXF++FXF--"
   LET TH=0
   LET R=60
CASE 8
   LET PARA$="F+XF+F+XF"
   LET P$(ORD("X"))="XF-F+F-XF+F+XF-F+F-X" !'Square curve
   LET TH=0
   LET R=90
CASE 9
   LET PARA$="FX"
   LET P$(ORD("X"))="X+YF+" !'Dragon curve
   LET P$(ORD("Y"))="-FX-Y"
   LET TH=0
   LET R=90
CASE 10
   LET PARA$="L"
   LET P$(ORD("L"))="+RF-LFL-FR+" !'Hilbert curve
   LET P$(ORD("R"))="-LF+RFR+FL-"
   LET TH=0
   LET R=90
CASE 11
   LET PARA$="X"
   LET P$(ORD("X"))="XFYFX+F+YFXFY-F-XFYFX" !'Hilbert curve2
   LET P$(ORD("Y"))="YFXFY-F-XFYFX+F+YFXFY"
   LET TH=0
   LET R=90
END SELECT
CALL MAKEPARA$(P$,PARA$,N)
CALL TURTLE(PARA$,0,X0,Y0,L,TH,R)
CALL TURTLE(PARA$,1,X0,Y0,L,TH,R)
END

EXTERNAL SUB MAKEPARA$(P$(),PARA$,N)
FOR LEV=1 TO N
   LET W$=""
   FOR K=1 TO LEN(PARA$)
      LET W$=W$&P$(ORD(PARA$(K:K)))
   NEXT K
   LET PARA$=W$
NEXT LEV
END SUB

EXTERNAL SUB TURTLE(PARA$,FLG,XX,YY,LL,TT,RR)
DIM X(200),Y(200),T(200)
LET SP=1
LET XMIN=1E+10
LET XMAX=-1E+10
LET YMIN=1E+10
LET YMAX=-1E+10
LET TH=TT
LET R=RR
LET X0=XX
LET Y0=YY
LET L=LL
FOR I=1 TO LEN(PARA$)
   SELECT CASE PARA$(I:I)
   CASE "+"
      LET TH=TH+R
   CASE "-"
      LET TH=TH-R
   CASE "F"
      LET X1=X0+L*COS(TH*PI/180)
      LET Y1=Y0-L*SIN(TH*PI/180)
      IF FLG<>0 THEN CALL LINE(X0,Y0,X1,Y1,7)
      LET X0=X1
      LET Y0=Y1
      LET XMIN=MIN(XMIN,X0)
      LET XMAX=MAX(XMAX,X0)
      LET YMIN=MIN(YMIN,Y0)
      LET YMAX=MAX(YMAX,Y0)
   CASE "G"
      LET X1=X0+L*COS(TH*PI/180)
      LET Y1=Y0-L*SIN(TH*PI/180)
      LET X0=X1
      LET Y0=Y1
   CASE "["
      LET X(SP)=X0
      LET Y(SP)=Y0
      LET T(SP)=TH
      LET SP=SP+1
   CASE "]"
      LET SP=SP-1
      LET X0=X(SP)
      LET Y0=Y(SP)
      LET TH=T(SP)
   CASE ELSE
   END SELECT
NEXT I
IF FLG=0 THEN
   LET MAXSIZE=800
   LET MINSIZE=400
   LET XSIZE=INT(XMAX-XMIN)
   LET YSIZE=INT(YMAX-YMIN)
   LET R=YSIZE/XSIZE
   IF XSIZE>MAXSIZE THEN LET XSIZE=MAXSIZE
   IF XSIZE<MINSIZE THEN LET XSIZE=MINSIZE
   IF YSIZE/XSIZE<>R THEN LET YSIZE=INT(XSIZE*R)
   SET BITMAP SIZE XSIZE,YSIZE
   SET WINDOW XMIN,XMAX,YMAX,YMIN
   SET POINT STYLE 1
   SET COLOR MODE "REGULAR"
   SET COLOR MIX(0) 0,0,0
   SET COLOR MIX(1) 0,0,1
   SET COLOR MIX(2) 1,0,0
   SET COLOR MIX(3) 1,0,1
   SET COLOR MIX(4) 0,1,0
   SET COLOR MIX(5) 0,1,1
   SET COLOR MIX(6) 1,1,0
   SET COLOR MIX(7) 1,1,1
   CLEAR
END IF
END SUB

EXTERNAL SUB LINE(XS,YS,XE,YE,C)
SET COLOR C
PLOT LINES
PLOT LINES:XS,YS;XE,YE
END SUB
 

String Rewriting System

 投稿者:しばっち  投稿日:2015年10月28日(水)22時10分30秒
  http://mathworld.wolfram.com/CantorSquareFractal.html
http://mathworld.wolfram.com/CantorDust.html
http://mathworld.wolfram.com/HafermanCarpet.html
http://mathworld.wolfram.com/BoxFractal.html
http://mathworld.wolfram.com/SierpinskiCarpet.html
http://mathworld.wolfram.com/StringRewritingSystem.html

!'String Rewriting System
INPUT  PROMPT "LEVEL=":LEV !' (1<=LEV<=5)
DIM A(3^LEV,3^LEV),B(3^LEV,3^LEV),P(3,3),Q(3,3)
RESTORE 5
READ A(1,1) !'初期値
MAT READ P,Q
1 DATA 1   !'Cantor Dust
  DATA 0,0,0
  DATA 0,0,0
  DATA 0,0,0
  !'
  DATA 1,0,1
  DATA 0,0,0
  DATA 1,0,1

2 DATA 1
  DATA 0,0,0
  DATA 0,0,0
  DATA 0,0,0
  !'
  DATA 0,1,0
  DATA 1,1,1
  DATA 0,1,0

3 DATA 0   !'Cantor Square Fractal
  DATA 0,1,0
  DATA 1,1,1
  DATA 0,1,0
  !'
  DATA 1,1,1
  DATA 1,1,1
  DATA 1,1,1

4 DATA 0   !'Haferman Carpet
  DATA 1,1,1
  DATA 1,1,1
  DATA 1,1,1
  !'
  DATA 0,1,0
  DATA 1,0,1
  DATA 0,1,0

5 DATA 1    !'Box Fractal
  DATA 0,0,0
  DATA 0,0,0
  DATA 0,0,0
  !'
  DATA 1,0,1
  DATA 0,1,0
  DATA 1,0,1

6 DATA 1   !'格子
  DATA 0,1,0
  DATA 1,0,1
  DATA 0,1,0
  !'
  DATA 1,0,1
  DATA 0,1,0
  DATA 1,0,1

7 DATA 1
  DATA 1,1,1
  DATA 0,0,0
  DATA 1,1,1
  !'
  DATA 1,0,1
  DATA 1,0,1
  DATA 1,0,1

8 DATA 0
  DATA 1,1,1
  DATA 1,0,1
  DATA 1,1,1
  !'
  DATA 0,0,0
  DATA 0,0,0
  DATA 0,0,0

9 DATA 1   !'Sierpinski Carpet
  DATA 0,0,0
  DATA 0,0,0
  DATA 0,0,0
  !'
  DATA 1,1,1
  DATA 1,0,1
  DATA 1,1,1

10 DATA 1
   DATA 0,0,0
   DATA 0,0,0
   DATA 0,0,0
   !'
   DATA 1,1,1
   DATA 0,0,0
   DATA 1,1,1

11 DATA 0
   DATA 1,1,1
   DATA 1,1,1
   DATA 1,1,1
   !'
   DATA 0,1,0
   DATA 1,1,1
   DATA 0,1,0

   LET M=1
   FOR N=1 TO LEV
      FOR I=1 TO M
         FOR J=1 TO M
            SELECT CASE A(I,J)
            CASE 0
               FOR K=1 TO 3
                  FOR L=1 TO 3
                     LET B((I-1)*3+K,(J-1)*3+L)=P(K,L)
                  NEXT L
               NEXT K
            CASE 1
               FOR K=1 TO 3
                  FOR L=1 TO 3
                     LET B((I-1)*3+K,(J-1)*3+L)=Q(K,L)
                  NEXT L
               NEXT K
            END SELECT
         NEXT J
      NEXT I
      MAT A=B
      LET M=M*3
   NEXT N
   SET WINDOW 0,1,1,0
   MAT PLOT CELLS, IN 0 , 0 ; 1,1 : A
END

---------------------------------------------------------------------------------------------------
PUBLIC NUMERIC P(3,3),Q(3,3)
INPUT  PROMPT "LEVEL=":LEV !' LEV=1~4
DIM A(3,3)
MAT READ P,Q
MAT A=Q    !'初期値
DATA 0,0,0 !'Cantor Dust
DATA 0,0,0
DATA 0,0,0
!'
DATA 1,0,1
DATA 0,0,0
DATA 1,0,1
SET WINDOW 0,1,1,0
SET AREA COLOR 4
PLOT AREA :0,0;0,1;1,1;1,0
CALL RECURSIVE(LEV,A,0,0,1,1,1/3)
END

EXTERNAL  SUB RECURSIVE(N,A(,),XS,YS,XE,YE,H)
IF N>0 THEN
   FOR K=0 TO 2
      FOR L=0 TO 2
         IF A(K+1,L+1)=0 THEN
            CALL RECURSIVE(N-1,P,XS+L*H,YS+K*H,XS+L*H+H,YS+K*H+H,H/3)
         ELSE
            CALL RECURSIVE(N-1,Q,XS+L*H,YS+K*H,XS+L*H+H,YS+K*H+H,H/3)
         END IF
      NEXT L
   NEXT K
ELSE
   MAT PLOT CELLS, IN XS,YS ; XE,YE : A
END IF
END SUB
 

Carotid-Kundalini Fractal

 投稿者:しばっち  投稿日:2015年10月28日(水)22時12分6秒
  http://mathworld.wolfram.com/Carotid-KundaliniFractal.html

!'Carotid-Kundalini Fractal
SET WINDOW -1,1,-1,1
FOR N=0 TO 10
   PLOT LINES
   FOR X=-1 TO 1 STEP 1/64
      PLOT LINES:X,CK(N,X);
   NEXT X
NEXT N
END

EXTERNAL  FUNCTION CK(N,X) !'Carotid-Kundalini Function
LET CK=COS(N*X*ACOS(X))
END FUNCTION
 

Henon Map

 投稿者:しばっち  投稿日:2015年10月28日(水)22時13分33秒
  http://mathworld.wolfram.com/HenonMap.html

!'Henon Map
SET POINT STYLE 1
LET MODE=2
SELECT CASE MODE
CASE 0
   LET ALPHA=1.4
   LET BETA=.3
   SET WINDOW -1.3,1.3,-1.3,1.3
CASE 1
   LET ALPHA=.2
   LET BETA=.9991
   SET WINDOW -4,4,-4,4
CASE 2
   LET ALPHA=.2
   LET BETA=-.9999
   SET WINDOW -.2,1.2,-1.2,.2
END SELECT
FOR I=1 TO 100000
   LET XX=1-ALPHA*X*X+Y
   LET YY=BETA*X
   LET X=XX
   LET Y=YY
   PLOT POINTS:X,Y
NEXT I
END
 

Mira Fractal

 投稿者:しばっち  投稿日:2015年10月28日(水)22時14分0秒
  http://mathworld.wolfram.com/MiraFractal.html

!'Mira Fractal
PUBLIC NUMERIC A
SET WINDOW -30,30,-30,30
SET POINT STYLE 1
RESTORE 2
READ A,B,X,Y
1 DATA .2,1,12,0
2 DATA .31,1,12,0
3 DATA .4,1,12,0
4 DATA .7,.9998,9,0
5 DATA .7,.9998,12.1,0
6 DATA .7,.9998,15,0
  FOR I=1 TO 50000
     LET XX=B*Y+F(X)
     LET YY=-X+F(XX)
     LET X=XX
     LET Y=YY
     PLOT POINTS:X,Y
  NEXT I
END

EXTERNAL  FUNCTION F(X)
  LET F=A*X+2*(1-A)*X*X/(1+X*X)
END FUNCTION
 

Butterfly Function

 投稿者:しばっち  投稿日:2015年10月28日(水)22時14分37秒
  http://mathworld.wolfram.com/ButterflyFunction.html

!'Butterfly Function
LET XSIZE=600
LET YSIZE=600
CALL GINIT(XSIZE,YSIZE)
SET WINDOW -20,20,20,-20
SET POINT STYLE 1
FOR Y=-20 TO 20 STEP 40/YSIZE
   FOR X=-20 TO 20 STEP 40/XSIZE
      WHEN EXCEPTION IN
         LET C=MOD(F(X,Y),8)
      USE
      END WHEN
      SET POINT COLOR C
      PLOT POINTS:X,Y
   NEXT X
NEXT Y
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW  0 , XSIZE-1 , YSIZE-1, 0
SET POINT STYLE 1
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION F(X,Y)
LET A=1
LET F=(X*X-Y*Y)*SIN((X+Y)/A)/(X*X+Y*Y)
END FUNCTION
 

Gauss Map

 投稿者:しばっち  投稿日:2015年10月28日(水)22時15分13秒
  http://mathworld.wolfram.com/GaussMap.html

!'Gauss Map
OPTION ARITHMETIC COMPLEX
SET WINDOW -1,1,1,-1
SET POINT STYLE 1
FOR Y=-1 TO 1 STEP 1/512
   FOR X=-1 TO 1 STEP 1/512
      LET Z=COMPLEX(X,Y)
      WHEN EXCEPTION IN
         LET C=ABS(F(Z))*8
      USE
      END WHEN
      SET POINT COLOR INT(C)
      PLOT POINTS : X,Y
   NEXT X
NEXT Y
END

EXTERNAL  FUNCTION F(Z)
OPTION ARITHMETIC COMPLEX
LET F=COMPLEX(RE(1/Z)-INT(RE(1/Z)),IM(1/Z)-INT(IM(1/Z)))
END FUNCTION
 

Barnsley's Tree

 投稿者:しばっち  投稿日:2015年10月28日(水)22時15分44秒
  http://mathworld.wolfram.com/BarnsleysTree.html

!'Barnsley's Tree
OPTION ARITHMETIC COMPLEX
LET SIZE=800
CALL GINIT(SIZE,SIZE)
LET KL=50
LET S=COMPLEX(-3,-3)
LET E=COMPLEX(3,3)
LET C=COMPLEX(.6,1.1)
SET WINDOW RE(S),RE(E),IM(E),IM(S)
LET D=(E-S)/SIZE
FOR CR=RE(S) TO RE(E) STEP RE(D)
   FOR CI=IM(S) TO IM(E) STEP IM(D)
      LET Z=COMPLEX(CR,CI)
      LET FL=0
      FOR K=0 TO KL
         LET Z=C*(Z-SGN(RE(Z)))
         IF ABS(Z)>2 THEN
            LET FL=1
            EXIT FOR
         END IF
      NEXT K
      IF FL=1 THEN
         LET CC=MOD(K,7)
         CALL PSET(CR,CI,CC+1)
      END IF
   NEXT CI
NEXT CR
END

EXTERNAL SUB PSET(X,Y,C)
OPTION ARITHMETIC COMPLEX
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
OPTION ARITHMETIC COMPLEX
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW  0 , XSIZE-1 , YSIZE-1, 0
SET POINT STYLE 1
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

Cactus Fractal

 投稿者:しばっち  投稿日:2015年10月28日(水)22時16分15秒
  http://mathworld.wolfram.com/CactusFractal.html

!'Cactus Fractal
OPTION ARITHMETIC COMPLEX
LET SIZE=800
CALL GINIT(SIZE,SIZE)
LET KL=50
LET S=COMPLEX(-1,-1)
LET E=COMPLEX(1,1)
SET WINDOW RE(S),RE(E),IM(E),IM(S)
LET D=(E-S)/SIZE
FOR CR=RE(S) TO RE(E) STEP RE(D)
   FOR CI=IM(S) TO IM(E) STEP IM(D)
      LET C=COMPLEX(CR,CI)
      LET Z=C
      LET FL=0
      WHEN EXCEPTION IN
         FOR K=0 TO KL
            LET Z=CSIN(Z/C)
            IF ABS(Z)>2 THEN
               LET FL=1
               EXIT FOR
            END IF
         NEXT K
      USE
      END WHEN
      IF FL=1 THEN
         LET CC=MOD(K,7)
         CALL PSET(CR,CI,CC+1)
      END IF
   NEXT CI
NEXT CR
END

EXTERNAL FUNCTION CSIN(Z)
OPTION ARITHMETIC COMPLEX
LET I=SQR(-1)
LET CSIN=(EXP(I*Z)-EXP(-I*Z))/(2*I)
END FUNCTION

EXTERNAL SUB PSET(X,Y,C)
OPTION ARITHMETIC COMPLEX
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
OPTION ARITHMETIC COMPLEX
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW  0 , XSIZE-1 , YSIZE-1, 0
SET POINT STYLE 1
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL SUB LINE(XS,YS,XE,YE,C)
OPTION ARITHMETIC COMPLEX
SET COLOR C
PLOT LINES:XS,YS;XE,YE
END SUB
 

Elementary Cellular Automaton

 投稿者:しばっち  投稿日:2015年10月28日(水)22時16分48秒
  http://mathworld.wolfram.com/ElementaryCellularAutomaton.html
http://mathworld.wolfram.com/Rule28.html
http://mathworld.wolfram.com/Rule30.html
http://mathworld.wolfram.com/Rule50.html

!'Elementary Cellular Automaton
CALL GINIT(800,400)
DIM M(50,25)
INPUT  PROMPT "RULE=":RULE !' 0<RULE<=255(2^8-1)
LET M(25,1)=1 !'初期値
FOR Y=1 TO 24
   FOR X=1 TO 50
      IF X-1>=1 THEN  LET CC=4*M(X-1,Y)
      LET CC=CC+2*M(X,Y)
      IF X+1<=50 THEN LET CC=CC+M(X+1,Y)
      IF BITAND(RULE,2^CC)>0 THEN
         LET M(X,Y+1)=1
      END IF
   NEXT X
NEXT  Y
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1,1 : M
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
!'SET COLOR MIX(0) 0,0,0
!'SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

Totalistic Cellular Automaton

 投稿者:しばっち  投稿日:2015年10月28日(水)22時17分17秒
  http://mathworld.wolfram.com/TotalisticCellularAutomaton.html
http://mathworld.wolfram.com/Code912.html
http://mathworld.wolfram.com/Code177.html

!'Totalistic Cellular Automaton
CALL GINIT(800,400)
DIM M(50,25)
INPUT  PROMPT "RULE=":RULE !'0<RULE<=2186(3^7-1)
LET M(25,1)=1 !'初期値
!'LET M(25,1)=2
LET C$=RIGHT$("000000"&NSTR$(RULE,3),7)
FOR Y=1 TO 24
   FOR X=1 TO 50
      IF X-1>=1 THEN  LET CC=M(X-1,Y) ELSE LET CC=0
      LET CC=CC+M(X,Y)
      IF X+1<=50 THEN LET CC=CC+M(X+1,Y)
      LET C=VAL(C$(7-CC:7-CC))
      LET M(X,Y+1)=C
   NEXT X
NEXT  Y
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1,1 : M
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 1,1,1
SET COLOR MIX(1) .5,.5,.5
SET COLOR MIX(2) 0,0,0
!'SET COLOR MIX(3) 1,0,1
!'SET COLOR MIX(4) 0,1,0
!'SET COLOR MIX(5) 0,1,1
!'SET COLOR MIX(6) 1,1,0
!'SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION NSTR$(X,N) !'N進法
DO
!' LET A$=MID$("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",MOD(X,N)+1,1)
   LET A$=STR$(MOD(X,N))
   LET B$=A$&B$
   LET X=INT(X/N)
LOOP UNTIL X=0
LET NSTR$=B$
END FUNCTION
 

Barnsley's Fern

 投稿者:しばっち  投稿日:2015年10月28日(水)22時17分42秒
  http://mathworld.wolfram.com/BarnsleysFern.html

!'Barnsley's Fern
RANDOMIZE
SET WINDOW -5,5,0,10
SET POINT STYLE 1
FOR I=1 TO 1000000
   SELECT CASE INT(RND*4)
   CASE 0
      LET XX=.85*X+.04*Y
      LET YY=-.04*X+.85*Y+1.6
   CASE 1
      LET XX=-.15*X+.28*Y
      LET YY=.26*X+.24*Y+.44
   CASE 2
      LET XX=.2*X-.26*Y
      LET YY=.23*X+.22*Y+1.6
   CASE 3
      LET XX=0
      LET YY=.16*Y
   END SELECT
   PLOT POINTS:XX,YY
   LET X=XX
   LET Y=YY
NEXT I
END
 

Recurrence Plot

 投稿者:しばっち  投稿日:2015年10月28日(水)22時18分12秒
  http://mathworld.wolfram.com/RecurrencePlot.html

!'Recurrence Plot
CALL GINIT(600,600)
SET WINDOW -10,10,-10,10
FOR Y=-10 TO 10 STEP 1/32
   FOR X=-10 TO 10 STEP 1/32
      LET C=ABS(SIN(X)-SIN(Y))*7+1
      !' LET C=ABS(TAN(X)-TAN(Y))+1
      !' LET C=ABS(SEC(X)-SEC(Y))
      !' LET C=ABS(X*X-Y*Y)+1
      CALL PSET(X,Y,MOD(INT(C),8))
   NEXT X
NEXT Y
END

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB
 

Reverend Back's Abbey Floor

 投稿者:しばっち  投稿日:2015年10月28日(水)22時18分51秒
  http://mathworld.wolfram.com/ReverendBacksAbbeyFloor.html

!'Reverend Back's Abbey Floor
LET A$="01"
FOR I=1 TO 4
   LET B$=A$&A$&REV$(A$)
   LET A$=B$
NEXT I
LET L=LEN(A$)
DIM M(L,L)
FOR X=1 TO L
   FOR Y=1 TO L
      LET M(X,Y)=MOD(VAL(A$(X:X))+VAL(A$(Y:Y)),2)
   NEXT Y
NEXT X
SET WINDOW 0,1,0,1
MAT PLOT CELLS, IN 0 , 0 ; 1 , 1 : M
END

EXTERNAL  FUNCTION REV$(X$)
LET S$=""
FOR I=LEN(X$) TO 1 STEP -1
   LET S$=S$&X$(I:I)
NEXT I
LET REV$=S$
END FUNCTION
 

Thue-Morse Sequence

 投稿者:しばっち  投稿日:2015年10月28日(水)22時19分23秒
  http://mathworld.wolfram.com/Thue-MorseSequence.html
http://mathworld.wolfram.com/MephistoWaltzSequence.html

!'Thue-Morse Sequence
LET A$="01"
FOR N=1 TO 6
   LET B$=""
   FOR I=1 TO LEN(A$)
      SELECT CASE A$(I:I)
      CASE "0"
         LET B$=B$&"01"
      CASE "1"
         LET B$=B$&"10"
      END SELECT
   NEXT I
   LET A$=B$
NEXT N

!'Mephisto Waltz Sequence
!'LET A$="0"
!'FOR N=1 TO 5
!'   LET B$=""
!'   FOR I=1 TO LEN(A$)
!'      SELECT CASE A$(I:I)
!'      CASE "0"
!'         LET B$=B$&"001"
!'      CASE "1"
!'         LET B$=B$&"110"
!'      END SELECT
!'   NEXT I
!'   LET A$=B$
!'NEXT N
LET L=LEN(A$)
DIM M(L,L)
FOR X=1 TO L
   FOR Y=1 TO L
      LET M(X,Y)=MOD(VAL(A$(X:X))+VAL(A$(Y:Y)),2)
   NEXT Y
NEXT X
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1 , 1 : M
END
 

Logistic Map

 投稿者:しばっち  投稿日:2015年10月28日(水)22時20分4秒
  http://mathworld.wolfram.com/LogisticMap.html

!'Logistic Map
SET WINDOW 0,1,0,1
LET R=4
FOR NN=1 TO 6
   SET LINE COLOR N+1
   FOR X=0 TO 1 STEP 1/128
      LET XX=X
      FOR N=1 TO NN
         LET XX=R*XX*(1-XX)
      NEXT N
      PLOT LINES: X,XX;
   NEXT X
   PLOT LINES
NEXT NN
END
 

MoirePattern

 投稿者:しばっち  投稿日:2015年10月28日(水)22時21分11秒
  http://mathworld.wolfram.com/MoirePattern.html

!'MoirePattern
SET WINDOW -1,1,-1,1
DO
   FOR T=2*PI TO 0 STEP -PI/180*15
      SET DRAW MODE EXPLICIT
      DRAW BOX WITH ROTATE(0)
      DRAW BOX WITH ROTATE(T)
      WAIT DELAY .1
      SET DRAW MODE HIDDEN
      CLEAR
   NEXT T
LOOP
END

EXTERNAL  PICTURE BOX
FOR X=-.3 TO .3 STEP 1/128
   PLOT LINES:X,-.6;X,.6
NEXT  X
END PICTURE
 

Harmonic Number

 投稿者:しばっち  投稿日:2015年10月28日(水)22時21分37秒
  http://mathworld.wolfram.com/BookStackingProblem.html
http://mathworld.wolfram.com/HarmonicNumber.html

!'Harmonic Number
SET WINDOW -.5,5,-10,200
DRAW GRID (1,50)
FOR Y=0 TO 200
   LET X=H(Y)
   PLOT LINES:X,Y;X+1,Y
NEXT  Y
END

EXTERNAL  FUNCTION H(X)
FOR I=1 TO X
   LET S=S+1/I
NEXT I
LET H=S/2
END FUNCTION
 

Delannoy Number

 投稿者:しばっち  投稿日:2015年10月28日(水)22時22分18秒
  http://mathworld.wolfram.com/DelannoyNumber.html

!'Delannoy Number
FOR J=0 TO 7
   FOR I=0 TO 7
      PRINT USING "######":D(I,J);
   NEXT I
   PRINT
NEXT J
END

EXTERNAL  FUNCTION D(A,B)
IF A=0 AND B=0 THEN
   LET D=1
ELSEIF A<0 OR B<0 THEN
   LET D=0
ELSE
   LET D=D(A-1,B)+D(A,B-1)+D(A-1,B-1)
END IF
END FUNCTION

-------------------------------------------------------------------------------------
OPTION ARITHMETIC DECIMAL_HIGH
OPTION BASE 0
LET N=100
DIM M(N,N)
LET K=3
FOR X=0 TO N/2
   FOR Y=0 TO N/2
      LET M(X,Y)=MOD(D(X,Y),K)
   NEXT Y
NEXT X
FOR X=N/2 TO 0 STEP -1
   FOR Y=0 TO N/2
      LET M(N-X,Y)=MOD(D(X,Y),K)
   NEXT Y
NEXT X
FOR X=0 TO N
   FOR Y=N/2 TO 0 STEP -1
      LET M(X,N-Y)=MOD(D(X,Y),K)
   NEXT Y
NEXT X
FOR X=N/2 TO 0 STEP -1
   FOR Y=N/2 TO 0 STEP -1
      LET M(N-X,N-Y)=MOD(D(X,Y),K)
   NEXT Y
NEXT X
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1 , 1 : M
END

EXTERNAL  FUNCTION D(N,K) !'Delannoy Number
OPTION ARITHMETIC DECIMAL_HIGH
FOR I=0 TO N
   LET S=S+COMB(K,I)*COMB(N+K-I,K)
NEXT I
LET D=S
END FUNCTION
 

Pythagorean Triple

 投稿者:しばっち  投稿日:2015年10月28日(水)22時22分50秒
  http://mathworld.wolfram.com/PythagoreanTriple.html

!'Pythagorean Triple
CALL GINIT(600,600)
SET WINDOW -200,200,-200,200
FOR X=0 TO 200
   FOR Y=0 TO 200
   !' IF X>=Y AND FRAC(SQR(X*X-Y*Y))=0 THEN
      IF FRAC(SQR(X*X+Y*Y))=0 THEN
         CALL PSET(X,Y,7)
         CALL PSET(-X,Y,7)
         CALL PSET(X,-Y,7)
         CALL PSET(-X,-Y,7)
      END IF
   NEXT  Y
NEXT   X
END

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL  FUNCTION FRAC(Z)
LET FRAC=Z-INT(Z)
END FUNCTION
 

Kaprekar Number

 投稿者:しばっち  投稿日:2015年10月28日(水)22時23分20秒
  http://mathworld.wolfram.com/KaprekarNumber.html

!'Kaprekar Number
FOR I=4 TO 100000
   LET A$=STR$(I*I)
   FOR J=1 TO LEN(A$)-1
      LET L$=A$(1:J)
      LET R$=A$(J+1:LEN(A$))
      IF VAL(L$)+VAL(R$)=I THEN PRINT I;":";I*I;L$;"+";R$
   NEXT J
NEXT I
END
 

Heart Curve

 投稿者:しばっち  投稿日:2015年10月28日(水)22時23分48秒
  http://mathworld.wolfram.com/HeartCurve.html
http://mathworld.wolfram.com/HeartSurface.html

!'Heart Curve
SET WINDOW -3,3,-4.5,1.5
FOR T=0 TO 360
   LET R=2-2*SIN(RAD(T))+SIN(RAD(T))*SQR(ABS(COS(RAD(T))))/(SIN(RAD(T))+1.4)
   LET X=R*COS(RAD(T))
   LET Y=R*SIN(RAD(T))
   PLOT LINES:X,Y;
NEXT T
WAIT DELAY 2
CLEAR
SET WINDOW -20,20,-20,20
FOR T=0 TO 360
   LET X=16*SIN(RAD(T))^3
   LET Y=13*COS(RAD(T))-5*COS(RAD(2*T))-2*COS(RAD(3*T))-COS(RAD(4*T))
   PLOT LINES:X,Y;
NEXT T
END

-----------------------------------------------------------------------------------------------
!'Heart Surface
CALL GINIT(600,600)
SET WINDOW -2,2,-2,2
FOR Z=2 TO -2 STEP -1/256
   FOR X=-2 TO 2 STEP 1/256
      IF (X^2+Z^2-1)^3-X^2*Z^3<0 THEN CALL PSET(X,Z,7)
   NEXT X
NEXT  Z
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
SET COLOR 7
END SUB

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB
 

Cannabis Curve

 投稿者:しばっち  投稿日:2015年10月28日(水)22時24分18秒
  http://mathworld.wolfram.com/CannabisCurve.html

!'Cannabis Curve
SET WINDOW -3,3,-1,5
LET A=1
FOR T=0 TO 360 STEP 1/8
   LET R=A*(1+9/10*COS(RAD(8*T)))*(1+COS(RAD(24*T))/10)*(9/10+COS(RAD(200*T))/10)*(1+SIN(RAD(T)))
   LET X=R*COS(RAD(T))
   LET Y=R*SIN(RAD(T))
   PLOT LINES:X,Y;
NEXT T
END
 

Teardrop Curve

 投稿者:しばっち  投稿日:2015年10月28日(水)22時24分59秒
  http://mathworld.wolfram.com/TeardropCurve.html

!'Teardrop Curve
SET WINDOW -1.2,1.2,-1.2,1.2
DRAW GRID(.1,.1)
FOR M=0 TO 7
   PLOT LINES
   FOR T=0 TO 360
      LET X=COS(RAD(T))
      LET Y=SIN(RAD(T))*SIN(RAD(T/2))^M
      PLOT LINES:X,Y;
   NEXT T
NEXT M
END
 

Nested Polygon

 投稿者:しばっち  投稿日:2015年10月28日(水)22時25分28秒
  http://mathworld.wolfram.com/NestedPolygon.html

!'Nested Polygon
SET WINDOW -1,1,-1,1
LET N=5
DIM X(N),Y(N),XX(N),YY(N)
FOR I=0 TO 359 STEP 360/N
   LET K=K+1
   LET X(K)=SIN(RAD(I))
   LET Y(K)=COS(RAD(I))
   PLOT LINES:X(K),Y(K);
NEXT I
PLOT LINES:X(1),Y(1)
!'LET C=0
!'SET AREA COLOR C
!'MAT PLOT AREA:X,Y
LET A=9
LET B=1
DO
   FOR I=1 TO N
      LET XX(I)=(A*X(I)+B*X(MOD(I,N)+1))/(A+B)
      LET YY(I)=(A*Y(I)+B*Y(MOD(I,N)+1))/(A+B)
      PLOT LINES:XX(I),YY(I);
   NEXT I
   PLOT LINES:XX(1),YY(1)
   !'LET C=MOD(C+1,2)
   !'SET AREA COLOR C
   !'MAT PLOT AREA:XX,YY
   MAT X=XX
   MAT Y=YY
LOOP UNTIL SQR((X(2)-X(1))^2+(Y(2)-Y(1))^2)<.03
END
 

Truchet Tiling

 投稿者:しばっち  投稿日:2015年10月28日(水)22時25分52秒
  http://mathworld.wolfram.com/TruchetTiling.html

!'Truchet Tiling
CALL GINIT(600,600)
RANDOMIZE
LET H=50
FOR Y=H TO 600-H STEP 2*H
   FOR X=H TO 600-H STEP 2*H
      IF RND<.5 THEN CALL P1(X,Y,H) ELSE CALL P2(X,Y,H)
      !' IF RND<.5 THEN CALL L1(X,Y,H) ELSE CALL L2(X,Y,H)
   NEXT X
NEXT Y
END

EXTERNAL  SUB P1(X,Y,H)
PLOT LINES
FOR I=270 TO 360
   LET XX=X-H+H*COS(RAD(I))
   LET YY=Y-H-H*SIN(RAD(I))
   PLOT LINES:XX,YY;
NEXT I
PLOT LINES
FOR I=90 TO 180
   LET XX=X+H+H*COS(RAD(I))
   LET YY=Y+H-H*SIN(RAD(I))
   PLOT LINES:XX,YY;
NEXT I
END SUB

EXTERNAL  SUB P2(X,Y,H)
PLOT LINES
FOR I=180 TO 270
   LET XX=X+H+H*COS(RAD(I))
   LET YY=Y-H-H*SIN(RAD(I))
   PLOT LINES:XX,YY;
NEXT I
PLOT LINES
FOR I=0 TO 90
   LET XX=X-H+H*COS(RAD(I))
   LET YY=Y+H-H*SIN(RAD(I))
   PLOT LINES:XX,YY;
NEXT I
END SUB

EXTERNAL  SUB L1(X,Y,H)
PLOT LINES:X,Y-H;X-H,Y
PLOT LINES:X+H,Y;X,Y+H
END SUB

EXTERNAL  SUB L2(X,Y,H)
PLOT LINES:X,Y-H;X+H,Y
PLOT LINES:X-H,Y;X,Y+H
END SUB

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
SET LINE COLOR 7
END SUB
 

Spherical Code

 投稿者:しばっち  投稿日:2015年10月28日(水)22時26分20秒
  http://mathworld.wolfram.com/SphericalCode.html

!'Spherical Code
CALL GINIT(600,600)
LET RR=150
LET X=300
LET Y=300
LET M=9
CALL CIRCLE(X,Y,RR,7)
LET T=360/M
LET R=1/(CSC(RAD(T/2))-1)*RR
FOR TH=0 TO 360 STEP T
   CALL CIRCLE(X+(RR+R)*COS(RAD(TH)),Y-(RR+R)*SIN(RAD(TH)),R,7)
NEXT TH
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL SUB CIRCLE(X,Y,R,C)
SET COLOR C
DRAW CIRCLE WITH SCALE(R)*SHIFT(X,Y)
END SUB
 

Swirl

 投稿者:しばっち  投稿日:2015年10月28日(水)22時26分53秒
  http://mathworld.wolfram.com/Swirl.html

!'Swirl
CALL GINIT(601,601)
SET WINDOW -300,300,300,-300
FOR N=1 TO 6
   CLEAR
   FOR Y=-300 TO 300
      FOR X=-300 TO 300
         IF X=0 AND Y=0 THEN LET T=0 ELSE LET T=ANGLE(X,Y)
         LET R=SQR(X*X+Y*Y)
         LET C=SIN(6*COS(RAD(R))-N*T)
         CALL PSET(X,Y,128+C*128,128+C*128,128+C*128)
      NEXT X
   NEXT Y
   WAIT DELAY 1
NEXT N
END

EXTERNAL SUB GINIT(XSIZE,YSIZE)
SET BITMAP SIZE XSIZE,YSIZE
SET COLOR MIX(0) 0,0,0
SET COLOR MODE "NATIVE"
CLEAR
SET POINT STYLE 1
SET WINDOW 0,XSIZE-1,YSIZE-1,0
END SUB

EXTERNAL SUB PSET(X,Y,R,G,B)
LET RR=MIN(255,MAX(0,INT(R)))
LET GG=MIN(255,MAX(0,INT(G)))
LET BB=MIN(255,MAX(0,INT(B)))
SET COLOR COLORINDEX(RR/255,GG/255,BB/255)
PLOT POINTS:X,Y
END SUB
 

Maurer Rose

 投稿者:しばっち  投稿日:2015年10月28日(水)22時27分25秒
  http://mathworld.wolfram.com/MaurerRose.html

!'Maurer Rose
SET WINDOW -1,1,-1,1
RESTORE 1
READ N,D
1 DATA 4,119
2 DATA 6,71
3 DATA 3,29
4 DATA 3,41
5 DATA 3,61
6 DATA 3,131
7 DATA 3,149
8 DATA 4,13
9 DATA 4,31
10 DATA 4,41
11 DATA 4,71
12 DATA 4,83
13 DATA 4,101
14 DATA 4,149
15 DATA 5,31
16 DATA 5,83
   FOR I=1 TO 360
      LET T=T+D
      LET R=SIN(N*RAD(T))
      LET X=R*COS(RAD(T))
      LET Y=R*SIN(RAD(T))
      PLOT LINES:X,Y;
   NEXT I
END
 

奇数列には不思議がいっぱい。

 投稿者:たろさ  投稿日:2015年10月31日(土)19時54分51秒
  自分のブログが投稿中エラーのため、こちらに失礼します。

!  フィボナッチ数列  1000桁 開発用
OPTION ARITHMETIC DECIMAL_HIGH
LET t0=TIME
PRINT DATE$;"/"; TIME$

FOR x=1 TO 100001 STEP 4
   PRINT
   PRINT "X=";x
   FOR n=1 TO 3
      LET H=(((1+SQR(x))/2)^n-((1-SQR(x))/2)^n)/(((1+SQR(x))/2)-((1-SQR(x))/2))
      PRINT n;H
   NEXT n
NEXT X
PRINT
PRINT TIME-t0;"秒で計算しました"
PRINT DATE$;"/"; TIME$
END


基本的にフィボナッチ数列を求めるプログラムから開発しました。

一般的に知られているヒィボナッチ数列

X=5 のものです。これ以外にも一から奇数列に沢山あることがわかりました。

Ramanujan ζ(2n+1) 奇数の探究中です。

奇数列には、素数があります。


FOR n=1 TO 100
   LET x=(6*n-1)/3
   LET y=(6*n+1)/3
   PRINT n;x+y;x;y
NEXT n
END


これも実行すると、奇数列には、大きく分けて二種類の分類が可能ではないのか?

そんな素人思考


http://blogs.yahoo.co.jp/donald_stinger

 

世界が広がる

 投稿者:GAI  投稿日:2015年11月 1日(日)12時06分11秒
  > No.3939[元記事へ]

しばっちさんへのお返事です。

Mathworld のいろいろな知らない世界をプログラムにしてもらって、とても勉強になります。
これからもこのシリーズを続けてもらえるととてもありがたいのでよろしくお願いします。
http://mathworld.wolfram.com/HafermanCarpet.html
はどの様にプログラムに組めるのか教えて下さい。
 

Re: 世界が広がる

 投稿者:しばっち  投稿日:2015年11月 1日(日)17時51分15秒
  > No.3941[元記事へ]

GAIさんへのお返事です。

> http://mathworld.wolfram.com/HafermanCarpet.html
> はどの様にプログラムに組めるのか教えて下さい。

既に「String Rewriting System」の中で
データ文4行に"Haferman Carpet"を定義していますので
RESTORE文を4行に変更してください。
http://6317.teacup.com/basic/bbs/3912

!'String Rewriting System
INPUT  PROMPT "LEVEL=":LEV !' (1<=LEV<=5)
DIM A(3^LEV,3^LEV),B(3^LEV,3^LEV),P(3,3),Q(3,3)
RESTORE 4  !'<-----ここを4行に変更
READ A(1,1) !'初期値
MAT READ P,Q

4 DATA 1   !'Haferman Carpet
   DATA 1,1,1
   DATA 1,1,1
   DATA 1,1,1
   !'
   DATA 0,1,0
   DATA 1,0,1
   DATA 0,1,0

初期値が間違っていました。上記のDATA分にあわせてください。
推測で判断していたのですみません。

> Mathworld のいろいろな知らない世界をプログラムにしてもらって、とても勉強になります。
> これからもこのシリーズを続けてもらえるととてもありがたいのでよろしくお願いします。

これは私が、このサイトを見て理解し、BASIC上にて再現できるものと判断したものです。
また、再現できたとしても、その一部分に過ぎません。(再現できていると言えないものもありますが...)

サイト内が英文ということもあり、理解できないもの、再現できそうにないものも多く、
私も趣味の範囲でやっているだけなので、残念ながら少し難しいと思います。

 

Re: 世界が広がる

 投稿者:白石 和夫  投稿日:2015年11月 2日(月)18時33分8秒
  > No.3941[元記事へ]

定義に忠実にHaferman Carpetを描きます。

100 REM Haferman Carpet
110 REM http://mathworld.wolfram.com/HafermanCarpet.html
120 DIM h0(3,3),h1(3,3)
130 DATA 1,1,1
140 DATA 1,1,1
150 DATA 1,1,1
160 MAT READ h0
170 DATA 0,1,0
180 DATA 1,0,1
190 DATA 0,1,0
200 MAT READ h1
210 LET n=5
220 SET bitmap SIZE 3^n, 3^n
230 SET WINDOW 0,3^n-1, 0,3^n-1
240 MAT PLOT CELLS, IN 0,0; 3^n-1,3^n-1: h0
250 FOR k=n TO 1 STEP -1
260    PAUSE
270    LET s=3^k
280    FOR a=0 TO 3^n-s STEP s
290       FOR b=0 TO 3^n-s STEP s
300          ASK PIXEL VALUE(a, b) p
310          IF p=0 THEN
320             MAT PLOT CELLS, IN a,b;a+s-1,b+s-1: h0
330          ELSE
340             MAT PLOT CELLS, IN a,b;a+s-1,b+s-1: h1
350          END IF
360       NEXT b
370    NEXT a
380 NEXT k
390 END

 

Re: 不定方程式の解

 投稿者:山中和義  投稿日:2015年11月 5日(木)12時24分58秒
  > No.3862[元記事へ]

問題
正の整数x,y,zは、次の式を満たす。
3x+y=2z、4y=2x+3z
このとき、7z=Ax+Byとなる正の整数A,Bを求めよ。

考察
式1×2+式2より、4x+6y=7z
式1×5-式2より、17x+y=7z

これ以外はないのか。
(終わり)

答え
zを消去する。6z=9x+3y=-4x+8y ∴13x=5y
kを比例定数として、x=5k、y=13k
式1に代入して、z=14k
これより、7z=98k=5kA+13kBなので、不定方程式98=5A+13Bを得る。
数列{98-13B}は、85,72,59,46,33,20,7
5の倍数は、85,20なので、(A,B)=(17,1)、(4,6)
(終わり)

FOR S=98-13 TO 1 STEP -13
   IF MOD(S,5)=0 THEN PRINT S/5;(98-S)/13
NEXT S
END



・不定方程式の導出
各式x,y,zの係数を並べた行列式
 l  3  1 -2 l = 0
 l -2  4 -3 l
 l  A  B -7 l
から得られる。



類題
正の整数x,y,z,wは、次の式を満たす。
3x+y=2w、x+y=2z、2y+2z=3w
このとき、5z=Ax+By+Czとなる正の整数A,B,Cを求めよ。

答え
(x,y,z,w)=(3k,7k,5k,8k)
40=3A+7B+5Cより、(A,B,C)=(1,1,6)、(2,2,4)、(3,3,2)、(6,1,3)、(7,2,1)
(終わり)

FOR S=40-7 TO 1 STEP -7
   FOR T=S-5 TO 1 STEP -5
      IF MOD(T,3)=0 THEN PRINT T/3;(40-S)/7;(S-T)/5
   NEXT T
NEXT S
END


 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 5日(木)19時12分52秒
  > No.3897[元記事へ]

たろささんへのお返事です。

暫定版ですが、出来ました。
http://mathworld.wolfram.com/RiemannZetaFunction.html
http://6317.teacup.com/basic/bbs/3880


! Cohen 2000 MOD(x,4)=1(-)Ramanujan ζ(2n+1) zeta(x)1000桁精度
OPTION ARITHMETIC DECIMAL_HIGH
PRINT DATE$;"/"; TIME$
LET t0=TIME
LET Na=0
FOR n=5 TO 9 STEP 4
   LET Na=Na+2
   LET f=((2*PI)^n)/(FACT(n+1)*(n-1))
   LET S=0
   LET w= INT((n+1)/4)
   FOR k1=0 TO w
      LET S=S+((-1)^(k1))*(n+1-4*k1)*comb(n+1,2*k1)*BERNOULLI(n+1-2*k1)*BERNOULLI(2*k1)
   NEXT k1
   LET S1=0
   FOR k2=1 TO 365 !数値溢れ370まで
      LET q=2*PI*k2
      LET S1=S1+(EX(q)*((1+(4*PI*k2)/(n-1))-1))/((k2^n)*(EX(q)-1)^2)
   NEXT k2
   LET zeta=f*S-2*S1
   PRINT n;zeta+Ramanujan(Na)
NEXT n
PRINT TIME-t0;"秒"
PRINT DATE$;"/"; TIME$
END

EXTERNAL FUNCTION Ramanujan(n) !zeta(x) MOD(x,4)=3
OPTION ARITHMETIC DECIMAL_HIGH
FOR n=1 TO n
   LET f=2^(2*n)*pi^(2*n+1)
   LET S=0
   FOR k1=0 TO n+1
      LET S=S+((-1)^(k1+1))*BERNOULLI(2*k1)/FACT(2*k1)*BERNOULLI(2*n+2-2*k1)/FACT(2*n+2-2*k1)
   NEXT k1
   LET S1=0
   FOR k2=1 TO 360
      LET q=2*PI*k2
      LET S1=S1+(k2^(-2*n-1))/(EX(q)-1)
   NEXT k2
   LET Ramanujan=f*S-2*S1
NEXT n
END FUNCTION

EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s=0
   FOR i=0 TO k-2
      LET s=s+comb(k,i)*b(i)
   NEXT i
   LET  b(k-1)=-s/k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION

!1000桁モードで利用する指数関数
EXTERNAL FUNCTION EX(x)
OPTION ARITHMETIC DECIMAL_HIGH
FUNCTION s(y,n)
   LET t=y*x/n
   IF ABS(t)<=EPS(0) THEN
      LET s=y+t
   ELSE
      LET s=y+s(t,n+1)
   END IF
END FUNCTION
LET EX=s(1,1)
END FUNCTION


似たような計算を二度繰り返しているので、しばっちさんなら半分以下になるのでは?

宜しくお願いします。


1000桁精度確認画像を添付しました。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 5日(木)19時17分42秒
  > No.3945[元記事へ]

たろささんへのお返事です。

zeta(x)1000桁プロジェクトの副産物です。

!1/tanh(pi) 参照 (93)(Cohen 2000). http://mathworld.wolfram.com/RiemannZetaFunction.html
OPTION ARITHMETIC DECIMAL_HIGH
LET t0=TIME
FOR n=5 TO 101 STEP 4 !1000桁なので、1つ求めるのに3分前後
   PRINT n;Cohen(n)
NEXT n
PRINT TIME-t0;"秒"
END

EXTERNAL FUNCTION Cohen(n)
OPTION ARITHMETIC DECIMAL_HIGH
LET n=n
LET f=((2*PI)^n)/(FACT(n+1)*(n-1))
LET S=0
LET w= INT((n+1)/4)
FOR k1=0 TO w
   LET S=S+((-1)^(k1))*(n+1-4*k1)*comb(n+1,2*k1)*BERNOULLI(n+1-2*k1)*BERNOULLI(2*k1)
NEXT k1
LET S1=0
FOR k2=1 TO 365 !数値溢れ370まで
   LET q=2*PI*k2
   LET S1=S1+(EX(q)*((1+(4*PI*k2)/(n-1))-1))/((k2^n)*(EX(q)-1)^2)
NEXT k2
LET Cohen=f*S-2*S1
END FUNCTION


EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s=0
   FOR i=0 TO k-2
      LET  s=s+comb(k,i)*b(i)
   NEXT i
   LET  b(k-1)=- s / k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION

!1000桁モードで利用する指数関数
EXTERNAL FUNCTION EX(x)
OPTION ARITHMETIC DECIMAL_HIGH
FUNCTION s(y,n)
   LET t=y*x/n
   IF ABS(t)<=EPS(0) THEN
      LET s=y+t
   ELSE
      LET s=y+s(t,n+1)
   END IF
END FUNCTION
LET EX=s(1,1)
END FUNCTION



算出DATA
1.00374187319732128820155269119480001746245242299590766340483002846700467633058071968805856226611181108206128491019325061879605107651261114766526275503361003853072936960008291766340390487115974168534515598148720703074119581432829005076897960080729783313913675902021836616743235177078620582793116121623385243650737831989816409452105664540813213633855367667620147214800141227538339590493683121477293087676562027398949714485347712152335504957823492370068640259966669520659878561730890939369943486268450302072478377125499645534741877271067064330638764179343923989667027533560460548667576913476231269740949181859624014613840494879775926675918637565864354272939964758378784384814853739817998063520249485509081842409908405798966658043605867324226611559761338616788511916966279166969797912586225650116869534812022674061393607939807598695611881201024178316343676062941988614835197888129877691966657602424720720262267094658156963690202633514058638342845140431580867749428636844298782565307497805992730890615134629252844(100)
1.00374187319732128820155269119480001746245242299590766340483002846700467633058071968805856226611181108206128491019325061879605107651261114766526275503361003853072936960008291766340390487115974168534515598148720703074119581432829005076897960080729783313913675902021836616743235177085693653641094489900811945233516538437429962038403426889569939588603957843064739604657825503776859020334288039116530140662302979890324065405785969952934198127439339431268429059901727756268085278992170400641101103299862273911962461857405265315974823371680328100039732348448548943089086839961125441567327555121034642545598469936536206394523268336888456540698826104558575132586428240664077946490845779685218987559700141870359282083557544144299982311690543722569036691797965281872287465008189463863731384876762920380669760295584723060960795665958530142437960984475131578652442900631580728938025896365269527757322803875438206014238908280368546174254091769956430862124958753577254358357695958594014017186970858451472433850067958828382(200)
1.00374187319732128820155269119480001746245242299590766340483002846700467633058071968805856226611181108206128491019325061879605107651261114766526275503361003853072936960008291766340390487115974168534515598148720703074119581432829005076897960080729783313913675902021836616743235177085693653641094489900811945233516538437429962038403426889569939588603957843064739604657825503776859020334288039116530140662302979890324065405785969952934198127439339431268429059901727756268085278992170400641101103299862273911962461857405265315974823371680328100039732348448548943089086839961125441567327555121034642545598469936536206394523268336888456540698826104558575132586428240664077946490845839188975785892257991619023020637406929243458317296814619761392196084064095930968817137316805100037294689503745488706124666899413964895532933209653306488702079477466498993257038263735203242190432270423835610676865358171473549302841722395495015391276330099513338593481922278385751205360336352009745201657984970966051516246476846265266(225)


もしや、と思い。

! 1/tanh(pi)
OPTION ARITHMETIC DECIMAL_HIGH
LET t0=TIME
LET x=PI
LET SINH1=0
LET COSH1=0

FOR n=0 TO 225 !225まで
   LET SINH1=SINH1+x^(2*n+1)/FACT(2*n+1)
   LET COSH1=COSH1+x^(2*n)/FACT(2*n)
   PRINT n;1/(SINH1/COSH1)
NEXT n
PRINT SINH1/COSH1
PRINT 1/(SINH1/COSH1)
PRINT TIME-t0;"秒"
END



収束の仕方が違うようでした。


http://blogs.yahoo.co.jp/donald_stinger

 

やっとalpha 2 chisquared が出せました。

 投稿者:nu  投稿日:2015年11月 5日(木)19時50分48秒
  いつもお世話になっております。
積分における多桁計算方法とは

??投稿者:nu?
?投稿日:2015年 6月12日(金)07時42分35秒

として投稿した者です。

雑用に助けられ、心が折れそうになりながら、必死で
alpha 2 chisquared を探りだしました。
白石先生のご教授、しばっち先生の標準正規分布、ガンマ関数に刺激を受けて、さらに我楽多頓陳館様の玄関>第四展示室雑学の部屋>雑学コーナー>●統計学入門 ――あなたにも統計学がわかる!……かもしれない――>付録
http://www.snap-tck.com/room04/c01/stat/stat99/stat9901.htmlにおける、確率分布関数のヒントがなかったら、たぶんそのままになっていたと思います。
しばらくパソコンの画面を離れたいと思います。最後に、パソコンが低価格で使える時代、国や地域に生まれたことに感謝します。現在、情けないことに新しいバージョンのウイルス対策ソフトを導入するため、パソコンからの送信が出来ません。11月以内を目処に送信させていただきます。今後ともご教授お願いいたします。

gnuutera2012もといnuもといun
 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 5日(木)23時56分44秒
  > No.3946[元記事へ]

たろささんへのお返事です。

参照(63)http://mathworld.wolfram.com/RiemannZetaFunction.html

zeta(100)までは、速いと思いました。

!  ζ(2n) zeta(x)1000桁
OPTION ARITHMETIC DECIMAL_HIGH
LET t0=TIME
FOR n=2 TO 100 STEP 2 !452まで
   LET z=2^(n-1)*ABS(BERNOULLI(n))*PI^n/FACT(n)
   PRINT n;z
NEXT n
PRINT TIME-t0;"秒"
END

EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s=0
   FOR i=0 TO k-2
      LET  s=s+comb(k,i)*b(i)
   NEXT i
   LET  b(k-1)=- s / k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION


算出DATA
zeta( 452 )1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085988814176858736022924359538562907258501404151846766798778241932419782413925225831568060979382126233853707992486822907198580350290928486629026407372314803053733508131169217272750860805236981540665396616343561869002941657513484764112563318094346661647313403371674485076997284643252546537393229349439553279900027671289000817570677825614962942645759830524130307477731757211593662413791300985722530966557407104362199638978980114140200660955834824412210737939838949275010203805787030414698753154772220076211141972692525502559001072360551847142097111239758839507089745929847362853730452865224133201726011390589648358909320665895291010852042959240548123664377734867171422477568010977337488166197910909842401283979521056535019491488660676170103552866931249441209527690484943998422899043066150077961072636452156938609302069463626185009750807888631085481518813682245507032
      452  1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085988814176858736022924359538562907258501404151846766798778241932419782413925225831568060979382126233853707992486822907198580350290928486629026407372314803053733508131169217272750860805236981540665396616343561869002941657513484764112563318094346661647313403371674485076997284643252546537393229349439553279900027671289000817570677825614962942645759830524130307477731757211593662413791300985722530966557407104362199638978980114140200660955834824412210737939838949275010203805787030414698753154772220076211141972692525502559001072360551847142097111239758839507089745929847362853730452865224133201726011390589648358909320665895291010852042959240548123664377734867171422477568010977337488166197910909842401283979521056535019491488660676170103552866931249441209527690484943998422899043066150077961072636452156938609302069463626185009750807888631085481518813682245507048

末尾2桁の誤差ありました。どちらが正しいのか?

452で数値溢れです。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 6日(金)13時47分14秒
  > No.3945[元記事へ]

たろささんへのお返事です。

> 暫定版ですが、出来ました。

手直しして、途中からの計算をしました。

! Cohen 2000 MOD(x,4)=1(-)Ramanujan ζ(2n+1) zeta(x)1000桁精度
OPTION ARITHMETIC DECIMAL_HIGH
PRINT DATE$;"/"; TIME$
LET t0=TIME
FOR n=101 TO 105 STEP 4
   LET Na=(N-1)/2
   LET f=((2*PI)^n)/(FACT(n+1)*(n-1))
   LET S=0
   LET w= INT((n+1)/4)
   FOR k1=0 TO w
      LET S=S+((-1)^(k1))*(n+1-4*k1)*comb(n+1,2*k1)*BERNOULLI(n+1-2*k1)*BERNOULLI(2*k1)
   NEXT k1
   LET S1=0
   FOR k2=1 TO 365 !数値溢れ370まで
      LET q=2*PI*k2
      LET S1=S1+(EX(q)*((1+(4*PI*k2)/(n-1))-1))/((k2^n)*(EX(q)-1)^2)
   NEXT k2
   LET zeta=f*S-2*S1
   PRINT n;zeta+Ramanujan(Na)
NEXT n
PRINT TIME-t0;"秒"
PRINT DATE$;"/"; TIME$
END

EXTERNAL FUNCTION Ramanujan(n) !zeta(x) MOD(x,4)=3
OPTION ARITHMETIC DECIMAL_HIGH
FOR n=1 TO n
   LET f=2^(2*n)*pi^(2*n+1)
   LET S=0
   FOR k1=0 TO n+1
      LET S=S+((-1)^(k1+1))*BERNOULLI(2*k1)/FACT(2*k1)*BERNOULLI(2*n+2-2*k1)/FACT(2*n+2-2*k1)
   NEXT k1
   LET S1=0
   FOR k2=1 TO 360
      LET q=2*PI*k2
      LET S1=S1+(k2^(-2*n-1))/(EX(q)-1)
   NEXT k2
   LET Ramanujan=f*S-2*S1
NEXT n
END FUNCTION

EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s=0
   FOR i=0 TO k-2
      LET s=s+comb(k,i)*b(i)
   NEXT i
   LET  b(k-1)=-s/k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION

!1000桁モードで利用する指数関数
EXTERNAL FUNCTION EX(x)
OPTION ARITHMETIC DECIMAL_HIGH
FUNCTION s(y,n)
   LET t=y*x/n
   IF ABS(t)<=EPS(0) THEN
      LET s=y+t
   ELSE
      LET s=y+s(t,n+1)
   END IF
END FUNCTION
LET EX=s(1,1)
END FUNCTION


計算時間

20151106/10:49:06
50  101  1.00000000000000000000000000000039443045261050590335263935513575963608141044204433323680796761625237491928861445447104761428674299745438441574818957622047157087121949588291127548790096524591503013583366154091609592555734040093489167401537877730680292119177244345062720079530048987294893773720825124823557829467375629675004037826824689502078351153082020190034556854466943862945893574932257594460178334935822767226090976835684592392707422365634881380727204483236981418091615024437298781245092204000055752472644607980496146919583719462572020728942861303262753442706897595473814372098686898267645378670075647357998375763074992690066417983655645433158089100683705978144522084297107303957312401644138041378689506763888443128330237105606859250300409176278264467936209253937799101337731282246825242721017474195558896835960631640886967598186269848060428661060515337152476174048005987058003306858744049169321678254362379586923838911912007463446576063920040030151386246756337944355544528686758422059473828545744162746759
52  105  1.00000000000000000000000000000002465190328815661892710139510328781252773254859693427874476585837833141988834731051880378175626243532251405340305439542034477846314545378655567978140112785348324983780886855766308850997331315595325849404274875554200033271876099547506493928559569661347749040920220284617698459756285299907235960323489037631022207883909373233074479485346380846526453164589760838258265649982040133795192689428043960352287449872071163012854161869583666131500588715228284752482681170211212356737159502128684897403886992986286509036909235009575710743607587868873632989523716970514420613758929899183152917522064922535459889570084454194640071087546111610176471433038740037583760393532387745911806779739726065271018823999809581623114128124221327426547497395047222095610853791743910319009075257991685492529861618941593722311219357538689767376851814030062298069692165312911207185810141620298109690603253051928062249868752743843314262982434832062833658466460497038837578288576444294145687146867275876456996
7775.49 秒
20151106/12:58:41
G3258@4.6GHz(2時間09分35.49秒)

このPCの場合は、Ramanujan ζ(2n+1)と個別に、Cohen 2000 MOD(x,4)=1計算した方が速い。


Ramanujan ζ(2n+1)の探究には、役に立つのでは?


参照
双曲線関数にまつわる重要な公式まとめ
http://mathtrain.jp/hyperbolic


OPTION ARITHMETIC COMPLEX
PRINT 1/TANH(PI)
LET t=(EXP(PI)-EXP(-PI))/(EXP(PI)+EXP(-PI))
PRINT 1/t
END


素人思考では、桁合わせが難しい。


http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 6日(金)17時00分1秒
  > No.3949[元記事へ]

たろささんへのお返事です。

zeta(x)1000桁プロジェクトからの報告です。

既にご存知の方も多いと思います。


!総和式 ゼータ関数 1000桁 精度確認用
OPTION ARITHMETIC RATIONAL
PRINT DATE$;"/"; TIME$

LET format$="#." & REPEAT$("#",999)
LET t0=TIME
LET f=0
FOR s=1000 TO 1100 STEP 1
   LET z=ZETA(s)
   PRINT s;
   PRINT USING format$:z
NEXT s
PRINT TIME-t0;"秒で計算しました"
PRINT DATE$;"/"; TIME$
END

EXTERNAL  FUNCTION ZETA(s)
OPTION ARITHMETIC RATIONAL
LET f=0
FOR n=1 TO 10
   LET f=f+1/n^s
NEXT n
LET  ZETA=f
END FUNCTION


計算時間は、AMD 2.4GHz 191/25 秒


ゼータ関数1000桁の収束

!総和式 ゼータ関数 1000桁 精度確認用
OPTION ARITHMETIC RATIONAL
PRINT DATE$;"/"; TIME$

LET format$="#." & REPEAT$("#",999)
LET t0=TIME
LET f=0
LET s=3318
LET f=0
FOR n=1 TO 5
   LET f=f+1/n^s
   PRINT USING format$:f
NEXT n
PRINT s;
PRINT USING format$:f

PRINT TIME-t0;"秒で計算しました"
PRINT DATE$;"/"; TIME$
END


計算結果

zeta(3319)から1になりました。

zeta(350)から、総和式の計算速度と比較しています。

http://blogs.yahoo.co.jp/donald_stinger

 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月 8日(日)18時57分10秒
  > No.3950[元記事へ]

たろささんへのお返事です。

!zeta(-n)=bernoulli(n+1)/(n+1)*(-1)^n
OPTION ARITHMETIC RATIONAL
LET format$="#." & REPEAT$("#",999)
FOR n=0 TO 18
   LET ZETA=BERNOULLI(n+1)/(n+1)*(-1)^n
   ! PRINT n;ROUND(ZETA,999)             !1000桁モード
   PRINT n;
   PRINT USING format$:ZETA
NEXT n
END

EXTERNAL FUNCTION BERNOULLI(n) !'ベルヌーイ定数 ゼロ有り
OPTION ARITHMETIC RATIONAL
DIM b(0 TO n)
LET  b(0)=1
IF n=0 THEN LET BERNOULLI=1
FOR k=2 TO n+1
   LET  s=0
   FOR i=0 TO k-2
      LET  s=s+comb(k,i)*b(i)
   NEXT i
   LET  b(k-1)=- s / k
   LET BERNOULLI=b(k-1)
NEXT k
END FUNCTION


1000桁モードにすると誤差が出てます。

高精度計算サイトで50桁の精度確認済です。以外の精度は、わかりません。



1000桁モード用

!zeta(-n)=bernoulli(n+1)/(n+1)*(-1)^n
OPTION ARITHMETIC DECIMAL_HIGH
FOR n=1 TO 100     !最小値1から
   LET ZETA=BERNOULLI(n+1)/(n+1)*(-1)^n
   PRINT n;ZETA
NEXT n
END

EXTERNAL FUNCTION BERNOULLI(K) !'ベルヌーイ定数
OPTION ARITHMETIC DECIMAL_HIGH
LET C=1
LET D=1
LET N=K/2
IF K=1 THEN
   LET BERNOULLI=-1/2
ELSEIF MOD(K,2)=1 THEN
   LET BERNOULLI=0
ELSE
   FOR M=N TO 1 STEP-1
      LET T=T+(-1)^M*D*M^(K-1)
      LET C=C*(N+M+1)/(N-M+1)
      LET D=D+C
   NEXT M
   LET BERNOULLI=-T*K/(2^K*(2^K-1))
END IF
END FUNCTION

http://blogs.yahoo.co.jp/donald_stinger

 

n,χn^2(α) → α=P(χ^2>χn^2(α))=1-∫[a=0,b=χn^2(α)]f(x)dx χ^2>0

 投稿者:nu  投稿日:2015年11月 9日(月)13時27分24秒
  ! 1000桁モードで利用する指数関数
DECLARE EXTERNAL FUNCTION EXP
REM カイ二乗分布の確率分布関数による計算。数値積分ではないことに注意。

!マチン(Machin)の公式 π/4=4*ArcTan(1/5)-ArcTan(1/239)
OPTION ARITHMETIC DECIMAL_HIGH !1000桁モード
LET p=0
!テイラー展開より、ArcTan(x)=x-x^3/3+x^5/5-x^7/7+ …
!第n項 {16/5^(2n-1)-4/239^(2n-1)}/(2n-1) 符号はnが奇数なら正
LET k=1
LET t=16/5
DO
   LET last=p
   LET p=p+t/k
   LET t=t/(-5*5)
   LET k=k+2
LOOP WHILE p<>last
PRINT (k-1)/2 !繰り返し回数 debug

LET k=1
LET t=4/239
DO
   LET last=p
   LET p=p-t/k
   LET t=t/(-239*239)
   LET k=k+2
LOOP WHILE p<>last
PRINT (k-1)/2 !繰り返し回数 debug

REM カイ二乗分布の確率分布関数による計算。1000桁モードで実行のこと。数値積分ではないことに注意。ここからENDまで。
OPEN #1:NAME "D:\zzzzzzzzzzz.txt"
ERASE #1
LET a1=0
LET a2=0
LET b1=0
LET b2=400

PRINT "nを半角英数で入力してください。(例)2"
INPUT n

FUNCTION GAMMA(w)
   IF MOD(w,2)=1 THEN GOTO 100
   IF MOD(w,2)=0 THEN GOTO 200

100    LET V=1
       FOR I=w TO 1 STEP -2
          LET V=I/2*V
       NEXT I
       LET GAMMA=V*SQR(p)
       GOTO 300
200    LET V=1
       FOR I=w/2 TO 1 STEP -1
          LET V=I*V
       NEXT I
       LET GAMMA=V
       GOTO 300
300 END FUNCTION

    PRINT GAMMA(n)

    PRINT "小数点以下の桁数を半角英数で入力してください。(例)0.123456789→9"
    INPUT keta
    PRINT "chisquaredを小数で入力してください。(例)7.87943857662241735736"
    INPUT chisquared

    LET SUN=1
    LET TUE=1
    FOR i=1 TO 1000
       IF TUE<10^(-1000) THEN EXIT FOR ! TUE<10^(-1000)の(かっこ内)の累乗の数値を変えて、計算精度を落として、早く終了させることができる。
       LET TUE=TUE*chisquared/(n+2*i)
       LET SUN=SUN+TUE
    NEXT i
    LET bb1000=INT(SQR(chisquared/2)^n/GAMMA(n)*EXP(-chisquared/2)*SUN*10^1000+0.5)/10^1000
    PRINT bb1000
    PRINT #1: bb1000
    LET bbketa=INT(bb1000*10^keta+0.5)/10^keta
    PRINT bbketa
    PRINT #1: bbketa
    CLOSE #1
END

EXTERNAL FUNCTION EXP(x)
    OPTION ARITHMETIC DECIMAL_HIGH
    FUNCTION s(y,n)
       LET t=y*x/n
       IF ABS(t)<=EPS(0) THEN
          LET s=y+t
       ELSE
          LET s=y+s(t,n+1)
       END IF
    END FUNCTION
    LET EXP=s(1,1)
END FUNCTION

gnuutera2012もといnuもといun
 

n,α=P(χ^2>χn^2(α))=1-∫[a=0,b=χn^2(α)]f(x)dx → χn^2(α) χ^2>0

 投稿者:nu  投稿日:2015年11月 9日(月)13時33分52秒
  ! 1000桁モードで利用する指数関数
DECLARE EXTERNAL FUNCTION EXP
REM カイ二乗分布の確率分布関数による計算。数値積分ではないことに注意。

!マチン(Machin)の公式 π/4=4*ArcTan(1/5)-ArcTan(1/239)
OPTION ARITHMETIC DECIMAL_HIGH !1000桁モード
LET p=0
!テイラー展開より、ArcTan(x)=x-x^3/3+x^5/5-x^7/7+ …
!第n項 {16/5^(2n-1)-4/239^(2n-1)}/(2n-1) 符号はnが奇数なら正
LET k=1
LET t=16/5
DO
   LET last=p
   LET p=p+t/k
   LET t=t/(-5*5)
   LET k=k+2
LOOP WHILE p<>last
PRINT (k-1)/2 !繰り返し回数 debug

LET k=1
LET t=4/239
DO
   LET last=p
   LET p=p-t/k
   LET t=t/(-239*239)
   LET k=k+2
LOOP WHILE p<>last
PRINT (k-1)/2 !繰り返し回数 debug

OPEN #1:NAME "D:\zzzzzzzzzzz.txt"
ERASE #1
LET a1=0
LET a2=0
LET b1=0
LET b2=400

PRINT "nを半角英数で入力してください。(例)2"
INPUT n

FUNCTION GAMMA(w)
   IF MOD(w,2)=1 THEN GOTO 100
   IF MOD(w,2)=0 THEN GOTO 200

100    LET V=1
       FOR I=w TO 1 STEP -2
          LET V=I/2*V
       NEXT I
       LET GAMMA=V*SQR(p)
       GOTO 300
200    LET V=1
       FOR I=w/2 TO 1 STEP -1
          LET V=I*V
       NEXT I
       LET GAMMA=V
       GOTO 300
300 END FUNCTION

    PRINT GAMMA(n)

    PRINT "小数点以下の桁数を半角英数で入力してください。(例)0.123456789→9"
    INPUT keta
    PRINT "alphaを小数で入力してください。(例)50%→0.5,75%→0.75,100%→1"
    INPUT alpha

    REM カイ二乗分布の確率分布関数による計算。1000桁モードで実行のこと。数値積分ではないことに注意。ここからENDまで。
    DO
       LET bm1=(b1+b2)/2
       LET SUN=1
       LET TUE=1
       FOR J=1 TO 1000
          IF TUE<10^(-1000) THEN EXIT FOR ! TUE<10^(-1000)の(かっこ内)の累乗の数値を変えて、計算精度を落として、早く終了させることができる。 ! TUE<10^(-12)の(かっこ内)の累乗の数値を変えて、計算精度を落として、早く終了させることができる。
          LET TUE=TUE*bm1/(n+2*J)
          LET SUN=SUN+TUE
       NEXT J
       LET bm1sm11000=INT(SQR(bm1/2)^n/GAMMA(n)*EXP(-bm1/2)*SUN*10^1000+0.5)/10^1000
       IF bm1=a1 OR bm1=a2 OR bm1=am1 OR bm1=b1 OR bm1=b2 THEN EXIT DO
       IF bm1sm11000<alpha THEN LET b1=bm1
       IF alpha=<bm1sm11000 THEN LET b2=bm1
       PRINT b1 ! 画面に表示する演算経過PRINT b1を消した方が数倍早くなる。
       PRINT #1: b1 !残しておくと演算経過をD:\に残せて良い場合もあるが、場合によってはPRINT #1: b1を消した方が早くなる。
       LET b11000=INT(b1*10^keta+0.5)/10^keta
       LET b21000=INT(b2*10^keta+0.5)/10^keta
       IF b11000=b21000 THEN LET bb=b11000
       IF b11000=b21000 THEN EXIT DO
    LOOP
    PRINT bb
    PRINT #1: bb
    CLOSE #1
END

EXTERNAL FUNCTION EXP(x)
    OPTION ARITHMETIC DECIMAL_HIGH
    FUNCTION s(y,n)
       LET t=y*x/n
       IF ABS(t)<=EPS(0) THEN
          LET s=y+t
       ELSE
          LET s=y+s(t,n+1)
       END IF
    END FUNCTION
    LET EXP=s(1,1)
END FUNCTION

連続投稿すみません。もしかしたら読みにくい所があるかも知れないので、http://yutorinonatuyasumi.blog.fc2.com/blog-entry-123.html
に173.txt, 174.txtを置いておりますので、ダウンロードしてください。

gnuutera2012もといnuもといun
 

Re: ζ(x) X=500 を求めるプログラム

 投稿者:たろさ  投稿日:2015年11月11日(水)00時47分26秒
  たろささんへのお返事です。

zeta(x)1000桁プロジェクトからの報告です。

既にご存知の方も多いと思います。

zeta(200)まで
総乗=2.294856591673313794183515831344311288713163799441668673275812601908633963673377415179943750789169776454334944288675243342793042798419633146404801344525793271284796225256839225654003934627958980729155934995390141275548002788589007176859578781539342572938835883667622453728503419451999574796782569303658867125848611781958268232787898845074076388755051637266756596760765141784403430197066202675040752290644360507316565126064063431092179824388570169404898711312512187369473331963755179694075163351070114063217051756089090819479358332277505453595993861256395431731457357236915748084669331619317638954916401036782077744414439695124454751474164135077198630609514253282298056699777616960120676770252945053189318783388261904168119241544869222072832636588448489595602568733878779459397450797700894740462069556116532204037831237781647722200884216608486752406491789678587758579198399992074435417660376057312804250425694945138191204552687543664799283291549121666678014588144991108347459115803455784320701350852558
総和=199.999999999999999999999999999999999999999999999999999999999999377698472213885829285593594621987574058543808328370076748177264429074834467343736155613002853049954766406987052052530699466477416942672141087298454572998606328027081453315387356526592868265612471298697007253574231113158123920717933406539845146257229058667849180175269075401329849405512134222752230480868071869034747095044978953975003151190224566538791889836415993430302583144456807832044456465871197249228702470575669556682067140415657905779244091333102034680748258929166707529973064948232758990230726614295844102598989409688437513498293802313965070119460407689940739443188441342829136217851241471406780908062457198439087010034311408649490079755139835199548450511037806632476709522722977641466786259849958138104540946819393655881743052163157343326828173197330149682511837562017283090894077880173675805111183131022676353309074313737377840775361809823507344793108724630141488759810038894766120522057492686896792557623604100748074735874379376

zeta(300)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796803396705941015955181691237315319390932797243110565830702827099507914024450527801450793132935598259843737981895953078506059390785828004842855373554434809833090449162058662083204292673372850877901452196699665738879321749255317003887024502520201446831253054276001628250050303173842547515521791246154856830518308368669172530927305545904074409145174053822784883642775906084242797127615999416688123988591823015642446736156803746066015789626116554756387591572874384703086548196079388279376439075207165933729489128464021841838019551327176009408059504073925569124556783742636557715159756021867310261343882644058740340946445081521492157578096375615674503612809616525079468313071377230215313367519517712608888878631396436335414335158172172690788219956317961925905430615318618613638377775452659931381515345066103772046288641818412200552264798463496562270245827867857999347010816060417035652319070519781553690649101100975757
総和 =299.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999509090653470227344690422804501372435702478448750055039836316797707379471021325023423532610159426365602811084234619402361713037471941250870170806071108662419575027591424840141243522596107804516555388610315116269376309990821412423586357697032007977981824874443433641898471623311005124749627266421309008813383031153787461156051164222916662657809213404186335212722660996446660515979880630977830114965874590456732667170036137742232592133683555064757833964025894304573699433590278195723719694070302217854614603857679073635128245298300290657042214573768811921077597571096946395315271654018257188947533051076349829222715575919956780251045173586291326795538051276617623210028549840587468254830226521579985571362228999743988241867094673920424539800616992013554907457645383304424242504381050703514486857678284464928458885365777539206808702319482214405581735529567500077632629426864668590098266079648831693265713881710923

zeta(400)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285178872716733698850029879956992175951803354849702580526171406664612088196522080460021713807500658076502971502998123846098374271874441083854204881413666994952980913778697348334663584695676208482379985317759484894728691987194112408151413797255491784323115645746137230512566990318352441162903500137061395109584770807765602501009953086913765172910320827818187460774978612512697346432703217064458982336811950113382825521023319883524511174058041472944490907604654008010118607524939389511101083423493784729204318364359952993375740411003205098158031913677628729971661439146622708771293425292073472244338062608046201482198269544572732854714216916719926809761395556336171872947495895549704446368252461156498656218153718745073707383018333553844406453845974668268199645750272098840282564416854120022278483900576130934343375599621581238321789462794880065498089534550744352674493236257265793092684
総和=399.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999612740808515068172718196936671364815242978080795120913451223705865558358103138653744440701228090124833504690974267373311679642185932606936232198725087917590704101490254872050546367953573243476756008548762011589827953020990140071713614709858030888206146799517992461058182136047569824211836561612221251501556000430861949423598442065625103325915731139217359428617574963440022768536186789789225343000247621196672163401745704597634676683081301230943053360859940617727454289965042375118012589473131286778236329785713087096438468358950368118243961744781247724964375775223825484220136211418843039804787251459280345748536269699626931830345620910646038049590617221520964936691415618865986894762549962894270603873727686073283435517659142750832941114229753979080938457764023024827977232348243264688770792361173933221703589098088276749361075061951003644286267102463888689509011274545296508787

zeta(500)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501348506219322701162204307913788296404169597676409351918353183577082712723968818479540668299936497308576996739386896226092306851913661910023030115409143065452753559830897686760857944312378308010923769793746708738584691938250769850935381571561573850639362654960942845930137881376074420143905641812345775856109987119704129127275522313622206103034229295000824502637393537135641136187105721375749028325893149565390922667069120511449608243932675061197200399549574616386440478160999087556626907742500486581897665164079359080031829651768400223488216619065559912141780771091012539866676122000384491989068732205153590201279972341338689414827283271441231784729903181800379294182696643969747145969240281966806752864090771938259661875428623999950586004058790700093587519478719280386285381905820662675166577936148114859086981723441433866538661703981747791441046284327
総和=499.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999694506363650039531794802060678638230021059725942767333610638609071870837347527954229814262737933696158622394953145552724263372055190464667873686477604891653073688633826243926778333450838122636126261447784636405785760920583449475232711932323202030517513084057738040683011645528293349124597188537731080658195318894528639879393918554480688908125177630133418151052985636753678524911639986676859671652184790688582924602168977768023097235929419181491546347903836200394409640270252814725520702898445326252050062064845170225642561784621496618539552808307023966458469089321824121223947551995989550638623731169350453835230113165714670337705946079180782060593132302088963404280257834230053691103948575320171042456633577963887590632261366985458262818299367832446863599708216428500556014747311538712679768321162456121815199614024634953306944738252398901699444867

zeta(600)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501349207283407793119246747769333049514157291089213694156204030549107737221017381583609737389583416962074236594260680740123692022740876352061924221918258588989829729945598383539557342895394265881193029867444328902140230642809303882781214774465047538193558068079680385477442426556727265544515254203033312996658260406524824678094275470195611719432943092720444193205971298147144523802427958458694391534341254893773778936352393323779196951396582640742638096083163269342710317945998177448393309240433190835013453027807889180713626393780731753526107459448507586156495688869599242224616696348641475282673796289755703577358692931806446147698520142597383304415728755854604387235534238022705769200935620099633400982537846389217090847328214524488807858129126381134322322116039983484177888594968272855870193639332817520865072195925159757695001271605889054733186538626
総和=599.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999759008013489711588225924996528749106356899504549010202816970002284119614713973896252431840230458492109586536085192921868675641756743967674476654276974757524698953588202249546150870055684971418374392177836853552462809076239753387205398493097588668626448356720023133776037511569227350956286650584099184280186575362228300435675593698995637106254038031396465826683622209059900615116427784283276379617890544933697489671956281881508949475813505921740540178141037534753078077076484376559466607893160286054607299538474224332120756591487134254163586668488844257448538723319873952021324355088395009459356684610755784424406990233228755117243517062861156669421152096893856802781734850625154036679409798182826009063381442278688900791432133067549963176758289742545589630426144728528081610507402986525993135411929761306222885955810445

zeta(700)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501349207283407793119246747769333050067199339872795374031927010510608797070381312717040492764750353609688327882844299973351061520894663314644660172723760116545381160804553890999584913408969793951655778882847375165054923885828339244666717197251415245961933741372455389208201749534605830906770462786114202962198897423994610043949731485889353012610952138732951608862299298899283065376655959894912529278664966735884637490358342855881544281410326686011246787755230091901342765676668499946365281107959883862193744946265861799461403336367618031436482951778217287057220732370114639921150568254210829767977493091108844316077494975687292484552887810584907431641040750796979620175677568250869358510681075474897883013155499954399175278186121017298080409165063271373647364049779087243523757341984704071456594222600319854046679448196253154746134797464586057263663945375
総和=699.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999980989084337048401764849275941648968907351287936264809675582539424341457507225277964427985029473781367973893704967018113252212198400760474248543592111209692917171142905745622645007786535919203609876055447642302009159138973721637811460640469887694353219438396914949910672717455639435561889260045611336835942649276405562177200138618098306967198883776575966891115032929761655760975473420649280252675798964461282817559553763405218508394462926674733394619804893850196902200828289613660448796382496328109870549243176554461371601216232529471336073371544723652181868529442145562325957420476541996606370343793989168168532091531694758969498044288896097627751304851940091405097628943139630976898382341933392494547799443027417055258999895259510140383668644337560938050895785517857891683532258817535092

zeta(800)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501349207283407793119246747769333050067199339872795374031927010511045070321610011931838936532973062668842601824348895677245701698531343947365225018889429546000927949415058336221462209025315033642448811440846431928312725821455594172065304077171866852006660176164036160581341595623605467149996952423045553321000222523806973764162452504872438908742392680504920922357778209509476764217384709276965555584498661001089834298803467124875095568392122960152435969852357391037599946536198418338398000180764019204231576044157028304223153621928105037945775320471642371702069115938195323596982286153632382974666746711658313330513015410691607535335241499661768025600837458473393862555564152252388668119116167401144398950027668818067391910055249468615116578870077509826892817868423187110266485988241066521739139479969649595643189084583736928431001550475282566882791898278
総和=799.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999850030318610436904518235556237193464646003830376089170206266555238228914414780969722903187160258516375751035237199413900461635849736852977083761965695190557083973424631012045519742907135061467558345162092532101523346575860045557112857479499240062255800439256955096012619774555912496017969298235291220005630049957261915659845718722041329281744999433069828208579337473025630045797260323661024389819776131149162104014041524244474753639989323702384588910228093783980474484171778313728822880185123057684261653724538067936663617897393967979229974607077280282311980159522039056675915250526003281227587983477016730289770288460805074958966854142879905888870626145281970740953314460855619440256787219314592941074723535341721102075923106950002101249219702630951070140718

zeta(900)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501349207283407793119246747769333050067199339872795374031927010511045070321610011931838936532973406827754489809912361266430357810692053814457136526473793329384572458371141029217368988361154920331547169876886057992535733219125036683402416519807986753945834568763376490570969889766016801054213951929538866782538656566669315189774039711425097809978242719950552174551627401350290714936080592407940871290985863516406308162541310582779723908338018253818736748367352409518589882966100990800234158933303609008189547665506551570642704304233171343798755279961917973614051185023591767033846783894345207927548473642421066739999004686525994753593569306238821178904432997582116173618249270285966280865201344951359026072298151819420896679207520476559274678073159506366129801672839832253609401492753106989353348708785390788521357003190629371687145944087117078872443974855
総和=899.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999881694781383322528902724840248197346834781781609522782259683729835579217136708079878174604560934189070008394739144500924872154059681718499589074521955059393023883779986407862394371109688675192533297902304294334784560256806705113004202170228172509488803865271982266603708820713401517915438321843524658406593789420170921022498967946801378755859222636724485297349956005944569821161870075111832909013790307339460548275795752874308205055721298623020940431709875078123329956378139827680726327002398939083806402778469712498381866521613844178883649095033891405547677236342063559096572753474460936499306393301708464061053560923997692311761857731094081920789691793896032414603593890799515335414402831152349806195237996977512243143080505919

zeta(1000)まで
総乗=2.294856591673313794183515831344311288713163799441668673275814030001397012011323157501796804523272490813842972172103285179761421041964123866454436501349207283407793119246747769333050067199339872795374031927010511045070321610011931838936532973406827754489809912361266430358082185564586291869213773116111814384314428154465151563602245330921298004823817633581043446569877118787427222065741493757711392788592692964234419668491537172604036817707964701339953365441587081866824255401603645839591466345733362109320128683767324075237098565117279966184443893216837906350328692282051006130524712407630013856574275302800677040281427120379848143226398041526305819296421892086695519652402309109445460022483589191461306063945446412179376406334836423961115474925425870380879933165507302580783750188735363181555231501184606759476912180171123424220091429858903011491736999729204077588580738417533302576740015806161283933867828766292505659417938616444955083743219122570680808848179190723966682239016272360161862681255581
総和=999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999906673638149678112100991045527618283038290855362829197537828566020403308902422436554555967290211889764040501006967575737578451247864596760515847918279606924376558933386167484972222297835254611858652078425503202106355736504239930448643478856303903602811798138270099608350776882949990518153631727249453450171310106247975508602109606369950736137520811883145010247961056762466133830425616845900330648793735024943932369490012367613897114196888734207352480031983501509272659129938788056149418719540328070753781423571822439439227681257796179649445158356509625118283763599892930621748994657326721776669516255338337628845212049808084760695428372823165021135274582890815192137916819203955986697097690999697139

精度は1000桁末尾数桁は色々でした。

http://blogs.yahoo.co.jp/donald_stinger

 

世界地図

 投稿者:しばっち  投稿日:2015年11月19日(木)22時38分12秒
  下記サイトより世界地図の座標データ
「world_10m.txt」「world_50m.txt」「world_110m.txt」のいずれかを
ダウンロードしてください。
gnuplot用のデータファイルですが、読み出しできます。

http://www.gnuplotting.org/plotting-the-world-revisited/

(参考)
http://ayapin-film.sakura.ne.jp/Gnuplot/Tips/map.html

データファイルを読み出し、単純にプロット
!'SET BITMAP SIZE 800,400
!'SET WINDOW -180,180,-90,90 !'世界(全体)

SET BITMAP SIZE 800,640
SET WINDOW 125,150,29,49 !'日本

!''''SET BITMAP SIZE 600,600
!''''SET WINDOW 129.5,132.5,31,34
OPEN #1:NAME "world_50m.txt" !'「world_10m.txt」「world_50m.txt」「world_110m.txt」のいずれか。パスを指定。
SET #1: ENDOFLINE CHR$(10)
DO
   INPUT #1,IF MISSING THEN EXIT DO:A$
   IF A$<>"" THEN
      LET Z=POS(A$," ")
      LET X=VAL(A$(1:Z))
      LET Y=VAL(A$(Z+1:LEN(A$)))
      PLOT LINES:X,Y;
   ELSE
      PLOT LINES
   END IF
LOOP
CLOSE #1
END
 

メルカトル図法

 投稿者:しばっち  投稿日:2015年11月19日(木)22時38分59秒
  https://ja.wikipedia.org/wiki/メルカトル図法
https://ja.wikipedia.org/wiki/ミラー図法
メルカトル図法で投影します

SET BITMAP SIZE 800,600
SET WINDOW -180,180,-3,3
OPEN #1:NAME "world_50m.txt" !'「world_10m.txt」「world_50m.txt」「world_110m.txt」のいずれか。パスを指定。
SET #1: ENDOFLINE CHR$(10)
DO
   INPUT #1,IF MISSING THEN EXIT DO:A$
   IF A$<>"" THEN
      LET Z=POS(A$," ")
      LET KEIDO=VAL(A$(1:Z))
      LET IDO=VAL(A$(Z+1:LEN(A$)))
      LET X=KEIDO
      LET Y=INVGD(RAD(IDO))            !'メルカトル図法
      !' LET Y=5/4*INVGD(4/5*RAD(IDO)) !'ミラー図法
      PLOT LINES:X,Y;
   ELSE
      PLOT LINES
   END IF
LOOP
CLOSE #1
SET LINE STYLE 3
FOR KEIDO=-180 TO 180 STEP 30
   FOR IDO=-90 TO 90 STEP 15
      LET X=KEIDO
      LET Y=INVGD(RAD(IDO))
      !' LET Y=5/4*INVGD(4/5*RAD(IDO))
      PLOT LINES:X,Y;
   NEXT  IDO
   PLOT LINES
NEXT KEIDO
FOR IDO=-90 TO 90 STEP 15
   FOR KEIDO=-180 TO 180 STEP 30
      LET X=KEIDO
      LET Y=INVGD(RAD(IDO))
      !' LET Y=5/4*INVGD(4/5*RAD(IDO))
      PLOT LINES:X,Y;
   NEXT KEIDO
   PLOT LINES
NEXT  IDO
END

EXTERNAL  FUNCTION INVGD(X) !'逆グーデルマン関数
LET INVGD=ATANH(SIN(X))
END FUNCTION

EXTERNAL FUNCTION ATANH(X)
IF ABS(X)=1 THEN
   LET ATANH=SGN(X)*9999 !' 無限大
ELSE
   LET ATANH=LOG((1+X)/(1-X))/2 !'arc-hyperbolic tangent
END IF
END FUNCTION
 

サンソン図法

 投稿者:しばっち  投稿日:2015年11月19日(木)22時39分44秒
  https://ja.wikipedia.org/wiki/サンソン図法
サンソン図法で投影します

SET BITMAP SIZE 800,400
SET WINDOW -180,180,-90,90
OPEN #1:NAME "world_50m.txt" !'「world_10m.txt」「world_50m.txt」「world_110m.txt」のいずれか。パスを指定。
SET #1: ENDOFLINE CHR$(10)
DO
   INPUT #1,IF MISSING THEN EXIT DO:A$
   IF A$<>"" THEN
      LET Z=POS(A$," ")
      LET KEIDO=VAL(A$(1:Z))
      LET IDO=VAL(A$(Z+1:LEN(A$)))
      LET X=KEIDO*COS(RAD(IDO))
      LET Y=IDO
      PLOT LINES:X,Y;
   ELSE
      PLOT LINES
   END IF
LOOP
CLOSE #1
SET LINE STYLE 3
FOR KEIDO=-180 TO 180 STEP 30
   FOR IDO=-90 TO 90 STEP 15
      LET X=KEIDO*COS(RAD(IDO))
      LET Y=IDO
      PLOT LINES:X,Y;
   NEXT  IDO
   PLOT LINES
NEXT KEIDO
FOR IDO=-90 TO 90 STEP 15
   FOR KEIDO=-180 TO 180 STEP 30
      LET X=KEIDO*COS(RAD(IDO))
      LET Y=IDO
      PLOT LINES:X,Y;
   NEXT KEIDO
   PLOT LINES
NEXT  IDO
END
 

モルワイデ図法

 投稿者:しばっち  投稿日:2015年11月19日(木)22時40分27秒
  https://ja.wikipedia.org/wiki/モルワイデ図法
モルワイデ図法で投影します

SET BITMAP SIZE 800,400
SET WINDOW -180,180,-PI/2,PI/2
OPEN #1:NAME "world_50m.txt" !'「world_10m.txt」「world_50m.txt」「world_110m.txt」のいずれか。パスを指定。
SET #1: ENDOFLINE CHR$(10)
DO
   INPUT #1,IF MISSING THEN EXIT DO:A$
   IF A$<>"" THEN
      LET Z=POS(A$," ")
      LET KEIDO=VAL(A$(1:Z))
      LET IDO=VAL(A$(Z+1:LEN(A$)))
      LET TH=0
      FOR J=1 TO 10
         LET TH=TH-(SIN(2*TH)+2*TH-PI*SIN(RAD(IDO)))/(2*COS(2*TH)+2) !'ニュートン法
      NEXT  J
      LET X=KEIDO*COS(TH)
      LET Y=PI/2*SIN(TH)
      PLOT LINES:X,Y;
   ELSE
      PLOT LINES
   END IF
LOOP
CLOSE #1
SET LINE STYLE 3
FOR KEIDO=-180 TO 180 STEP 30
   FOR IDO=-90 TO 90 STEP 15
      LET TH=0
      FOR J=1 TO 10
         LET TH=TH-(SIN(2*TH)+2*TH-PI*SIN(RAD(IDO)))/(2*COS(2*TH)+2)
      NEXT  J
      LET X=KEIDO*COS(TH)
      LET Y=PI/2*SIN(TH)
      PLOT LINES:X,Y;
   NEXT  IDO
   PLOT LINES
NEXT KEIDO
FOR IDO=-90 TO 90 STEP 15
   FOR KEIDO=-180 TO 180 STEP 30
      LET TH=0
      FOR J=1 TO 10
         LET TH=TH-(SIN(2*TH)+2*TH-PI*SIN(RAD(IDO)))/(2*COS(2*TH)+2)
      NEXT  J
      LET X=KEIDO*COS(TH)
      LET Y=PI/2*SIN(TH)
      PLOT LINES:X,Y;
   NEXT KEIDO
   PLOT LINES
NEXT  IDO
END
 

プラネタリウム

 投稿者:しばっち  投稿日:2015年11月19日(木)22時41分29秒
  下記サイトから「catalog.dat.gz」をダウンロード後、解凍してください

ftp://dbc.nao.ac.jp/DBC/NASAADC/catalogs/5/5050/

(参考)
http://hooktail.org/computer/index.php?Gnuplot%A4%C7%A5%D7%A5%E9%A5%CD%A5%BF%A5%EA%A5%A6%A5%E0%A1%AA
http://ayapin-film.sakura.ne.jp/Gnuplot/Tips/constellation.html

CALL GINIT
!'SET WINDOW 0,24,-90,90
SET WINDOW 7,3.5,-24,30 !'オリオン座
OPEN #1:NAME "catalog.dat" !'パスを指定。
SET #1: ENDOFLINE CHR$(10)
DO
   LINE INPUT #1,IF MISSING THEN EXIT DO:A$
   IF A$(76:77)<>"  " THEN
      LET RA_HOUR=VAL(A$(76:77))
      LET RA_MIN=VAL(A$(78:79))
      LET RA_SEC=VAL(A$(80:83))
      LET DEC_DEG=VAL(A$(84:86))
      LET DEC_ARMIN=VAL(A$(87:88))
      LET DEC_ARSEC=VAL(A$(89:90))
      LET VMAG=VAL(A$(103:106))
      !' LET B_V=VAL(A$(110:113))
      LET X=RA2POS(RA_HOUR,RA_MIN,RA_SEC)
      LET Y=DEC2POS(DEC_DEG,DEC_ARMIN,DEC_ARSEC)
      SELECT CASE VMAG
      CASE IS<1
         CALL CIRCLE(X,Y,5,7)
      CASE 1 TO 2
         CALL CIRCLE(X,Y,4,7)
      CASE 2 TO 3
         CALL CIRCLE(X,Y,3,7)
      CASE 3 TO 4
         CALL CIRCLE(X,Y,2,7)
      CASE IS>4
         CALL PSET(X,Y,7)
      END SELECT
   END IF
LOOP
CLOSE #1
END

EXTERNAL  FUNCTION RA2POS(HOUR, MIN, SEC)
LET RA2POS= HOUR + MIN/60 + SEC/3600
END FUNCTION

EXTERNAL  FUNCTION DEC2POS(DEG, ARCMIN, ARCSEC)
LET S= DEG
IF DEG < 0 THEN
   LET S=S-ARCMIN/60-ARCSEC/3600
ELSE
   LET S=S+ARCMIN/60+ARCSEC/3600
END IF
LET DEC2POS=S
END FUNCTION

EXTERNAL SUB PSET(X,Y,C)
SET POINT COLOR C
PLOT POINTS:X,Y
END SUB

EXTERNAL SUB GINIT
!'SET BITMAP SIZE XSIZE,YSIZE
!'SET WINDOW 0,XSIZE-1,YSIZE-1,0
SET POINT STYLE 1
SET COLOR MODE "REGULAR"
SET COLOR MIX(0) 0,0,0
SET COLOR MIX(1) 0,0,1
SET COLOR MIX(2) 1,0,0
SET COLOR MIX(3) 1,0,1
SET COLOR MIX(4) 0,1,0
SET COLOR MIX(5) 0,1,1
SET COLOR MIX(6) 1,1,0
SET COLOR MIX(7) 1,1,1
CLEAR
END SUB

EXTERNAL SUB CIRCLE(X,Y,RR,C)
ASK BITMAP SIZE XSIZE,YSIZE
ASK WINDOW X1,X2,Y1,Y2
SET COLOR C
DRAW DISK WITH SCALE(RR*(X2-X1)/XSIZE,RR*(Y2-Y1)/YSIZE)*SHIFT(X,Y)
END SUB
 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年11月22日(日)02時50分55秒
  > No.3871[元記事へ]

しばっちさんへのお返事です。

K=13 の数式から

OPTION ARITHMETIC RATIONAL     !有理数モード
FOR N=1681 TO 1848 !K=13  19110297600/131710070791
   LET P=MOD(N,2)/2+MOD(N,3)/3-MOD(N,6)/6+MOD(N,5)/5-MOD(N,10)/10-MOD(N,15)/15+MOD(N,30)/30+MOD(N,7)/7-MOD(N,14)/14-MOD(N,21)/21+MOD(N,42)/42-MOD(N,35)/35+MOD(N,70)/70+MOD(N,105)/105-MOD(N,210)/210+MOD(N,11)/11-MOD(N,22)/22-MOD(N,33)/33+MOD(N,66)/66-MOD(N,55)/55+MOD(N,110)/110+MOD(N,165)/165-MOD(N,330)/330-MOD(N,77)/77+MOD(N,154)/154+MOD(N,231)/231-MOD(N,462)/462+MOD(N,385)/385-MOD(N,770)/770-MOD(N,1155)/1155+MOD(N,2310)/2310+MOD(N,13)/13-MOD(N,26)/26-MOD(N,39)/39+MOD(N,78)/78-MOD(N,65)/65+MOD(N,130)/130+MOD(N,195)/195-MOD(N,390)/390-MOD(N,91)/91+MOD(N,182)/182+MOD(N,273)/273-MOD(N,546)/546+MOD(N,455)/455-MOD(N,910)/910-MOD(N,1365)/1365+MOD(N,2730)/2730-MOD(N,143)/143+MOD(N,286)/286+MOD(N,429)/429-MOD(N,858)/858+MOD(N,715)/715-MOD(N,1430)/1430-MOD(N,2145)/2145+MOD(N,4290)/4290+MOD(N,1001)/1001-MOD(N,2002)/2002-MOD(N,3003)/3003+MOD(N,6006)/6006-MOD(N,5005)/5005+MOD(N,10010)/10010+MOD(N,15015)/15015-MOD(N,30030)/30030+MOD(N,17)/17-MOD(N,34)/34-MOD(N,51)/51+MOD(N,102)/102-MOD(N,85)/85+MOD(N,170)/170+MOD(N,255)/255-MOD(N,510)/510-MOD(N,119)/119+MOD(N,238)/238+MOD(N,357)/357

長いので、途中省略

   LET P=P+MOD(N,3951302123730)/3951302123730+MOD(N,921970495537)/921970495537-MOD(N,1843940991074)/1843940991074-MOD(N,2765911486611)/2765911486611+MOD(N,5531822973222)/5531822973222-MOD(N,4609852477685)/4609852477685+MOD(N,9219704955370)/9219704955370+MOD(N,13829557433055)/13829557433055-MOD(N,27659114866110)/27659114866110+MOD(N,1448810778701)/1448810778701-MOD(N,2897621557402)/2897621557402-MOD(N,4346432336103)/4346432336103+MOD(N,8692864672206)/8692864672206-MOD(N,7244053893505)/7244053893505+MOD(N,14488107787010)/14488107787010+MOD(N,21732161680515)/21732161680515-MOD(N,43464323361030)/43464323361030-MOD(N,10141675450907)/10141675450907+MOD(N,20283350901814)/20283350901814+MOD(N,30425026352721)/30425026352721-MOD(N,60850052705442)/60850052705442+MOD(N,50708377254535)/50708377254535-MOD(N,101416754509070)/101416754509070-MOD(N,152125131763605)/152125131763605+MOD(N,304250263527210)/304250263527210
   LET p1=P*131710070791
   PRINT STR$(p1)!&",";  !168個
NEXT N

END

----------------------------------------
DATA を見ると

934817502941-915707205341=19110297600


19110297600-(-112599773191)=131710070791

最終的に

19110297600
±131710070791

三種類の差で、DATAが出来てます。

驚きました。

山中和義様 しばっち様 お二人に感謝します。


追記
K=12の場合も
 477757440
±3212440751
三種類の差で、DATAが出来てました。



http://blogs.yahoo.co.jp/donald_stinger

 

Re: 素数個数関数

 投稿者:たろさ  投稿日:2015年11月25日(水)01時39分39秒
  > No.3960[元記事へ]

たろささんへのお返事です。

与えられた数より小さい素数の個数を求めるプログラム

暫定版です。

K=4

!OPTION ARITHMETIC RATIONAL     !有理数モード
LET N=49  !K=4  8/35
LET P=MOD(N,2)/2+MOD(N,3)/3-MOD(N,6)/6+MOD(N,5)/5-MOD(N,10)/10-MOD(N,15)/15+MOD(N,30)/30+MOD(N,7)/7-MOD(N,14)/14-MOD(N,21)/21+MOD(N,42)/42-MOD(N,35)/35+MOD(N,70)/70+MOD(N,105)/105-MOD(N,210)/210
LET p1=P*35

LET R=72 !DATAの個数(120-49+1)
DIM A(R)
LET A(1)=P1 !p1=28
LET S=P1
!PRINT 49;S
LET R=2
FOR N=49+1 TO 120 STEP 1
   IF ISPRIME(N)=1 THEN
      LET S=S-(-27 ) !35-8
      !  PRINT n;S
      LET A(R)=S
      LET R=R+1
   ELSE
      LET S=S+(-8 ) !等差減少
      !  PRINT n;S
      LET A(R)=S
      LET R=R+1
   END IF
NEXT N

!FOR R=1 TO 72
!   PRINT A(R)   !DATA プリント
!NEXT R

LET R=1
FOR N=49 TO 120                 !K=4  8/35
   LET pn=(n*8+A(R))/35
   PRINT n;pn+3
   LET R=R+1
NEXT n

END

EXTERNAL  FUNCTION ISPRIME(N)
!  OPTION ARITHMETIC RATIONAL
IF N = 2 THEN
   LET ISPRIME=1
   EXIT FUNCTION
END IF
IF N = 1 OR MOD(N , 2) = 0 THEN
   LET ISPRIME=0
   EXIT FUNCTION
END IF
LET D = (N - 1) / 2
LET S = 0
DO WHILE MOD(D , 2) = 0
   LET D = INT(D / 2)
   LET S=S+1
LOOP
FOR I=1 TO 10
   LET ISP=0
   READ A    !' n < 341550071728321 なら a = 2, 3, 5, 7, 11, 13, 17
   DATA 2,3,5,7,11,13,17,23,29,31
   LET ISP = 0
   LET R = POWMOD(A, D, N)
   IF R = 1 OR R = N - 1 THEN
      LET ISP = 1
   END IF
   LET R = POWMOD(R, 2, N)
   FOR J = 0 TO S-1
      IF R = N - 1 THEN
         LET ISP = 1
      END IF
      LET R = POWMOD(R, 2, N)
   NEXT J
   IF ISP=0 THEN
      LET ISPRIME=0
      EXIT FUNCTION
   END IF
NEXT I
LET ISPRIME=1
END FUNCTION

EXTERNAL  FUNCTION POWMOD(B,P,M)
!  OPTION ARITHMETIC RATIONAL
LET RESULT = 1
DO WHILE P > 0
   IF MOD(P , 2)= 1 THEN
      LET RESULT = MOD(RESULT * B , M)
   END IF
   LET B = MOD(B * B, M)
   LET P = INT(P / 2)
LOOP
LET POWMOD=RESULT
END FUNCTION



----------------------------------------------
K=14  から K=16 まで

!OPTION ARITHMETIC RATIONAL     !有理数モード
LET R=360 !DATAの個数(2208-1849+1)
DIM A(R)
LET S=45086430862710
LET A(1)=S
LET R=2
FOR N=1849+1 TO 2208 STEP 1
   IF ISPRIME(N)=1 THEN
      LET S=S-(-4860900544813 ) !5663533044013-802632499200
      !  PRINT n;S
      LET A(R)=S
      LET R=R+1
   ELSE
      LET S=S+(-802632499200 )
      !  PRINT n;S
      LET A(R)=S
      LET R=R+1
   END IF
NEXT N

LET R=1
FOR N=1849 TO 2208                 !K=14  802632499200/5663533044013
   LET pn=(n*802632499200+A(R))/5663533044013
   PRINT n;pn+13
   LET R=R+1
NEXT n

LET R=600 !DATAの個数(2808-2209+1)
DIM B(R)
LET S=99561214908855
LET B(1)=S
LET R=2
FOR N=2209+1 TO 2808 STEP 1 !CASE 2209 TO 2808
   IF ISPRIME(N)=1 THEN
      LET S=S-(-9968041656757 )!11573306655157-1605264998400
      !  PRINT n;S
      LET B(R)=S
      LET R=R+1
   ELSE
      LET S=S+(-1605264998400 )
      !  PRINT n;S
      LET B(R)=S
      LET R=R+1
   END IF
NEXT N

LET R=1
FOR N=2209 TO 2808                 !K=15  1605264998400/11573306655157
   LET pn=(n*1605264998400+B(R))/11573306655157
   PRINT n;pn+14
   LET R=R+1
NEXT n

LET R=672 !DATAの個数(3480-2809+1)
DIM C(R)
LET S=553533983592098
LET C(1)=S
LET R=2
FOR N=2809+1 TO 3480 STEP 1
   IF ISPRIME(N)=1 THEN
      LET S=S-(-40762420985117) !47183480978717-6421059993600
      !  PRINT n;S
      LET C(R)=S
      LET R=R+1
   ELSE
      LET S=S+(-6421059993600)
      !  PRINT n;S
      LET C(R)=S
      LET R=R+1
   END IF
NEXT N

LET R=1
FOR N=2809 TO 3480              !K=16  6421059993600/47183480978717
   LET pn=(n*6421059993600+C(R))/47183480978717
   PRINT n;pn+15
   LET R=R+1
NEXT n

END

EXTERNAL  FUNCTION ISPRIME(N)
!  OPTION ARITHMETIC RATIONAL
IF N = 2 THEN
   LET ISPRIME=1
   EXIT FUNCTION
END IF
IF N = 1 OR MOD(N , 2) = 0 THEN
   LET ISPRIME=0
   EXIT FUNCTION
END IF
LET D = (N - 1) / 2
LET S = 0
DO WHILE MOD(D , 2) = 0
   LET D = INT(D / 2)
   LET S=S+1
LOOP
FOR I=1 TO 10
   LET ISP=0
   READ A    !' n < 341550071728321 なら a = 2, 3, 5, 7, 11, 13, 17
   DATA 2,3,5,7,11,13,17,23,29,31
   LET ISP = 0
   LET R = POWMOD(A, D, N)
   IF R = 1 OR R = N - 1 THEN
      LET ISP = 1
   END IF
   LET R = POWMOD(R, 2, N)
   FOR J = 0 TO S-1
      IF R = N - 1 THEN
         LET ISP = 1
      END IF
      LET R = POWMOD(R, 2, N)
   NEXT J
   IF ISP=0 THEN
      LET ISPRIME=0
      EXIT FUNCTION
   END IF
NEXT I
LET ISPRIME=1
END FUNCTION

EXTERNAL  FUNCTION POWMOD(B,P,M)
!  OPTION ARITHMETIC RATIONAL
LET RESULT = 1
DO WHILE P > 0
   IF MOD(P , 2)= 1 THEN
      LET RESULT = MOD(RESULT * B , M)
   END IF
   LET B = MOD(B * B, M)
   LET P = INT(P / 2)
LOOP
LET POWMOD=RESULT
END FUNCTION

-----------------------------------------------

K=19あたりから数式の出力も増大してマス。

簡単にDATAの初期値を求める数式があれば、K=30もできそうです。




http://blogs.yahoo.co.jp/donald_stinger

 

文字サイズが食み出す場合

 投稿者:SECOND  投稿日:2015年12月18日(金)07時07分14秒
  投稿者:SECOND の書いたプログラムは、
十進BASIC Ver.7.6.7 までの 起動時文字サイズ の環境で合せていたため、
十進BASIC Ver.7.7.0 以降の 起動時文字 は桁幅が大きく、食み出るものが続出しています。
殆んど1年を越え、編集できない為、

 Ver.7.7.0 ~Ver.7.7.7 で文字サイズが食み出す場合、以下で、お願いします。

●既存の、set window -,-,-,- 文の次に、以下の2行を挿入する。

!---------------------------------------- Ver.767 以前の起動時文字サイズ設定
SET TEXT font "MS ゴシック",10
SET TEXT HEIGHT ABS(worldy(11)-worldy(0))
!----------------------------------------
 

Re: 素数個数関数

 投稿者:しばっち  投稿日:2015年12月19日(土)18時12分4秒
  > No.3882[元記事へ]

素数個数関数をC++で書いてみました
64bit浮動小数(double)ではなく、高速化のため64bit整数(long long)を使用しました
PRIMECOUNT関数の第1引数に求めたい範囲の下限を第2引数に上限を指定します

更に速くするため、OPEN MPを使って並列化(マルチスレッド化)してみました
第3引数には実行スレッド数です。0(自動)又は、スレッド数を指定して下さい
ASSIGN文でdllファイルのパスを指定してください

LET S$=PACKDBL$(2)
LET E$=PACKDBL$(10000000)
PRINT PRIMECOUNT(S$,E$,0)
END

EXTERNAL FUNCTION PRIMECOUNT(S$,E$,THREADS)
ASSIGN "primecount.dll","primecount",FPU
END FUNCTION

-------------------------------------------------------------
                        primecount.cpp

#include <cmath>
#include <omp.h>

extern "C" __declspec(dllexport) double primecount(double *s,double *e,int threads)
{
long long i,j,count=0;
int flag;
if (threads>0) omp_set_num_threads(threads);
#pragma omp parallel for private(j,flag)
for(i=(long long)*s;i<=(long long)*e;i++){
    flag=0;
        for(j=2;j<=floor(sqrt((double)i));j++){
            if (i % j==0) {
                flag=1;
                break;
                        }
                                   }
        if (i>=2 && flag==0) {
            #pragma omp atomic
            count++;
                      }
                                                    }
return (double)count;
}

ネット上のサンプルを参考に書いてみました
コンパイルにはOPEN MP対応のC/C++コンパイラーを使用してください
64bit整数型を使用し、C++で記述しています
C++にしたのは、私の開発環境では64bit整数がCで機能しなかったからです
unsignedとしていないのは、単にコンパイルエラー(open mp上の制約 ?)が出たからです

1000万以下の素数個数を計測してみました(2~10000000まで 664579個)
十進BASIC(2進モード)  約220秒
BASIC ACC             約110秒
http://hp.vector.co.jp/authors/VA008683/BASICAccJa.htm

primecount.dll        約28秒(THREADS=0を指定、※2スレッド)
となりました。

こちらはデュアルコアCPU(ハイパースレッディング未対応?)なので、上位CPU(クアッドコアCPU等)なら
更に速くなると思われます(220/28=約7.8倍)

また、実行環境や開発環境、オプションの有無などにより結果は変わると思われます

※1~10000000とするより
1~1000000 , 1000001~2000000 , 2000001~3000000 ... 90000001~10000000
と分割した方が若干早く終わるようです

OPTION ARITHMETIC NATIVE
LET T=TIME
LET ST=1000000
FOR I=1 TO ST*10 STEP ST
   LET L=PRIMECOUNT(I,I+ST-1)
   LET S=S+L
   PRINT I+ST-1;":";L;S
NEXT I
PRINT TIME-T

LET T=TIME
PRINT ST*10;":";PRIMECOUNT(1,ST*10)
PRINT TIME-T
END

EXTERNAL  FUNCTION PRIMECOUNT(S,E)
OPTION ARITHMETIC NATIVE
FOR I=S TO E
   LET FL=0
   FOR J=2 TO INT(SQR(I))
      IF MOD(I,J)=0 THEN
         LET FL=1
         EXIT FOR
      END IF
   NEXT J
   IF I>=2 AND FL=0 THEN LET C=C+1
NEXT I
LET PRIMECOUNT=C
END FUNCTION
 

primecount.dll

 投稿者:しばっち  投稿日:2015年12月19日(土)18時13分20秒
  C/C++の開発環境をお持ちでない方へ、コンパイル済みのDLLファイルを掲載します。
下記DATA文は機械語そのものです。書き換え厳禁です(29184 バイト)

コンパイラーはVC++2010を使用しました。実行には別途、NETランタイムが必要です。
それとは別にC/C++ OPEN MPランタイム「vcomp90.dll」も必要です。
実行エラーが出るようなら、検索するとダウンロードサイトがいくつか見つかるようです
こちらのファイルバージョンは「9.00.30729.6161」となっています

32bit環境でコンパイルしています。32bit版をダウンロードしてください
ウィンドウズシステムフォルダ又は、BASIC.EXEと同じフォルダに入れて下さい

コマンドラインにて(VC++2010 32bit)
cl /O2 /LD /Ox /Ot /openmp primecount.cpp
としてコンパイルし、DLLファイル生成後「upx.exe」にて圧縮しました

OPTION CHARACTER BYTE
OPEN #1:NAME "primecount.dll"
DO
   READ IF MISSING THEN EXIT DO: X$
   FOR I=1 TO LEN(X$) STEP 2
      PRINT #1:CHR$(BVAL(MID$(X$,I,2),16));
   NEXT I
LOOP
DATA "4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000000100000E1FBA0E00B4"
DATA "09CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000B5F57342F1941D11F1941D11"
DATA "F1941D11F8EC8E11F3941D11F1941C11B6941D11EFC68E11F2941D11EFC68811F0941D119EE2B611E5941D119EE28311E8941D119EE2B711A6941D11EA09B611F0941D11EA09"
DATA "8611F0941D11EA098011F0941D1152696368F1941D11000000000000000000000000000000000000000000000000504500004C010300256F73560000000000000000E0000221"
DATA "0B010A00007000000010000000B00000C028010000C0000000300100000000100010000000020000050001000000000005000100000000000040010000100000000000000200"
DATA "4001000010000010000000001000001000000000000010000000CC3001005000000000300100CC0000000000000000000000000000000000000000000000000000001C310100"
DATA "1000000000000000000000000000000000000000000000000000000000000000000000008C2A0100480000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000555058300000000000B00000001000000000000000040000000000000000000000000000800000E055505831000000000070000000C00000"
DATA "006C000000040000000000000000000000000000400000E0555058320000000000100000003001000002000000700000000000000000000000000000400000C0000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000332E393100555058210D090208CC53114CCA1B3E25FA090100B768000000DC0000260A0031FEFFFFFF558BEC83E4C08B450CDD0083EC34535657E80A0004F2"
DATA "8B4D10DD018BF88BF2BEFBFFC70D3BF20F8F160100007C083BF80F870C098D4C242851FFB1DBEF041C516A016A000352503895988B5C24408B44DB76BBFD243C83C424890620"
DATA "890E243B032C3FD15BB76D9B000A3B132841C50BC70918DB96DDB302071C000FDF6CDD293807BEEDDEBE2033FF897C0D8D77025203FC9608DD1C24ED7F2BEF5D02CCDC545908"
DATA "DFE0F6C40175368B0DBAFFFFFB20575653521A0C0BC2741D83C60183D700897424303F34EFBEFFEE4930D8D92B417BD4EB08700168DDD885DB16DEBDFC7C207F07837C027217"
DATA "06180075100008DDCCEDFBC750C48CBC0C834CD3006FDDDB93C08C63FF007F0E8BF83903200F866EF6FFB9530F2D925F5E5B8BE55DC3CC00ADFDB7C277FF1433C9890C012804"
DATA "3BC17E0A50FF150ABB6EBB77A0E856041A10420C503C87AFFDDEBC085268F96A0377489E02BA6F6F6F2320C3B8131319A304D020C705052419B98CDC090A0F2809C32CC6BE66"
DATA "A4FC30652C34183832D68C5C12913C810940CEF066E408E3446FC38BFFF471C2B377FF018F837D080074050A135BDBE2C253577D85BFE1BFA50BC07D1447610CF7D8F7DA83D8"
DATA "08E99ACE7513890E1B18131A145F776B2E181416751BDC143E33ECDFBAEED2F7F1070C05C20B4F794EEB538BD81CBBFF7F655418D1EBD1D9D1EAD1D80BDB75F424C8F7B9DDEF"
DATA "B6644491041403D1720E3B247708074DB735DC2876082B4F1B1118070C10B0FFAD6D4D07777B83DA005F5BC21000CC00D0BE2C9C833D05ED0F84861308DEFE50D88C0FAEBD76"
DATA "0425807F103D801FF6F2F6DF04750FD93C24668B040383E07FF87F8D76C3DD77B727855530EB00F30F7E2C660F28B25658BA6EA15007C803F87360045E2ECDED7EC018540580"
DATA "FAD0D3CAA9DF3ADE1550504C3DFF03DE7D11F3CA3D32D6352CB7040A7F0BD6FDDD4BC30ADD4F78FF2EFF7B24BAED039044D483C2140808B1851F7703048914DC1383FA102EDB"
DATA "4BF766814A79D8C2C1015E0B3458B335215A0CB08340BBDD01BB955CC866D9EE69C21D197001749F8B6C08562A0760265CC9B110822EAFF96EB3E3588019F4FB0419C38D95DB"
DATA "1F0C7F11B1529B29AD74516681097F87EF788C022C1981A9B680751FD9FA6DD872CBCBDF8085C315BA95190D96BEB9ED6710E9251A17F07F752CA9270FFE5E9A16222568081E"
DATA "EBCC4198EB22E57F4FCE16F2EB255174B0DDD8DB2D1632D9E9A280B8A95C66DA1810FE40235AC3EF34C52D826BABF0C8EECBF82C196E3BECC22CDDC9C31B111804C8BE8C3D84"
DATA "58EF74D32C20F0D9C0D9AE61DA3A59DF84107D980B4BDBFF1FBD85C0743CDEE985D2791ED94C8BC881E3C75FBFF19E81C10283D000FB83D22C7272166C2C1D17D8DA5EFB37D2"
DATA "141CC21575B8D95C530319D8DCDE8E6A0868BEBB602AAC70C3B76FAB88C37A0C756E750733C033FAFECE6E06C30F1E6F1893EBE90629B7DB75C73E10A3CC400F299209DF8829"
DATA "EC969E6523C9791B5ECF0F28D7BB56B3BB782008266117D00A21AFFAFBBABB594E0BFF05338462C01F0EEBC9ECEFDF5FE63BC7755B393D177E81FF0D07897DFC10162BFD7BDC"
DATA "75055E9C397D102C2F64B1677D2C93C745FCFEFA06404F47EBE16B48260E6CD0E92181BFB7BB2AC3EB6ADF0275590C1A6814E96EE93F96E4206959598BF03BF79E0C43B0C57E"
DATA "EF56FF353305DFA4E415D062ED2BD07B17D5378B2B14B6FBFB972506834E04FFEB18151FEA597505845DFDFCC3C20324572E015933C040F1C20C6F70F2B0650C6380F9BF8B5D"
DATA "088FEDFD771D8945E485F6750C3915E47BC55CAEE976FB65FC003BF0AD83FEA52EA12390782EE09A83084E812D18E400F6ED9CD92796114C056742C01261E13BC9832E0527FE"
DATA "C3245FAC70B68187501357742FF6BA77D8520611D5F66AB28DD96ED8264F340321689FDD0621657F648B09EB1D0D0D36B804EC8B530932132D5AB00B94E5BF65E81FDA4AB409"
DATA "C4F7D14A99DCC48511B72EED7508C18B550C1DC40C3FA5CB595D1822E5562FEFBAF68BF1C6460E7E632A1CB88946486C898E020BB70E046889648B7208C231BEFBD80874128B"
DATA "07D5C08548708A387D83DBDED1E08B46CC45D4C874160A081F70B7EC2E084730FC0415F640706B775BA94E0315026401EB0AB8590393EDB740041CC65E860405DBDD0B05FA8E"
DATA "8D4DF03A07E48B420FFE42E9C4BE067AA3D665EB0C460FB6DB646FC70E3AE1A65975F11C591D78C3B7250A35E502DCF08B89BC8A97DBFF05168A068A09880E468A0E8808C18A"
DATA "84C9B0D26FFF75F35E384DFC7407ECF8836070FD77737DBB2D24098AC375F02E74158B96AD6BDB8F4A128A123ACA36401743F5051FB6FDBB401B36EB0B80F965740C044519EF"
DATA "8BD0FBFF67FF4880383074FA8B8E81538A183A195B7501488A0A404288220223BBF4F68047005E819FE13816BB74DC18907A05953BF16C2B70045D1B51518A9FB6B1F66D1402"
DATA "1074198D37F050E7F8B62F18BA2889CC5F4804EB1118080CB4ED4515130818AD06E71AC15D653AE0FA5D7866074D097D5BEEF085EF423F2D931439411C40A503F70A1BBF65DD"
DATA "3DAC1E5E3832086B5A5D6848326412DF3E5311A184693F1CC7417BF8BB6FE13BD975220A42486A165E8930AF80F8B7AD21D9F7F25B9D39A776D96EDF766F040C7E05B4EB02F2"
DATA "83C00939C77709B6F1C2CF3A22EBC357AE18741EAD141B5EFAB7BB270F9FC05A833A2D0F94C18BE3CB8BC1C7FF37FECED98B7D553F2D8BF37506C6032D8D7301EC235CD87E00"
DATA "7E158A4E0154F0FE8B808A00B7DB5BE38A004606453845183DC0036E03F0BFB5D40C56B579CB3D052BDE035D328CF00381A1A0530EA73CE15F686F06748D4E028F7503C60645"
DATA "8B470CDADC68F1ED2F070448790662C4012D6DA3FD6F73647C0B996A645FF7FF5D79C20F595A469E0A0A030016F6A1022FBCE114015F6780393030D0213C447A8D4101AE670C"
DATA "13F0BA4620E60AB15000F4AE41F8332ECC602C05D98033C5B61BCDB1FEFC28A39D1457F60CC0B70B175C5B5375E45103D451FF7004C365B706305743C11485F043680B8C7089"
DATA "187B8B736D38A0D0D63EBBE9A31B048EAB7DD8D088497DD44A2BC10A83EDEDB9425B0848F301515084F2FB60671CC01A03C703C8B5425BF16183BF4605C607CB1AF445D47B76"
DATA "89B61250081BC756740A1E22D8BD91631895FB33CD5B0F444F933163C08618C78C0B35F264B87F2C47245657DC743538B4C3EC353ECC30B517C630BE5539E77D03890499326E"
DATA "B0FC0C2575235EE83BD83019E44A0FD87C76D86C2CDC68121EC00BC100591016960A97C83E3A074FF4B7F81B19CF61C1E914BAFF07565323B6566EF9CA33DB3BCA92740B078A"
DATA "DB0EA13D3B37340349FEC65A0F0AFC148D5E02D562900DDC6B161014197F64065FD99A83A1D0FE866184D7A1BB6DED803B2D3B192D287D182130540FD78DBFFEC824E0047888"
DATA "416A65B171F0CC66E22EAC598B3C5527AF70EBDF96FEC980E1E080C17036C6400B4A2BB010A1C809910B66503FCC6D10C018A34EF7DB1BDBE1D0BF735E558B4F0483E3E081E1"
DATA "63C81B0D2EB5C327650BC18BB102B643ADB9301AF5195F79039B866FE015A955ECEB106FFEEB071285D6752331188B071A1364816FA576B98810EB0F53DC6A0D589B098F4489"
DATA "85DBDC56978C3BC2F2B41D4AF4487F596A6DF8071682144C8B57042355BD0B1BB7F82A0FBF0D236981E2317F5B28DCEC45CC664707B79AF839760203C36F0DDA5DCA836DFC69"
DATA "46240FACC8CE602AFF04C1E90446FF4D141DA163AD83ECD87DAE0C7C5152F84CC60205DA318D38899166A0ED1BB8B60446107D48EBEE3BCAFE37F84A7E1639B080C33A8818EB"
DATA "09FEC1378CBDD0C6CDFE40FFA911D16A30564CAD357D474C95030D89ED840F4B8D7BD3F08DB134653662AE3B70A40784722A2525FE853F3423D32B3E53591BD1780F7F064CB7"
DATA "A1EBC372091A2BD7EB0D082DB4E156B72C13D3958BFE9D3BD3A7DF196E4EB9E86A29C17219535152E8568185F6446C043058725540D8BABE51C7D3DC0B5F7C1E7F055F725DC0"
DATA "5A86AA6025244649F33360251F0A72180A09A97B4F895DF00C86001EBA0C4A1B145B9DFC538185857676F25677D7D9C5C0A911A94E6E5A637EB06390C29310DA9C76D747A974"
DATA "D91910153B99DB71287D81573F393466C70418BD7AC394109B6DE67F1C5644E030583F0176530C4083E6321B592805032B6BE098C05123CF55302C01CD8843B9D578FF8CFF79"
DATA "26F7DF7FCB210C7C1883AE81FF02C31B5730253059D6536C5F04261078815F565BFAC950F25E5630C6EB6C53524FD9568A88DB175383C84922D026F0D8740D6A926C04DE7806"
DATA "BB53F4D803CE6847020B0461505F1466778B2C18FF8BCF1C0FDC6CB2C0815B5A595EC0905B03212257C05F5727671B2DEE13A838C7DBA2A30DC8127F1585D5E6CAB570B0ADD8"
DATA "944B958D3C96F9B6A3BBF0FBC9982BC88C50295157A976BB2D13065774D848E90F9C5F0D2D50FAF8FC7C2D70A928220A06832FF18A07478446F98847FE2A01B063133E68CE41"
DATA "CEEB1C19C0C08DC144C61F4646070658ECCF09B8EDE5ED745F0445745A66751930203B6BE01E185610DFE756224376727961741E41741C251156F209ECA0EB30180C66EB1706"
DATA "1F840CAE071CD14464A157128D5E1C8F95212E2DFFB7AAA9148987BCC62F7D0B831383FF2872E67D2271C9B55C720B049F33F6E22D447E7845F438560042E110C6025EE22895"
DATA "DD003740C3F8E039AF98740E8D6811D91BED3CC219C172838546864DC7A6005605D741DBC38FA2558E8905C26E6F46B6190E18066A025A2B1F84ECB27DB6EA2849F1DCE9050F"
DATA "C462FB1C729C83744E0B09AF153A58070C97C7E3AC06A8158E7631A2706306DF96BF51936A10DD5DE0DD01D807E851DD065A0F5A6D05F0A7CC9DED708FE16B68C70022386516"
DATA "12992E859C3D6C6404D907369B4431766CEB874173B1F7CC643C44413E3D5DB0AD5D3015F2FBD8230E140199ECB3190B60EBCE176065DBDEBE700B57E31A7457EB480239BB6D"
DATA "ADB6200D1DE40403C115017809E1930F58EB8E50EB85017003F275831E4F9F99B36F177FAEC00B12D9E840DD18CB1A1F9B90173C8681C118FC2797BB1B15A1DC87A71AFF248D"
DATA "161F0E3BD861B49BC9EB92FF89CEBE93CF0834EB802CF31B0B24270664401C18E1C421277FBC14EB0710DC3B4242B85CDD16458AF051AA83F082AF018FD023C6213A68050E9A"
DATA "85F13D90344DD3DD0A157B03848D969FD3344DD3AB2EB70F060B1A344DC3CCD5A4B018568DE61838D0E12770143681BE03B6F42D0A6DBB486C4EE4660812239A6871A94DC0D8"
DATA "B8C665C836F40BD126BE663BC87555304D9A6B829B7A7E82027E1AF02330C1D76FAC53226AAD4C3A5C74A0FB3DEC394CEB6622DC05FE4818731BE4F5510810306AA542FBB60C"
DATA "415459F90E6493DD00BF592FDAE98E447A0E43F83BB2EE3722F6C32075ED0B534210753EE281E98FFC577F80FF97E0DF3B057511668B9D5C8F80CF0280E7FEB33FEB04BFFB76"
DATA "FF66BB3F1366899D5E14D9AD05BB919CD9E589956CEEBBBB770C9BDDBD6006C6857005009B8A8D6107177AA3FFD0E1D0F9D0C18AC1244E0FBEC07A0404D856F942DB8BDA03D8"
DATA "782366B0363B00D9C9671D17DBFC635D10AD78E5D0FDD0C58AC58AE085B0B2DB01D0E4010AC48BAD1C7BDB0318F53CDDD8C309EBF601ED7EAC157D06E8C3DBBD6254DBADCE9E"
DATA "DDFC05F685694074088307C3070139C0DA11A094C3442C0960CF1C05A92DDEC154C55B814D203E9AC221BF635980BD1C007F0AC70766C5B7027402D9E04F86CBB6B4C0C4E081"
DATA "E0D01805F01C235923479D4B163C66C0B491ABE4ED860E74A904DBE80BEC944EE050ED301B28E5DB4FD9386681667C810A312D03D96D0827ADBD15C90070FCDCE1B970A0D2B7"
DATA "C2D9F02C9AD9FDDDD92161076D5470E60020CA7FCFA840DB5B0D06D96C03C3406884A6979F06B80791C332B07B4FBD1D182F420425F83D046551D38D77DD0211AB0A0DCB7FEE"
DATA "52DF2D8E060E8B0A0FA4C8FCE10B0FD3DDDEA2048CDB2C249B0AA93E006303B635301508430110C3896EEF40E5B72C5AC322165AA0EE3D0E1E3820F99B04728F952B080CB808"
DATA "44850E6AA8D829A21428B2163343AC55D7133E939DBD743D6B5F582A7521B6C091431883FA99075D7818E40B640CDD00DCAEBBC160393145E1DC1D0FCC3B6DD5FDC19EB84D73"
DATA "C7DCFEA2E8BFCDC8908C28D4C403769803EB919EE4EB96A834626C244CEDC5C3061C5663673DAEAE54112029CAC8AFA1571B11DFA00C15B7E0C02024F2C3A18C1537C0D34C74"
DATA "16D9A8CFF78A83830DED1F540E03EE8D5117281740CBDB9D3168516223A009A2F422F8EDA5183022C7465C09A368836608ADFBF6253247897E140270C686C8D04306B87BD7CC"
DATA "4B012131D0A06A0D3D5292591268ECAEE1FF7668402CB511059A7D1C2D6A0C20EDCE141BD85D466CFC08A1F60BC580DD6D316C1D35BD593136F631E7626576875E51B959C346"
DATA "A0B1432F08066538DA815A45CF64F5F05A40A0112E4EFD118510E806D1F6743AF94009815CE2FAA10954DAF889067FFA41FBDCE15969345F69789E3F6709EF1118089C23AB59"
DATA "1946E316B8C8C8B3DE84F8F821DB6CF746246407504C0D2C32211332343C401332211344485C0F8464873DA6108D8B7E78375B8A688C1AC25F750F81FFBC84C976B12C57A51D"
DATA "EC9AEDE48613F33B6C23F47BA0FF28364C593B3DA5143FD7307020C7BE91833F00754436E5F8101E118236BFCEBEE8B584170BC1DF58285793C016912712BACFC1F88B35FFD6"
DATA "E313B4987650C7AED6A8085E33C6930A20CA261CD2EB5424474C0940222DC081F13657DAF86C098D5D801734AFC356704075D1AFDD20A3305764072457F09C8C9C8C9C0C18A0"
DATA "10A4FC8D6DAFBB21003B2413A874162C630B8CA03F0D08A404EF2FF6367124A1CE420928C7053827C5226FC01B15893BFEA327998D60BB3AC1F45063CFDA0E0810B0FF215815"
DATA "9C08366B6376141A23AC60B3824D10AC08ACC30D0FB163791854638B3D32D6C2F7BACD1C253AD73FA343850C201D443D30A00532D2D7391BC24128D166075C5E5FE809860760"
DATA "F52DA2BB682B47ECE0F030D3E7561F30A9C50367CEAC06743501B659455E0EEEF6AB868527DA52C5B759B827A875C1631FAC761F5632488D86F83B53B4129C14031A4B57D600"
DATA "037BCA8BC75F44570C490ACC44795359344B739785E4C349DB939486C01AF12C390C4DC1C364474095A34C51B8A7195F150E3CB5FE05657B9F052B6A2A712103591421C935A9"
DATA "F54CCC73B07C56EF573E244F1B080756F505229F91CF38F656E6D754D2600A7609B5185ED59B2E6E61B8AEEB0F91660E859E63D885F8FFD183C6047972ECABD40177EFF2A130"
DATA "1968074058FC597D9FDCCC548F12F413381D182B748EF70404AE1C535435340DDDEEB32A534FB8BBFCBE2000873BDFCB9BFBC6730F8B074670D083C7FE72F167ED92AE512823"
DATA "6169ED7A2736E20C8D02311522CF022DC87320F0088ED7100BF5828A423FCCD2E037D8FDDC8A3FB9CD11DDA207D805E6A0166E55463E49ED280C0F895D0BB9B137D5DB746816"
DATA "2410757DF0EED6B6D413DC0533EF040B3BFB724B8FBDBB8F5C390774ED0C3EFF3736128907FFD10E7BB3D34F1242393DBE12AD1A3DF177475D0BDCC6BABDD8558B0AEBAB34E4"
DATA "8ABF420D031CB606207311B6B7205C448B00080A04EBE620E04B9E666924E028E0473C099CE076237183A90CE3406C29C7F5BC1119A5DE60352E1F13271CC1922AC48414184C"
DATA "CF25224615550F2118D65F000FBB5B8DF4ACC2672559DE59238D238633363A58494C5693B4B86A0270E1606A40975E567AEFC2D116B3C136FB6B26068D90FFD707475E8FEC20"
DATA "FCEC0C3BC27336832FDDB7FFC0058348FBFF66C740560A894803081FC640217F6B87770C3388482FA12F25408D50FB81C6E016FE7F403BD672CD535766394DE6E00EED607BB6"
DATA "B619E8650A03182804FF16BCB7CD03C3BE29DA3BDE7C028BDE3963F6BABF1D6E7D6BBF0624A19F56761BFBFB5183051B208D8831074A733193B3DB970E8360C080601F800733"
DATA "009FDD6E6B769C200A2F690F9203CE943B2BF599E3D172D2BB627CA2EB0B092CDC6811BC4E7E72B5F80B717BA0575C04FE744AFCBB13DEFE8A09F6C101744D0408750B325C85"
DATA "3D8BAFC5BFF5F783E61F1AC1F805C1E6060319F48A5600623C07CF9CBD01DF99460468A0F98D460C3558DE0A1F1F17BCC84660280447FFF66DBDD126967C8E3394F34235417D"
DATA "81CF37067B0B06809F80EB71C6EAFF5BB1478154056AF658EB0A8D43FFF7D81BB606CE9620F5535419FF2F427C38D926F83E579B3325F0893EC102CF045F45E009B953D6351B"
DATA "040A0893742C8F35FEC7AF5926C7069F4383FB030F8C33343116C100F32850795BF6D08E12EE19EBF6CEBFADDC30E12B09368886218D704EC0405B677E5E5164A5FFBBD51F94"
DATA "40051D8D4EF43BC872E282C2D038166E832796811AAB14FF9BED207CB905442C8EC44705BC5A9FE2DF889FD150293AB6188D27163CC2B16AAB3D8447A7598D1E83855BF1018A"
DATA "0655EA6A4857FB6B786239F889C8C00DCB4116B6CF3E53EB3330803E3D3358C622F56F30962D534A89BC3F5653506B6D7749EA479503F32C8873E4BEB35840AE250A00B563EE"
DATA "C2F9B0ED200F595BB725C092EAE125C00021E4BDD0B60B94E9105316567568D5FB1672550CC70144E55AEA68B5F75D0E0804137A33D1660679223A17FCB322B5B6BB05774612"
DATA "EB3CFFA8D20BD3EEDFBEED88024289398A1E0FB6C350465A5C190E880207DA131E23D73AF78D56BC23530C880146606E84A86FA8051D322F75A980FB20BD80775F0AFB09759F"
DATA "4904C642FFDCBB6D66C3E690E9363C1F043C1E5E98B17F0646EBF34EEBE318D00741373EE9A04510FF01AB4333B7E97BBB034641225C74F9AD261C751F66C1F64681EF560180"
DATA "3812043BE75ABBCDEB0DC42BC6C4C3D1E9BB7B6C07A212497C025C42D0C975F1CB976E6CC3C17455A308824B7447D66D4103D33D51502C23E4D666AE4D0D29DEDC3DE9393759"
DATA "5B672203181A87A5DBB154462C28086B070031FBDB7D7C301041D5C95E5B2B832000CC1AED2151360C53ABD1E5C168BC0F828168040105BB8D86BED0E8208818E0ECDA63643E"
DATA "6268A108D03BC3619B80EDEFDB381875038975FC78FC9453531DAE0DC48D7D26273D0B533DB844DB4D453F734A80F4407342872ED4DFA3C1E7028D040FF53650B1C23ED89B24"
DATA "3BF374293E03FE57564098187BE2480DB471B8F1C92D8B5E96B2BA6A055A343874C5E73AAD17E80A7B23776933741023637490B702073075F8F05746706B2FB541502B42D1F8"
DATA "40AA090F346A41B81C73C66DEBDCD974388E59D10D2A1BFF3A3235B7448BF425221963DDAC1A41FC2AEC53736CA182B55CE7590B498BEF2E0E562FBB50BE04572F9EC35A0227"
DATA "255858B4259A426A1310216CA071127378784095C180D152350FE020C3981121BE8DA7250B004745387877632B10641E5ED5A8CDD6936C038D2BE0E170E66F0F2031E333C550"
DATA "8965E8C3DC054390970782F0645F8ADFAD213F4D09890D0A595F08418811BE51A579CB420B3518220C877335D3567A7B53C506C645574BF4D8E85B3FF08D7B10C20D8B4E4ECF"
DATA "330C38B052B0BDB90C0C000F4B442918450DC685E2C677B81932A28D55E88953485B0CB6B702313586405F8D494B044E38E2DF7E4C86148D4486106E234074BB9B4D148BD744"
DATA "5D2E7401B7771FBCCA407F477CD87575CE807D88742464E4026B9082563A3F37A318F49CB8EDEBC9408BBF4112813963736DE09EA176C8F594EC01B607D70B864611A1A6AC55"
DATA "443B948A08D27C170B3E672ABC90118F5E2FBE4F587A39580CEC6814D38BC81677C02EF4088E4B480C953F3CBB2DE64808E045BA9B39530CC506735B914F0856CB5492041136"
DATA "D32BB48EE552C37DD826324D4E5C9025D4EF6E2DC010DDC099B990DC3BC772EF11B80EDE81C109AC041A225C9BA06B998B502EB445E34F602DE183FA05ED4108DC8C067B9610"
DATA "0198E614A5ED17F45E60894E609E04CF16970E6D11B6BA348B7E2DADF0FBED64393183C10C81F95F7CEDA714FDF04BED643D8E0A3A09C74664835B7E3D90CF213F870F816E3D"
DATA "91845E1CF273C83D93854E3D8D82213F87FC3E3D8F862E3D92F919E4CF8A1E3DB5028D0E3DB4A38570E60788EA64507BDFAD74FFD2C098EB07E0510CCF0E87D56B5B5335B8FA"
DATA "142CC00E97750D3550B1E194B9E22C9BBE0FC20C1B441A029F4946F8DC5F28064ADDBF4EE640BBBB642EB0D0223472851B09F7271DBD03A3D984EB656BF888C74AA556B67973"
DATA "0B84336C6590B1F007088027F000AD759C7C97330C11EDB7776FDE07BE4F59EB1085F38F8BC60D11471FEBB123FDC1E0100BF08976F7D607845E5F7C148021909FB9562FFC02"
DATA "1E83C9FFF2AE9201F7D91025DC468B2C80FD0D77DEE840AB380D2463C7FC5F7E8B02DC322DA4F21583E8047417140D36D8040DC3481CDBD91CB4E7B8CE05120B08B1F1E23C11"
DATA "F96568C01BB438BC9BEE1C57505D02DE1E56310FB7C8687E04B1FDF6B202080CC1E1A0C18D7E10AB00B97F77060CBEC72C2BCEBF388A1401331683FF8810404F75F78D861D64"
DATA "1308E50F074A4E1C6081EC1C05F0852400CE608D85E8FAF48E70A15C1F7604228CBF37F1F5587C52FC8D888405C54089CF44DFE3F48A85EEFAD410206168DBC2BD308D9DEF10"
DATA "37C80203A9F7025F8677162BC1FE8D940D1F59D01F246052198A430183C3027566EBD853D66A2B0C70FC6F5089DDABCF7B2A50692C60C22E4DB6746E531715FD571E5764B065"
DATA "D734534C5F954420FC602D280DBCA924FFD4FB3024378C4566620E804C061D9DE7EDF7108A8C0556EB1112027415208BDD38DC48888C0630BB889C08EB22BA4FF8BFEB5246C7"
DATA "85E4469FB5FA8EEDF2C9290B8B95058D71CBF6ADFE1E03D08D5A93FB19770A640E8D3C5BA9C551203AD70E0C20F8ED46B0E0E003C627413BCF72C6473119036E5B30363814E7"
DATA "BC1010AFA1B805FD22D94770507F6C08F215DF3E178B77685F206D204504AFD922C443F11238E43B351E36462E292EA31A56E4FE56EA62FF46A1248947688B2D365614ED8704"
DATA "A23197EB8E8B170C410892AAC399C58BC122C089B6061F6DB076FE101EB6E09802037F2C4894385DFC74458F48DE1AB99D5F22FD75128303657B90EBDB16FC8AA309C17B591C"
DATA "EBC43BFCB18CCB228920AC944F1526190F9731A0106C4B5B99898F3B870E517311F88E2F086814C008DE46D7EAB8E3D0C59179016C77DF97C0303DF00A72E781E7FD6146B6D2"
DATA "AA740BE968CB7D9CB531C72498FC561136C93C9F63E87B128C37A1ED38481F8D431C569FD242DF897B38BD152C9E73CEE80F8633F69FE89625EE52D3AD75EF8A0E84C90CFB9A"
DATA "96CCC6224629C9A1A046EEEDE6218B4DE46BC930B9E08DB1B75B53A3BBE0C2EB2B8AF66429343EDFDDD06A025832E08A801CCC08443B1D02D7B7724DB33BF876EA91DB0C5FB5"
DATA "0359D0B8E9E00D77ADDD5B107DE0044172E98B9BC74308DAEF200E6106D96A0689430C78B4F5EF36A78948D45A668B31668930CA02BB874B35CC4A398BF3466CA2324EE2F7D2"
DATA "1BBF031D0409C176F65E7EFFFFBD39162C30233B1EB9FEE4080840497582162EF6F98B4304575562AC602DB4F20708B3AACAEDF0E77BEBA73935E74154FE69498423FFBE0882"
DATA "F491E71430834DE0FF0C187E2A16DBDCDF8B5F68F30B6D8122F2F63B718A57A233323D20F45B8B4D6EB395581446B9889B128BE058ABF8FBF3A58323FE38321C830B28149519"
DATA "34A03D058BB64DDC9D25110CB9440B3C6839D0A0371AA31BBB6853D52CA2F646D99E36DB700236EAF6059D010CDD76D01292829291E104089EE5D90708080C0C1416BE6051D8"
DATA "F8057D10674C73B14B192E690C450621EBE819DB7DAB8F3D047D814C181C88B6D2C0185E5DE764E900B018619345BAFC1BD3C8E6FFB5B613DB1BB248CDB81D13F5D771927E49"
DATA "D13566EB30CEEB2580C9D95D782081FB35531CB7A7937D168604D0E00069DD8304B3683D126AFD10344E8A7CC00559A72CA053129D1889362C1A355F0338E88B87A10A500CB8"
DATA "25077220B4C0A0E1EEF68D5F50AF080610817BF863C46CC0C1361A031B837B000AA8010C33610F06C8BDA6DB487540D405521504BF60E16B668685FF8AB2C1625D9A3C962561"
DATA "815A95E25D27027CB8041A86BC3ADB57E3EF5E7BC36F5BDBF87468139A105E3918754F684EB65A0DB81713D6FFB692ADEC7835C764E220B485BD5606790C4F38D09A93E71FEA"
DATA "C044400D6CB353538F2DCA4310CC961DB6D9BF802BC712D00DD7440CE94CC04A86E867EF0DBAC2D5751B3998938D6184164BB60275D4AC444CB734997F6E07840B442CF030B5"
DATA "395FF912110A85ACBA16535328210483C7BCE385065797B4743BE77E345811AB7EA130CE74285789383E58E0A336031B56AC831559C2A3CE9304D730A49249181CD05E0B9780"
DATA "BC9C0CC850F04622837E269078D61C16706C850C51034F4B9BD8886C9784A83D6830F74910612018F5EAEBBEF1A442C70A06682D105D982C44421E2803BE576EA5495B58FFA5"
DATA "9466A5E011BAE52EF4006A4CE4086AB7CACDFDB9450D168985D8050B30FDCFEED80F9185DC14E0FD058DDC95DE7C3E9FD89DD4B5D0BDCC668C95F8C89123C7068DEC9DC885C4"
DATA "9A7973E4A5C0ADBC9C8F85F0B68D35DB857E4D0454F4C76F017ADB6F73AE6AE81B49FC18E408AE01AFB5D008977D11DAC672638BEC05BCA4BA8B3A89D893AAA08DB6769C1A98"
DATA "AB2E73851CF43732B51031252ABE176DA8DA5230C007A139058CCECEC2EBC3AC44A8E64F915D1513E110A25DA54849C4FFE04B42281197144F53D31F0851B2EFAFF083B83DFB"
DATA "7CABAC4800017E136A043D65E88307B8D47CEB0880C8C108F59A5194780448837706A549A81303C931E83D743FA217F5BDD7F82C41E45990C383F03A906332D6BA182C80E808"
DATA "B6B58F54CB3BDE73545775B98C73AF7871149E758A1760E9CEDD8D0D8B815D58010731169F5081CC7B042137F2D06D3C139DF40065F0C31381ED21DB20E0E831896BC140A207"
DATA "726F085AABEE50C642FB5C2166A0128A1378889C0D062FFD885DFDC6455659EB153B2A6EA1B27DD6C916FC50415114BFB1454B702855F86A03522115DB6E22FC51D070B0A11A"
DATA "94E3A1506F108ABF1528D49CF45AA24DF9C1E008247C1ECE0BC140F05E5B42E2167133108D48BF7277110DC84BD8B420403B0F2832C428204730F6D12DB2E03451DC88DC50FB"
DATA "6CB7CED000570AD85097F0717A2EDE2EBF6EEC0B56A466D828F60F03752B2A366AA22D119DE8D6446FC3DFD358EB2F031C15B7B9121304D7302BEA05A0C640361BCE664E00B6"
DATA "B2B1A76C29600589423FE120772079A401D56A03326424D1D8A736002C7C769982A04C0D16F583F93C721CFB137CC7B7BF2D83E70F83E60F245E5F75056B7856F7C7032DB8D1"
DATA "1F2914C1E972E203EABCB1BDD07229A8FF2495133F87C7BA036CDFFA511C047203E00303C81785F7D866BB3E341E8D3090073EB49004B541375D4403709423D1BE076CCD6D37"
DATA "288847010502560859C68D4832B6C75CCCEF5996B1642B25010202ED3C9BE4A6902383C64375DD409E018806170304D3345DD77BFC03F407ECE4DCD334CD7FD48B448EE48944"
DATA "8FE4E8E8EC4DD3344DECF0F0F4F4F80077D334F8FCFC8D04DB74EF10DE4DF003F80DFFF403382D7050D34458645960B381BD90A10BFD11982121B8A3110E2BC920BC7D8D7431"
DATA "677C39FC8324E1726C7B0DFDE3FC7740BCF7D9694E0EC11D406C4B93F92BEBBA674F3FC021BC900BD003F40C776B85AD1C6D033E6F51EE015AB01790E7EF01B29B23C8D35D42"
DATA "ABEE29028892F0960D902724B3B9365ED92D03B271563CA6E9BA855B067003788086A6699A889098A0B39B9AA6699A1C1C18181414699AA66910100C0C08C3489AA608040423"
DATA "84A6E9BA05CC03D4E4F88FB325B896B7B58B0F08035B088713BB0D80854DCC00B33A60FBE104F7C17E74248AFAC10C4E903753CF1075EF87068DA42481DBFF1F8B01BAFFFEFE"
DATA "7E03D083F0FF33C22F04A9D1B0DDDD780181748341FC393284E446A9FECD994A0B9806077402EBCD8D41FF4926D9FE652BC1C309FEFD059D4590FCB055A108B9A8BAFE7EED0B"
DATA "5A0851BD902B450F6A3304D45A7B17F57FE28BF22BF08A08880C06CC034F75F3329D4015AA113821595013BD455AF1EBC6DD5DB9DD00920F2404CDA2D8105E16786141E42D72"
DATA "F1E9ED11770E098AB9ADC058251B776CF0DF700544FB6A0E593BC81BC023C1050837D51DA8A67A063DD978C3C142077313544D144859AE947D7B346A3BF07516B496F5B70BC1"
DATA "430AB576E5DF1088063BD07E13D6DC1269401075AAD04A8DE802827E01461185FEDD17027E1A8A0BD5060FBEC943EB036AEEAD04EEF68808404A167FE96EEA0985AA21FE7812"
DATA "803B357C0DF930B2E0024BF53974F7FE153104FF41509D115D7D12577757D065D486109BDD5150BC5DC23CC04106B7D8C1EBD10FAAA36CCB563D23DA70BB35A8E2ED418B091F"
DATA "FBBEA63E504D84252475FC0DBE0025FE133BFA740881C3CFC428BFFF7F357C8BEF062433D23BC2743BCA750E5C6675BB540F94506DEB4226013CE2055C034FFC47C5C1EA150B"
DATA "856B5F780B0BD00B0F26B6EBFBDF96AA13F5D97C1F03D20BD303C981C7656FBB775D2D083C85D674E4460BCFAE668948037218D1085B203014838D7244AF03DCB5B8D9D5A608"
DATA "D0500C430E45E0500B366A0B53115E8DAEAA9BEA7EFCA5A566A51A7914DC8943DAB6F6978A45E289030FBF250C042BE432089521B22F242D16E2C1149C695EB803015806A111"
DATA "42FAC5DF3B0D867502F3D982514F2360E9C26E553318ED466423E0651415474548101B01AE950B0E7F1C4C46C02018641C0878CBB218281840BB758EFA64D80507F08FF76417"
DATA "23E05FA3C84D0703D1EB47716104BCE51814237104744D77F02D1C4462E6DE9528677414282B76094E2B115062EB181B121CFA163DE4B27710144D8BCAFA5A8795DED96A5213"
DATA "5D3CE9D439028C6D0CAFA240A562A169158A5462C848BC721681FA950E0D5AE07F878357578BF983FAD331C28B0F16F8E103740C2B6B07EEE9159A6F436DF65B8603C10610CA"
DATA "DD0D030E237CECF3AB580A0A843B6727EA60D6DD7E1202D880F94073150420737C53C02F17ADD0D3EAC37E80E11FD3E80C706A33A309C3B13E7A87E390ED1048BFF7FF23C80B"
DATA "D07A7B9EF76EFCF0FCA2BD0D5A80670477853F4706B1AEE3CA661A180C27092320822D14A3052C60B25CD4684D4F8A5F3745251A278978045DDB0AF5D66C070843060CF6C1BF"
DATA "412E6AEF0B095804C789FD6CD3FDC9152683480402129384CB1173D8C83724910412084C73C8488E081090BA40A487230E4ABFD133A558BB502662103105124D0679C8601108"
DATA "D1E904C9600B436D0312025D903B720523CB112EC30FFBEDD484C32323490C10A8040A08A8850FF9900804A81002A820BDDF78A962EB24B9000C0E23C174356836172D04A006"
DATA "080CAF6E6F299C29C4A0EB21A4C15AA5777CFE83C902F4AD0EDBC8F7FBFD0BCBEBF02220FC4503203E02B0C2D820221BE39C3ECA605B65E7EA0B0CEB2E1838B43E7B20150533"
DATA "1FBB01B7A8E1E03731089620397D200674A37F1B7D1C74268520E1FFFB6FECEED90010D958101F605A6060E1D907145D3BDB1F50EB348B4820A0E3082DDD43B6803CDD1F60FA"
DATA "7A28DF60DD35DD36D39053DE3006BC321BB021F6410810CDD35D02B826FE0808FB0431F6D33CF702EF845919DF0B34192A620496C390F35BB72F051E2F48741E020B4817816D"
DATA "9482870E57EB66D2FB9EAFE3B0190D5598100FF70476DBDEEE1DEE211640C1E802430741741539B3BD6DCB071A13EB150623C22202F1DBDF59090A033D395D2021D94150D91F"
DATA "06F5E0B6E0DD06DD1F231C8CC0E4414656931482563B00CBAD6FDB1D0EB65043251D14845DEC0FD8B5DD01334F0F5916F70C4B17D66A6BEC4016F6BA05101B19B9DE881CFB65"
DATA "0F849A3EB919C4D61D0809904F21C9C96134BE594A5437097AD3CD1A62D9EEDCDC19DFE010D997ECBFDA90F6C4057B4CEB48150F2C1AC8200FECEB32157A1E1EB6C18E4C0880"
DATA "EB07D95619EA643BD9BBFE02A1CE1084A3440F63FFFAA8151CB1C3F325FB479A8BDAA468B209103C4E91AB33C70F107F2B6A379F5DEC81C100FAB56FD8EA37C2CEBD7D0DDD45"
DATA "EC405FDBDE04ABA198EB5342DC224341DB466C0481D33BD2FDF256A0AD0AC3D9C8D209A15BB4E0B803C28A7D22275D234A6D8427692A7DD1EDC40BDB6DEC0DF0BF814DECA80E"
DATA "CE998285F0EBE06E5ABF5CDD826B2807D1EB295FC936E2F08041784BFDE13A5AABCBCD9311D3AD111EB1010B7693EFDA49A2116C2B5EF977127577E37D0801477E1E07037F18"
DATA "0B5802D5580351BEAB04C110BB08046A05EB17196204380805F91AB05DA810AC06A846052D32DE5AD41068D90203C0446113376020120CC555983B8F2D78D07F74644083F81D"
DATA "7CEEA50F03CC128E5E06F1E89176601851B5CD09BCB86CCBF42005F824683E918B166DA028DC1E2E102F5EEC081D465305EA53449A4B3917C3FEBAAAF837046F9CEB9B38B8ED"
DATA "3D6232E124232034536B5C1615D9962208D054D036180CAEC810156504AAB0390C4170F1756B01389A43165C6CC26057141E5D2C686C110B3EBADC1DB71650229D8F5F6B0409"
DATA "532C04E3049B43AFFD97C5E2FF73208D4318500692B6F7C2D94955C423BBC0FE50171B10BB700B65662021FF805030F76C489B314B665DBA8595AEE12B472750DDBE0E866DE7"
DATA "43104650BDF79BB9F70801C70424C033BA38840A99625927121163C20B41738BE35B1EE73606D58030FC75C91339286718B416FB2DD001DC1805FE03F704900F6D2CEBD8E30B"
DATA "C1D1FE2CEA812A752828444B229CC56895FD6F3412FFDD91D99836025B0EB8F8D497021C73F46623CE5E511B344C46584BE473B4F03B5B0D12F761FFC5308C1B385C35741BC8"
DATA "33654475FD37A4EED9C0DDEA2FD96D755BDE130733D2E9BCA3450E13A9A5E519FB43756B400F4D5D92DDC7A4D308BA7897CDEB9DEB36B6D3F614D1650C2808726483B10175BF"
DATA "2CDD0F084A4D0EE656BEEFFF8B21A92D5A4B0C5EA23BB858F1B0BAF666091A7D51104D6D96EC6D4D45260DD8151487A90255EA550E252786A98FC3D726EA35FC10B486D0D10F"
DATA "9BDD7DFCB9FC658FE881ED0EDBE2109BD9F36C855B07702396F7D0251A66037B532B6E594A0CD96D0C2A83EA00DA518A24B70A372BFA62BBDAA8DBEA9B651047B2B9865911B7"
DATA "9B0C23106EF8E20DB4119C0948E8DEF182B709D7BF0DF5D9EB181680F384FFBC701A05C677D78F0A7456654074480DDA83447061C740D70FAE9BEB2E00B956CDF5DC9817195C"
DATA "C0BBD53D1D06BB632E046DB7A06543753A2F9D08BF588119F42FE59B105C219D681C49888285C6848BE50208F1565DB4ED9A48DE8D78FF2ECBB6345652430234254648753BAA"
DATA "DF0313480F85A5D7857C1E1048D52547A6040601019EB3E7EC50D21612220B1116BF39794E040A08518D7E1857FF4A3520BDB50EBC49BB628128B4DA4E5D162E4E85A6251D3B"
DATA "CEFD62C1C58D4D9746104C48B0DBD8AADD4F03890ED44E1A50411ED233D170B0E24932EA9D5582485CB5174825CA8F1B833E77EEDD04C57A0B56F70C08FF36D2320066F685BE"
DATA "35A80B5A5FBFC4EFA51A6E153CF5A0CC711D8D0409B1D4A7E2C889386BFF308918DF0A18526C28FE247CD31AEB280CA3F424280086A9786810F1881D33FFDC014BBC13153E2C"
DATA "837E04462A2E6C5F0D07D3573726187B435DC60829DBE87CDC295FB6515F579157092975E2D31F9EA45A5CE68762FF34C5390835F62C87B45290E8148A1D942B7DE4AD0FA8D5"
DATA "052FF03C3BF4801ED06A1E3A39B10BAE0790BB098D34B04F00FED2391EB48BC7EB6D6A18D7F83BDD99C1E0FB750FCA0CD0506A0A28D09E41435DFC2F3E56F410460B57077517"
DATA "CF6FB4056C3428E488893EEBAD386545EA5289F73243BD19AF559ED867546176568DD9BFD85115667584D0B46A11C6BC860A168C73B8BEAF2DE250F883FBE0776FB8EB3536ED"
DATA "5E61F185DBE7C3EB544050AFE8408A09BC92DDC2A78526455E95EBECA25379579210D09E04A9C0FF602D47F4063EF0206B18258424266CBCC04B84D11B6AE04F58F7F162216C"
DATA "05A7734CDBC5426CEFAF4D1CF1B301460FC05AB74642BF13562C912D557BDD7932D08C0E56C24804938DD2EF0697A73B044C0DE01001A3076A0815D00BA041264E91B861CE30"
DATA "89CE406D0DCE8D3A435634F64D57EB30815619C0273B84080F0C407E741D3D626577AA76CB56FB4F023B81154AEBE217A4AB5AC771CAF30AB00A4FD5BD40786616DBD079335E"
DATA "46B0FB3A8884375245A87636548CBBCDCFF725E3E2683F0D6C047074C7A8213C789605A40488F60BF556395004A2F16BF60C03F90785F6B74E3BC672EC6BC90CB7A3D951876F"
DATA "73051E02A6CEE27429C8B3146320D062E0311A91997C0B7F4B1B2D41AB5268598A742C6267BA2203080B7543C563400D6EF8284E14F756A8D17FDFD1BEA2A104EB55FF775CDB"
DATA "B785F6AE0CF0598D709E2C514883E8B0C017A00FE8E80674218312DF2758162487EBB93E74F9F90A3C746B0B7070EB0A0F34A2E77878DAA55015500866B8811FD016D18EE0F4"
DATA "D6A3E01E518B42F8233EA3D30BD80BE4C3D75C8DDC06EDFCCCEF0AD196052E456C0404DB4F6079EE976DF7D489476017753E0D64D0C747648C461DBB3D7C112C4EA3DE4DDC08"
DATA "FC03BFA1BD8C0E397D198B04508B575C8944114851891BD745DC10A75CF85EC206CA569B431F0164531085862F9DE059EB194C8B29B160394E1F8E171B61A568619689932541"
DATA "2CDB060AD06415C8849D8C04805D0E84A811825C88E18888C7591EF10C0FE99E058404AED40C576245C18A66641644EB8AB6FC0CE117FA0EFAF30F82810DFE2BFB8D4703F804"
DATA "E077EDD77275238851220F593BD87348B822B8D019A90802E303C3A08E00DD520F508420B513D2397AA516C0153E745C326EF02FC1FF02E934B8EC7C0BD0DB02D13D0DEC065F"
DATA "016A5026D117249200B572DBD9B8AA214585EC6632C596B9B43F2CF941530737441858B526BE5E757A488342F08A2146837042029E2E572C57584940A2BE24BF294F20143747"
DATA "745813D0035948E84320482012B84D5AFA113668F939FF0455413C03C181F70226DA0D455527B90B011C1BF602C448C6C28BC23A3F81B6172C5C31C8A15BB45B61148A057106"
DATA "331144BA085CC00818751848BA41FD97C4F972098B580803D91B0A4213682B5AD528A6E8E103DA3DB2CC4F6AFEEDBD105B0680C914342DBE406532A050F8172FD6613D898109"
DATA "65230D500360386C54B34CF675972D135019AC080134FA563AC924C1E81F71960105A11039833A444C80A4E822620F98EC68C0F9BD003610EA30BBD0D20EF818083B1DB05016"
DATA "400BF846D83A72EE52041254D8B2CA550D45E81665811856E4591E6D15DC85D2BD04662C166C5BAB1ECB28118F4959CD100723558F25984F94EDD0117418EE50FE0A24A9A937"
DATA "98363FB18C681495BF471A4536B49057DA8EE63A0F42640A5076E2C256211E63C353664BE4CA86CCBBFB75B4AC7D5D591F405C9A378E050C2A515918CB40770BCDEE953C762A"
DATA "0C8D454F4C8BC89FA2BFDB2BCEA2D1F940542BD9F58DFE38BF0F10B575BD964CBE1A9DD157D017896DA51F23F613F6F2139168102001C7E681F7D955898C1D5E5300AC7A1AAB"
DATA "BA5AA36AB454E174BF400B19ECC441E40C47888C0514B76EB8084BB21C47AD403DF635DA304C6D5398605006C58AB6CE0864FBDD928893861084C887080D96107A47761CB682"
DATA "0C1F18687142504E58CE59DE35FFAB835C080FB6EBF48A5514845453C417F5011D751E77123DABC5B380A14123412540084CD7E30337A1DAC91538F904273025A4725BC64024"
DATA "B1894EA8D2146C5552985C880AD7A35CD0686389CE72C4BE08BD25819DE984B530992D2C33E5EDEE1B5453FEFE743B433483FA08366ADFFA043BF2762EDF768D5CB3532F48EA"
DATA "506CDD1D7B0412CCAAC53077E71D8290A1B90B0C93A953BDB7B0648F86F516EB0A3E55C3AF4104EBB827084B2EF774336F2D58C860606BA5B6D068AF740210672E54850B665C"
DATA "3C236D1F01BFC6890222C3254C9B6CD9DE1029FF711C02182828C28D0CD4466D55F166EA01170A5A95AB1DFFD15B0B6EF1543EEA428BC1E6209AC7DAA21DC933D2E6A9A241F1"
DATA "7605ED97EEB5BB5D76511F95A486646C52510D96151A433A5F1312866058E1EAF70844B9C00815DDDD8F022429628FBF11FF8A5E5518E33BD37E1F25E81DBF068BCA49381886"
DATA "3BCB75F6250DF82D5A467C483BC27D015C07BD4483189F915D247512C66003C500994524C9D8DE8AC6D6B11728E5CE0F95C0B368B920FC3E35441B93AA757DF1FB9CD1562744"
DATA "5F8D43CDF71517B805D77237783F086281D7E87DB6FC52C4A3468B0D431CA51C305EE966B41150741209CA5B0341AB1652038AF4022D042FF474AC6EF4453A8258213C6D95E0"
DATA "40B3F61DE298D49320592057F460D6CE0EC19668A36FB97285EF74332076F6B1F814ACCFF80F8FA3B81C385D35F806B7771ACB7EBBD019B042BC36E57716B9F1FB4235B27468"
DATA "C707B983C75361802D3E1ABC0C3002D66C5DFF283F62F8F065B71BD41AB322B033750406EB06F4BA59055F2653D962EE2FF7EE70C15A5D8E593708382E54806EEE65E4131820"
DATA "4D4640C9CE9A3D07A585854957951DB10C7A9F5DAE96511A20C1912B1CC8183128051C1C978C3C972014101CE01F543BF4827F7E3C8142B851D1DFDD7734FB60DB55AC2674BA"
DATA "583F8721411474B61FE846F878C9011C4611DD5001A11969350CDC532C259C0390EC2426800364795FDB1C565A90EBAC296302DF20836C916F07080C9D0C32C81014183632C8"
DATA "60830E20072428C820830C2C303414830C321C383C60836C27DB4012404407830C32C8484C50540C32D82058825C6032C8208364686CC820830C707478C9284E327CB680C42E"
DATA "B9E4B2840A888C90B9E4924B94989CE4924B2EA0A4A872C925CFBCC0C4263B975CC8CCB2D0B9E4B24BB80AD8DCE4924B2EE0E4E8924B2EB9ECD4F04B2EB9E4F4F8FCC05E32C9"
DATA "0001040801B24B2EBBEC0C18100A142EB9E492181C2024B9E4924B282C30E4924B2E34383C904B2EBB40B24448924B2E9B4C4450544B2EB9E4585C605B5DD289183376749506"
DATA "92080ED03B058C4B7C06646C0411FC08DC0069C9C88030285A90A24D5187DC2C7017545AD868DF466C404636490C0410114046066408140C4606646418101C14066464402018"
DATA "24646440461C3830CF80FC063CFDDC3440DC0119199038443C1919909148404C440A34550340ECA38A03C928D8D9EA0B7A32D78D4301EC7747712AB650E849BB7F028CE2EB75"
DATA "87F8885DF9C64521EF2896FA0A7CF8C645F9460D1CC5147F74130FEA6BAAF08D135062E82A5A41E668388B8654B407073758A268916AF10C865403A37C66301A908FD90C08C7"
DATA "2B815390A2D560200D1437387BA1DBA6804DCC32480AC5D981E1362DDBA5DA0F84480605F002BD29D8AA18D2E3B881EBFF3FDCC1F6458C5718F47E81FB014B18DA4A118127D8"
DATA "245C8ED00BF085F0750D6B037CF4126BDCB10B17DA068D22ABAB10AB580FEDD6E2C68365A5568D1C15E4A50002FEDF04A0DC604F8D47019983E21F03C2B6E0DA37578D570181"
DATA "0AB365D45EF8DBEDFFD879054A83CAE0428D74596A1F4C592BCA40D3E0DFCEC685608506B08D2283CAFFD309A07DF9E2F7D28554EB05837C0557C7DEFE5883F3EB6E8BC79936"
DATA "5923D15A81E740FD7E7B57514F83CFE047882BCF5BE8DBAD233B8D4C338B3903FACCE0066F2BFE6D390472223955E0EB1B302B25E2EDEE631E118D7A011F3BFA7262FF01736B"
DATA "F485234A0148638DCD10176211C779D1E097F756AD11BE9F9E59210699A3BAB722A17D0A8D912B4FD0BD6C75F3AB66DC0143A1F35C18847F0B990DFB3BD97D0D23AB016E506C"
DATA "206A7E498F0BF7095D5B782B45D426E4261AA51C4178BE852DD1C4E2A517CD1415689FC114D1F14DF746CFCAD3E795202955DCF7D75EAA6DB5C1E02D9DB9E8CE23CFB7775D23"
DATA "A01FEEA80B75D8891275D46BD40CD4D3E68ED16F10FC1B5F787CD38B5D02C1E60246F85A2BCE3BD07C51B4876F0E318974954F640590170EDDF54A79E90AAC4E8D46822C0419"
DATA "56A9D0574E28186EA3565C77030966618513A982A666DE9F1CC88BC6E64E83CEE046E0003F84D64D93A6318D3C167D1E0A4B29048883D88939E82034BCD6D8EB1FAE1EAA7201"
DATA "9B6869E888F2A9FE03E9318BA538B2F0CF4879DE9ED42103102EC150787A7AA99F8B2734801E9164A46F8D052821C951016E7B3652A9215233DB973B1D051D86A1B8580F8C1F"
DATA "31818FD9AE2A9B4D8BC1B1205F8A1565B0C6BEDC6C03B1580962A633BA0D00AC65EA6C8165153CA6521B9067CEE6D69294DAEEECED7C8DA6CF23CEA4EF110B7DA4CB61CDFD14"
DATA "7DD4B1D6A97DD047290620C9A673FD768456D3E342C8F7D91BC9F390EB028FB00BD96D680B5D65F940CC4AB74A5B1CCCE2E75904E588366F05C711207505891947904048FA50"
DATA "713280BC902D712D78C9200354747864A8400E6FCF7828408E8A7C053232F2712C7C70F264E4138E0FDC8470712C20030532847C841C905C807C8D607BA9455633F60A88A81D"
DATA "9536A0466C90E3088CB26CDB069E9805B402A8A4AABF2CCBA09CB094394D247517828E40C8174378159785825F4C8955AC8A027D0C083CB6FF8D820A080D750342EBEB53B330"
DATA "1742FFAC8ADF970B0F871C0292782A8D48CF80416F77F1F90877062E4AEBDFAB248B09A98D3A58143A012105E4087EA160C9BE83E82B741DD00250DB130D08407CD8A055379B"
DATA "CEEBB0F2D08CDBB5021FFFEBA4AD080FEB9B51C1C8769BB9A85476AB4E7F8BB75D7FAF3C49223C2DD13AC374BB3C43176DFFEE0F8E2F4C3C457E0A2C643C019A217AB911BD7F"
DATA "06EB894A6A0BEB849C74865FE6160A594B7961144377BBF6B607731CF3FE73E878EB1A3CFF125FE2397F1A34B419730A3DB42AC3880747EBA6ECE6B60309B0FC2E7DE24768EB"
DATA "764D67938E8A4472883B00489F2DC59B02A47526D14D3974F6EB614346BA1859D50B1D2BB87683A2EBBB103274C32CFC6B6E6E51E94B148D4AFEB1AC0621F62064076A09144F"
DATA "2052E71B69103D300896C5DAD3ED4D980A075911F70712B0F0B3B655A0C083F92C313C57B82C757BB6A9265276AD14EBBF7D20749B6DB6475570FF74C45BB414BBDA5A8D19A8"
DATA "4790894BE5002AA3A2EF39B586FF6FB87610807DF7057C03FE45F74F178911A3F16EE1F165DD21EB596A0A0824B8A6806D0A94CFB5BE7CB1DD6D152119F9206BC915BEE2ECF2"
DATA "2F8D4C31D081F950147F09FAE3A9B6C3DD81B9510FA0EB0B28E40B0F676E5DCE1AF195BF24B4D88A6F77674F803FA5F48D45C45BB428B53D8B89921C9D9C045AFB56AD0F9798"
DATA "7D02F7A4272ACBD6D809A0AF0718A4ED6E7BB72B1C3D6B54219D3DB0EB595B34755BD62D0AB979B0F36095706C6FBDAC3BC2DDE8D11D41E4DCAE3F16DE1013194B4481C2E70D"
DATA "59C42653B16D0AAC22C5E892F8AD3A8A8448ACBEAC0383C154D07C5BAB13B684419C6B1F83B845591C01A23903720EC637B3C58BF37BB8C0BA8D5DB86403184CC0CE2430BEA1"
DATA "5B142267E8430A94D4A55E7C3375CEB9EDE323C1DD7E44AFE03B068D0C87759066D9DCBF22C9663BD70F83205D08C717F773F3EFBFFDBF0DCF0F8709BEBF3FCE770D5DDF5A1B"
DATA "DCC8AE3477B01013D6751F416FFF0BEAF745CC56153975C8751004C4750BB9BC7D63D4CE25B323C675214308D6B6ED1F17397304751239910E7ACC024B0435D7C875B349C8CB"
DATA "ED032E26A8055798C9A80355DAED97A29C52528D4405C44DA48D42D4B665DB05A01BA0A4B41202EA37EA70B514AFD257FC8D3402A4F36CE57398F0B422BF35207E77FC740366"
DATA "AD3C02836DA002446D6C0B249C169C15BBF73FB6B6DEFF630EA87D7F9081C102C0E0D46F742BC47E37D5DC85FF782B02F012B083D8C2D165D420D46ED0FF8BD603F60BF0C1EA"
DATA "1F1F0BC22B7DBBC347F3755D317FCE044D5628B59B150A794268E39B80ED74FBF003CEF6400174D649DCFB8DBEB535B5D8D16DDC6A1FD1EF0BF85C0653DBB6C1E209E84F4E38"
DATA "AE4358FAC275D137B07405665CD4DDE622DA6E14771134D46AD0D0D86EED81FA14057534B0D69BF6B2754B19D6E0DA091CDA00BA7B6B6F782341DE750775DE41EB0EF306E2AF"
DATA "2D60EBD4DA56D6B8FF741B75846A722302C95890D0D02032C412C7494DB5D66627BE032431EBEEE3E3DB3B669AD60B4D90938B42C6BD302CB06D05CA0F4D4D1ED6BDEFDB8DAC"
DATA "94C075C8004825390538AE5BA3B00EC4110491AC0029B6A61E000A7B4D4075990B2FDC3D55CA4210EB2F9594048B5134D642F68EBA51165C3BB8A7020F08B511A256E042A3C1"
DATA "2F880BB674BED01ADB0F0247C01BC90289570613B5108895D94BD374A5020360ABDC7397A6699A21596DC6B1742E5080DE35230BD2578BC69F0BBB4A03FBC17DE17FD807F7A6"
DATA "BAC07465448D9BB0660F6F06037597CD6E4E100456205E307F07034F6677B3D9127F577F5F6F6640046E50D9ECBACD76607E701867137F6F7F77E0EF07BD7F7F708DAB8DBF05"
DATA "4A75A35364A09624495487EDAD6F59176F608DF18D7F10238A1620B6EF900F47C1BE6C2F6157AD1689171804044975F3503545A5628F09D80278DBC246470FF7585EA7BAF9B0"
DATA "BF8BF22BD02BCA518BC2201688175026AC107642482C19243EB27864DE744B148A46E16B96B9B441B41E7721AF1CA3E82DCA68015623D0FE000B0B75A0009B9CA0D0C4E56433"
DATA "5A06D4D8FB3FA8FBBFCA5ACF06C643022DEB04052085C6ED8EE27D0866E275372A669C602B99CF5007C7385AA02E5090A066C895ED6FEF28D40D0420883066C7430301303976"
DATA "E9841A486582033BD02F742E56C197FC132FB82362AB782C2A061D74DCE2F01BF7BBCD136846604640025A348D3BBAAD8AA607A083F922C04A5F57D18A882D2758142840E7EB"
DATA "40220F1D8A1B902296EA1688B8833053F27D0305EB1B1C489BEE5F8819A99F2ACA8BD969C9104DA181ADD285C66518C169194398D2C9F07F4D8D84080CEDBCECC1F84D683283"
DATA "87C18D6ABFD806F7DBC6B6A5AD9B1355EA3BE6F3E21C9833D1FD04D185DB790FE0DE6723BF355B1B98101883830A548BCBC1FB0761B68503D707116700EB59B7C6981D3BBCB9"
DATA "230872220E1A6C407DC400B56D6B5B0704C63FBC791FB80226701595F0C103DE076C1B743376BEEFE237B605BEDD84A88B1023D623CE371120FE8C2C1BC41A04D6A7CE25CB49"
DATA "B39EBEFE90EAC250F0FE771047C7E406D94109B6077D7D4706790E59E8E4E0EA065BC1C52556B22340078B5BBC7C0939700439300221757C5E8E2C7075F4F9C04DACC003C900"
DATA "5CA259B055C90DE0AB70D1D59A4DB1942511B1B101570CF98B56B5AF94D882B8F065A4AB0A1BB29C3C0DF9C1A4A446B334CD32069094B0B096A581373EBC83C6FCACC0C03CB6"
DATA "4F5E8D81C7FF7E3BC0F8690B14686B3125F4C8FEF00B7AA9C18BD0858B1F0BC1B6A483E6E0F8040F03C7D9E0ED5A0F357FCA0400C791E5A739FFC7C003F8F03668A6A8B832E2"
DATA "00F47FE05E5EF8C1E1EE0BF15E00E90BCA911D18DA48891AAD0045B814686692F0F00EA23372C81800F9F2F21C79F248F6F600B94DFAFA4780C9F38CFAF6F27206A7268DA786"
DATA "04A8450CC9C8E4E0E8B7761630D6C77D0CFD10BA6319CC102343CA9F0C43C9D19622DA5F6DA7FA5B593602F0F4E255DA33D923C8446BE3DD3381E3BF5A0A36CBC8B2D1A8F658"
DATA "C84CD0438BB79C34B8F0350D5DE0B3713EF0774B5545803A653334EF88F20B7DA8E08E05E2E9463696F8E64F7D7BC6F660E0A054048E8A39768D28741D7BA0781BED3036EF1D"
DATA "469313F0930EEE607411590991803D8F96E33BDD751821D81CD496E61BA788A56B769B967D302DCB24454DC0585CB588BA244BA9F3B2456B2E9699068A1069FE34CB09BCCA1C"
DATA "0A3BDAD97090E5E4BCBC5F6DA865D9C2545289B8B867F1659CBF8C9781C689F64502E33CF88A7C3119938CC688F689F672D29C7488C6F6C6F0C803F21CB07DEF0BF90520871C"
DATA "7DB04C1643C846F089A476BC486184890075A42367F14A75EA89DBE4B65B7321E0E8F01801E59C4A9728DF30B48B7D140830988E83C3BE9AA6298F02D5A07BB45F0666428D42"
DATA "02C642462F95FE771B79F283FF157E036A155FB701EE1081E7C62CC7EEFEA3CC12BC086CB45575955DF2E424E07C991CDD03DB0B312D20C146AE012DCFBC5B88261D55EA8688"
DATA "32F7DE75A87E7B369AB92822350AE8EB3586B1EDE1E08AE8354E33E0C5D1D45EA8D8948D5A040F10B416687876AD8EB55507E42BE0E36D6E04EFA577DCE07D0CA06DADB00C00"
DATA "BF1F5BF0ACB7D4A0019BD6237E0996EF36DE36181216C4C1EF36C8670BF78D3C5AF444AD0206C0184A6689360005C6A8F85FAA2EDAD2423C970125C88D143068BB024BCFBCD3"
DATA "28D07311C0D6BE3673CCF8C962543FA5BE5AC1F413DD1818172AE51AD080C16C671F63400116AF434498E49B0116E0C645EB0F4B6415834B2536FDEB023C357D0E40EB44C5B1"
DATA "09F10A70FBC603304B3BDA73F25907FFC6DF283C2500FE032AD880240FBECB885803C62D0CA2E1440104618C86DAF69ABE3D3075054B59F63906CDB5459D3817CE10BAF659F8"
DATA "2F6CAE01CCC2FECA80E20D80C2CE500A82D0455940D1EE4BC1124B8BE9D0890D05E6E6E6E6CC8915C8891DC48935C0893D5F69B6EFBC668C18E8060DDC20B82CCDD26C1405B4"
DATA "25B02DDB98E1DCAC9C8F9A56D407040AAF513DD84F07EB28F81E0A85C72320B6BFDD6B0FA11C19E8D413E8C809E8C008B502F709E24194055F8482B20A847F130A0EAE1C4E18"
DATA "6A012C8A5804FEA26B15FBE2A0AE680ADAB8788715EA18D823685BA3C2402803426CD5916A7CEFC051531E05757FC0B2D4163AE201E8376FF3A3472A907F01411004F37C749E"
DATA "2030D941413A363ACB418953D032372A34A0D64441ADBCD4B6ED99903F061019F658A2D4B86DC91C1A33DB3B7FA9DA685BC2191504DFF8258BBFBD512D88194120FA5B58C38B"
 

Re: primecount.dll

 投稿者:しばっち  投稿日:2015年12月20日(日)15時55分7秒
  > No.3965[元記事へ]

続き

DATA "D8F11BD10244202B9D52A1ADF1DA8BD3311B6F26FA5301B0345F33014B5AD536DAD6986622F6299F4005599E6D5371C804070408028FA29FE5100120F7C3A17D550B750A023D"
DATA "BA8ECAEB7AB511E10202BB01076E01DCA2168A740BFC130DF5A97AAA9B0C94EB05557DB5538B33880302EDA6ABBAE800060BC68C6AD7942BDF5E57042574C38D2D11874BC205"
DATA "B80649BB6B6D6BED5F119929C306984B833DCF360902080139BF167BF77E81F7C2A32CC78BCABEA2909C3C4DF71F3BCF98CBCE6040E0B7179C204E295F23D15E5BD062CD350B"
DATA "992C0761F7CD6C6F6ED1750F9580F340C30D4009A05C90AAE99B8F50DAEA5F6675FC2C226A105A599EED093ACA0807080410BC1F9EE5022001520681CAA3B335AA1A3FEDA20C"
DATA "91AA566FC6BFA99DD4055E82911708DD120BD7E8AD7B2E702EBD36E023CBDDF97586103F117519000150026A9A1D36C3A90760E57DA0DD9083F933D023C235A7AF2EF8DD0CEB"
DATA "AEF0D814BA069FA81109F8D9B1C8F8ECB622D9C7F8C27428BDCCB9E6E41B0C1620D7C142D8738C05EDC505A080390CC3F1029AA01DE8F6396F344BB5C0571A3EE7300814EC6F"
DATA "F78DEA0FAE5DFAF084C079B15EA94C6439D9769BCE0809040408E9DE93E5021001A982BBCE87DBF8F88BC8BB0E231B2A8D0AD28C7525570740BFCBCE7E3C830CCECEBF0623C7"
DATA "E6BAB7AD54402D2DC07F2C0D0B2D2EF6782EC82D4F2DD0BA553040E680B2F7D2574053B7150BD0CD07FFAB72F1E18837819F50726A77A10BB76759CD8EF48284C9CFBAC32BC0"
DATA "5A8AD0840A049939694E040802D3370CE1F3CA01BE85CE918EC37424208F9C2C2040C37512DB8DA6C90A7AD61683E9C51D32C833D881E9C6E9CACA029AE00CCA053327436BB4"
DATA "8543777FAD15BDA0171A6E8090419375159934644537985DC361046D08E0572D5527026A16B0D111FC0A3459F6D88854118803D42D626823400A0A66440F6BAE047200920F8A"
DATA "305DF773F38944FF8A409089C4900454038017201534A40F8A02C90190308A30354DD7C543062703140C0415344DD783FC03F4ECE4BD8610200F0DFFF449054DD3034854680F"
DATA "210F39008BCC8B7CC075CF1E8AD021CC900BE008BC482AF8612C0F8BCC85420E818BCC699AAE8B5B0680038890982A689AA6A0A8B0C3EB0E21400F2305DC03480597A6E4F48C"
DATA "080FCE0260009D24558C5542280CB4AAA7A849FA1B77FDEA8B6A69A0F013757D5814230F2BD4C417C5FB8ACA10A6401A411A20131DE6FA7B7F058A14A818B853A3441D4C3232"
DATA "580FA4F488BA9A8B8CF80974321009DE87FD18705313EBFCA1044F0D800854A3673C88DCEF47390D2B743F21F655DC7544FBD698FF742C7109E2B78D288C7419F0516A554755"
DATA "076151A8D34B10AD0C58DCCE09B7CFD6C0814D57205833F43BDF74294D5011A050EB03ECAD93E77B3B19F80F08E22B9F7BB1EC1C6ECF1310028802B1A5E4E01C6E3A45092C90"
DATA "99C92015B498E1150CD50B1A6DE77FA16A828F6652DD8BD666833ADCBD5007C383044F75F4D5E72BD1362A6E4B85011B040A5666B5A26688DC17150EA402D74EC23052AA6C45"
DATA "B00A568B1468E4AA2AD0E1685483128D52671F83AC82092F6EBA658FB9DD318702EBD0950DD4ECA6AA8EF0FBEFF22BF18CEDB619E40E27EB227B2BF217A85C41DB0C061808C5"
DATA "45B751EBB64FA783EB50055E515734D208CC79FB78DB45F048AA6A5016444AFE3730B723118E1B64C91360A682D935CC67540C42F8F675F52B0DD1F8485D5CB83C3C4040055A"
DATA "DF2BD025CC6EA50A0B0C02504A93541DC9D4BCEF781600EDAD1E0F027E0C046703C4DA8E1BDF905506090C12483C0C16CF3014741447557CFA884CECD68FA82A315D47463481"
DATA "F3DF32C9883E457A48FCDF37A8DB0B28502852032452808FF17323232ADE611252F483BA105550F88FB0AB93A2B713508D1B0464A3AB60C3149928A5553A74795B2AAC2C0606"
DATA "3B74762DA668FB52A58B0CB3898F0CA6A2234BD17CB3A71744B3A8F76191A808C0EBB7B617264533BDA842648BB71ADE630F81790483DF51E5520CD8BD46C03951CFDAA651BB"
DATA "C16FB0BB0390EB0B088B6B4B0852F4FF5697896B0C55515058595D595B91826445A54B914BD4A00B950811DB03B24DD4E8C11BC9E388940C15D0200C64076F56A045E466D500"
DATA "60B732017C1F020A73470FAB70A5C8F10424EBF132461765AC51D4BE951AC641BC0097A373EEDCC4205E91892A6034CA3C06AD5C3C76CF3C8B02F476B701E92E34263A610825"
DATA "0AE4A5FB852A5CA43A41027519141100DAB6B503F857046C041AA0177014CFEB8B1BC0D15C1BA15D8A01C343E1188F8BF16C9DEB46E78034DC1702A4CDD37CAEE4185FCEC6C5"
DATA "BD5B81BD4D65EB888BDF770570C858D80CF10A56312B63D933B6A84764133A8E4E4661832E0089AC588519442BECFE395D0C0F8645A6895DBF467988370B9DE8D18D3C092B1B"
DATA "58EA8D9BE0651015F38BD9A3F8DD101F843475F803C92BCF8BF9B77F8812393BE803F6C1EB11CB03205A05A5D68D2C14ED4234DA16053B17B9D62DD2DD104789103F3DA2500B"
DATA "E2520BC5EE6D618FA7213B7404413E5B888F6C26EC1C373BDF5FDE255660900B5803F09F2FD66ACBF8FB90AA92A3B94EE4BADBA5DE1DD97A2ED176B70810310FBE31AA32923B"
DATA "CAA5E5E4E950CEF8F808166DB234C48D4BE8CBF9F3E79AEAA848830AC9414851CED6FA68FF4DACFF95850CD2855DEF120F87C0FEE6DB3950752AB9F5C4C28D40088166F0CFFA"
DATA "156E97A25613C1E202EF1035E0822801CE3C9A01A2B117FB044602D95ACD8536008030003418467C0BA7FFD1D3C2FF492B0D4B31FE2FCAAF482F17C4830F74D366793E4B1A02"
DATA "510A593FF80D6894048224C88BC42500526B558BD1CEBF33D2C41BED948BAE1BC32D000D850B7497D4E97F53D00B194DC6C7DF1E49D4B741B35AB62067268E8E4C47E18A07AE"
DATA "5923BA354CF7FF3AE772063AE3770202E63AC709C3B7810E8816BBF3D1F35B75375A0A96B9FF0072CCD97525456C715B8F5664390BE2EE04100C764E0E390810100B41FC2BDD"
DATA "5C295423D1E9D1DB21CFB37C04C9F314103CCBC8C90C08101408C19105B10C015EFABD841182649A0BC8B7806BF1AD3B0FAFE1237CF6CD5A5305A6720309E103D32E0E1911C1"
DATA "FF25B3919191B1F405F0ECE42B1105D9D00000FB2E2FA20216531AFCF20AB95C35A357E601F36CF6B057F03F07330409073C7936D91FBF073043008090392286CC0006BBAC7C"
DATA "652B30477F07FF6A24674FE07F36206CB3BDA60C7F5E07C0C0FF17FFCD773FCAF2497103F16042A20D8D59F3F8C21F6EA501F8F2FF60078174616E00636F730073696D6F6466"
DATA "FBDEFD03A86C6F6F72076365696C0F6124BD21E1DF9B7870313007613CF7DE16F92373693A6703272FFE7F2BFB00706F77E4A0FF35C26821A2DA0FC9FF9BFC7D124B08040808"
DATA "0300040C678C7DD8017F022F3E40FF00EFE49803260B9D0798C0FCDB4218403B054B00450052004EC7BABFD04CA70032002E0044094C1B466C90B1FFFB734672656507536574"
DATA "56616C750B47FEC2B71D416CD0632B4315457869745072DA5BDBDD0E6573F56D0004186F0072E973E6DAE6015564F901E305324833580B0B1D0496208334038D088E32200332"
DATA "8F9091033220039293B4E906E49202B5034F0973F70431B348013A006DC7204D733A007300642C5F834D36584D012011790100E9662363172F2F1113505CC3209F0741441163"
DATA "03AC61ACDB5F620572134E2B7613BA49EE864F2574006F530770AEFB5BE61125537500670373177393DC7D004A0B6C00796E277BCD7DAE3B702F691BA3610B5BB2D7758768E3"
DATA "1F620D75133761B365666111AFA3366CD8B0978F837B929D0D1B7767797BDFB061C37773674761DE0BD6754F751B643123AD03F6B9CB0F54AD2173135758B7EC754764E11527"
DATA "750FAC5BD64D4DB36E336B750F1B36EC857B6F675B61C3860D4F473FCDF6F88E23483A6D6D3AE900642CCBD67DCD204D20087900000B2F2FD2667B7008FF4D034144651BFB64"
DATA "8FF06D6265DC4E6F760B4F63746F0AD03FECD2647074144175677573741EA17B0DBF6C43076EC8417072B58FF0B1784D617263BF656272750BEFBDD79A238A0A675F575EF7DE"
DATA "7B534B47433779437BABBDF73F3B3323C4757264186C3BD69E4F5E095468127313CF0ED61E5765647C0C5475094D6FEFB9D9B16E10537507433B37B0FDDE7B2F27231F005F3D"
DATA "783F18F82E266674D85F00FB5F796EE05CC07403310D667215F833605B646F5F68791ABC601FDEFB5F636162606C641F0E9C39E40D7B7371727432063BF00E1C0AAB07AF0736"
DATA "D3F411D56E2F698D209F41AC91317293230D000A30D731185B4CD3530123B08E6D361D1349F74719EC753C05174F1741211FB9ED0209573600DD33014F935CF7112D23418DBF"
DATA "C720B12FD248DD20BD9F4D6D1B1B6BBA4C1763641366536D2B56ACAE1B68C9730961950535DDD769EB8775ED696796453ED70D6E21F5764B9835DDFB1F69191F6C7A27BA2F59"
DATA "F7D99F545F27641F633BB9C1466573206DE71F072FF635F36F751BCBAC1B903151632E1949E5FB62DD59556D15730F296B572BF6BD99BBD79D72694164DF73DF236FF9BBA96C"
DATA "D9877309AF2F272D4B33D09D5ED7AF1B287715D947846E6C4D293D016393098403214F61296FC67BBC6EA339352B05DF2B3661394493CD972E73934C09EF326E31CDAEEB0EEF"
DATA "65093DEB2061703BCCBAD98463DF5D4F6FEDB184B324A9196D511242C9945731EF846E40B8656F43475497F726241B7219616D9F234B10C62E17C7D8846593309337C1923C64"
DATA "43643F320038A184911EED61156505031BF60E039F4B4F496F888437BF77E1672039C0426F363244F611A5646F35AEFB224C70A957762F72432D69259D75398B064886EC3BBF"
DATA "345FC9DE58F7551178B92FB10D58D9100EB9C5BF9E9B48D8F539EF6F6D7F3B10EC92CF6F1F05E7979021EC6357388D96F138BC49037533C985AD04EB4737B92F58436DE5EB68"
DATA "43486593F55564036B5F8B850DC82F69FF2497BDC363475730C1797B875337F928002909E3D4E973E9CD0D806C5B498F01399F270E335E2183B3AF24DFB213B99F5738B0538F"
DATA "02711F51936C29E373BF57326637191C0E831B71700FE1F5E03D0B6D9DD11942385B368533640BE4C9635F000207AFF00898094F9E3CF2400AAEF810A0114012F2E4C923ADF8"
DATA "13A0183019234F9E3CACE01A701B001CAB3C79E4C9B01E701FAAA8204021C893278FA850783079147A223D79F2A7F8FCF0FFD04D1B088C3D1D813366DB56FBD4FCC0AC159F2B"
DATA "002B52AC4C3724594C396243D0BDB3B6E3E52E01073C0589B1CF375967256D7BAF1BE19B3D4B6B4D77053E3663933465614511215B50047A80654DA720A017E2AEAA200128F2"
DATA "00C824204800102103C844841043200332810110200332208202083026431001B2A34886680101268C11D8000101612190CB01023B1B95ADB2DFFF014DC865E6141B14016023"
DATA "4B84002FEF6D64CB46F71100FFFFFF15D88182838485868788898A8B8C8D8E8F909192939495FFFFFFFF969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1"
DATA "B2B3B4B5FFFFFFFFB6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5FFFFFFFFD6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF"
DATA "F0F1F2F3F4F5FF5B83FFF6F7F8F9FAFBFCFDFE4E89030405060708090A0BFFFFFFFF0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2BFFFFFFFF"
DATA "2C2D2E2F303132333435363738393A3B3C3D3E3F406162636465666768696A6B8DA8FFFF6C6D6E6F707172737475767778797A5B5C5BAAECAFB0601F7B7C7D7E7FFFFF548530"
DATA "7F41424344454647E21210FF48494A4B4C4D4E4FCF5354854D78A9EA58595A7F1F650900617FFE94314A467EE4DD5F2A4923514E414E0007494E46004C546CE44453177F894A"
DATA "64A297482F5D29FE3F57696E646F775374617469331755E7C6FEFF7365724F626A656374496E666F726D1857391BB1DBB76D4C616E4118697665507B757013ED77CF660F4600"
DATA "4D51616765426F7831DF4896E8550053DB520048C8DB839200D98031BB400302B95C0E103BD06CB09F763E43D0BB07D80F2107B25B1F0642D4D88BAC3B07A203B33F1C2B0B01"
DATA "7B850D3A271DED0B21A7E4B0F98FC023752507F25B1F3198CC15F6223B356A3F38EECF970CB0DD4F5B4FB43F52EC75AF908D54AC03B00FDF9017D92B56995F584D004875AF59"
DATA "8B039E6E820A100202666E29A67579730300E465C922670345EFCF10C100910005461C90FF800A2E8C4C614310000020802460847AB314122DD5FFB222854515085195910203"
DATA "5315128C0AD07690DFFEA001020408A403D66082798221A6DF07233F3F79A1A5819FE0FC407E80A8D923A4772FC1A3DAA3D081FE07320436C840B52F4185FCDF0DB65FCFA2E4"
DATA "A21A00E5A2E8A25B7EBBFB7C7EA1FE510503DA5EDA5F5FDA6ADA3298DCFE4AD3D8DEE0F939317E8D159CA0D3CB54D3344DD303504C4844404DD3344D3C342C24180C9AA6B934"
DATA "04A6F8F4F0EC699AA669E8E4E0DCD8A6E99AA6D4D0CC2FC8C0E906699AB4ACA49C0394A6699AA68C80786C60DDA6699A5C584C382C097901699AEE64D1A624031C140CD334CD"
DATA "A504A5FCF4E4D44DD3344DC4B09C8C7870344DD3346860585048D3344DD34038302820AC692E4D1808A4F4E8DC2FD3344DF7A4D003C4B4A0904DD3344D7C686058441C23C29E"
DATA "333FB700047610D8D5C40F01AB73B9BDE4DBF8B2C03BB748B8C820DD613B03D73037160302344D33D803070418050DD2344DD30609070C08C860830C090A1B0B06FBDE0B573B"
DATA "070F57107C41BAC113110312172132C86083350F4143D860830D50335217530760830D36575F597B6C1748D334DD6DAB20701C7260837D2FC72F80B38107830D32D8821F8384"
DATA "8F91830CD234299EA1A40D36C8606FA7B79FCEC23908831FD70B180733C29B8A5858B119BF4495273FCF1E9426071400A26C1D7079E4C9931A601B641FA7C81367CF9E3CC021"
DATA "B80E1F580D0750F6ECD9930F34101FB00507A81E174F9E3C7B1812071420100C2C0BE4D9B32724152FA01C0F1C199E3C79F6981107901888168017D493274F78227423702490"
DATA "CFCF4F9BA76C25A76426A7582A81449DF8FFCB0E6B98842F10290113306121BB30E3010717A2ECCC461F2F100899D91F24B99D740D2E0B2EF003E8B84D17EC287F002FF4BCFB"
DATA "F55A61035B53B4C20385EA81968BE3FCD538D93018F740C8FF038190A6C168E118FF20237F0161F247622005934B72B20F902EA002400BC8059EE4495EFA08409C0C50C30F21"
DATA "3FE44924F41280969816FFCF3FF920BCBE1904BFC91B8E34A1EDCCCE1BC2D34E40FFFFFFFF20F09EB5702BA8ADC59D6940D05DFD25E51A8E4F19EB83407196D795430E058DB7"
DATA "FFFFFF29AF9E40F9BFA044ED81128F8182B940BF3CD5A6CFFF491F783C406FFFFFFFFFC6E08CE980C947BA93A841BC856B5527398DF770E07C42BCDD8EDEF99DFBEB7EFFFFFF"
DATA "FFAA5143A1E676E3CCF2292F84812644281017AAF8AE10E3C5C4FA44EBA7D4F3F7D4FFFFFFEBE14A7A95CF4565CCC7910EA6AEA019E3A3460D65170C758186FFFFFFBFACC948"
DATA "4D5842E4A793393B35B8B2ED534DA7E55D3DC55D3B8B9E925AFF5DFF97F812D7A120C054313761D1FD8B5A8BD8255DE0FFFFFF89F9DB67AA95F8F327BFA2C85DDD806E4CC99B"
DATA "97208A025260C425FDCFDA87FFCDCC0100FB3F713D0AD7A370FFFFFFFF04F83F5A643BDF4F8D976E1283F53FC3D32C6519E25817B7D1F13FD00F23FFFFFFFF84471B47ACC5A7"
DATA "EE3F40A6B6696CAF05BD3786EB3F333DBC427AE5D594BFD6E7FFFFFFFF3FC2FDFDCE61841177CCABE43F2F4C5BE14DC4BE9495E6C93F92C4533B7544CDFFFFFFFF14BE9AAF3F"
DATA "DE67BA943945AD1EB1CF943F2423C6E2BCBA3B31618B7A3F615559FFF6FFFFC17EB1537C12BB5F3FD7EE2F8D06BE928515FB44233FA5E939A527EAFFFFFFFF7FA82A3F7DACA1"
DATA "E4BC647C46D0DD553E637B06CC23547783FF91813D91FA3A19FF37FEFF7A63254331C0AC3C2189D138824797D3FDD73BDC8858081BB1E8FFFFFFFFE386A6033BC684454207B6"
DATA "997537DB2E3A33711CD223DB32EE49905A39A687BEFFFFFFFFC057DAA582A6A2B532E268B211A7529F4459B7102C2549E42D36344F53AECE6BFFFFFFFF258F5904A4C0DEC27D"
DATA "FBE8C61E9EE7885A57913CBF508322184E4B6562FD838F41A17FFBAF06947D112DDE9FCED2C804DD4A2C44603D0D01170C41498088BF3C13105CA0014865617008DA4FFE4465"
DATA "7374726F7953697A65096BDFFE176743757272656E74546805616449641326765B2078636F6488691465722221B7DB7F6F6D6D616E644C1165411F456EC54F20384973F16F72"
DATA "466536B73543761A0273511A54007A13804D09A0817C49630C53B5DD6B0791474E2C6B6585FBF69DAD61426D7D4D6D756C65488063106C9B055711532E45812D9B6DB56F9D0D"
DATA "43D6FD0DE44465A24164649873FE80DCED6C7353516570D1B6CDDE12E65F6BF5753DDAF6660F53746412612A69B982AD751B3C437209630A2F63CB0AB70EC9411F537012342C"
DATA "1CECDB46692F547970654161721A706C3B7410F957611A744087BF808DEB3A4E616D6CB5B75D78A77076699D6ECC47F6B6DDBD346E677343576964416855546F4D314B60B3B7"
DATA "3F427974692CF1DA0B9FE143DF23517572795003C22B9C088368E6E8CC58B64D548F6BC119287C8F21191AC9796DB3F7BA5657289D73A7092D7BAC8DBD50DD0A410B074F454D"
DATA "097E6C86C621EBAE433561676D8511EE2D556E684E64785970157678EEFC49837C1C656C2FB447386275674172615930D7B60B6DE3D7A4B72D59BB5B125261692D4D0F1DAE84"
DATA "854C08767D45052F1887941539C30A2A363DD852650C4C6F610F627221823BB49C8C36B5C495DB5D001E52746CD57769096E42DB37434D459818BA161B4221C5CF41209F66E9"
DATA "633D57C369E45F76F65AC34B786D705FB86B0C09D51BD848FF745F6E756D5F74BB73211BB7B6B94671C906690F875F69EF00DB1CB604382165966DAEB560161005124B64B37F"
DATA "84E22CBB6B01171605060401FFFFFF6408E44819841A09085E12400B12131C9038050A3418080939B7FFFFFF34060615321C18532D8C08150BF0B6025646F06005C1F0970117"
DATA "4908A5F96FFF06076B3E3909240C00280909162B1B07090C88FF03F209094704080518639267A874BFF065FBDB0D4F1108020A050B070C0601097FFBDF6D0408080D0A060A22"
DATA "152640062A561618267A230AAEB537F738084C101803060F0E1CAF6BDEDED676010807083205B403050F16B6FFF6DB100501070F0D092006182B06122A1E376FFF6DD902391C"
DATA "1107227508130B05126E1C0A16FFEDFFED0B1A0B790611390A26071A072B7F266A450715470A2B181EEDF67FFB2430122E23E520250B0F380A410B0A11E7C001A66FEDED7761"
DATA "6C061C284C0C5C210528D3890C1D546DFBFFFFDA08181B57F08A01230D0C08080C29089E3D17F0702C3AC0FEFFB7C20E09303B190A1324373513701D496F1F750C13121BFBFF"
DATA "E6DE2517191CE7AC272911144C4F4854C32E781A86A1FDFF7F3512E00A0D3E070D06880CF037012EA8D5321807C82BC2EE207C29261E07364A0604660B55FF9F90BB16212A32"
DATA "F04F011C23F0780187F01B01FFFFFFFFF01003F066011B1616086DF00901702A6C4FF024021212260D0E3042F0F4003485DFDAFF070A12170E0623071914869D405420192F54"
DATA "B6DBB7857D706ED037181437E70E050010BDED0ADF130847053A4A010E61B0880F0F5BB8FDB69B25927005090F231E17EE461E3FFFBFF06D72D147180A1BB20E340D15311D4C"
DATA "2EA90CF00B0103D9FDF24F4999D099F0EB0312002612ED770B14B8838408B1E19806A1368C0BA7EC9C173A0EBD02434C032FAFF0BF05D001C228101D5124F06FF200370A8693"
DATA "0708724829090BE1C676F30C05100507F064FAC38A194F3D6168BF0852230B0640E278FB6FCF764EE30A0B3B1A1AF002026F2B650C2D747F5F9F09F0EA0478F05E0B2E1C4F0F"
DATA "CAFFAFCC7B01F06C0904C004481C04200C1CDD39D7A065090203F0F812025B6A97CE8402900400644E819C10046010B00476AC7F659401A3AA8A01B9EC7C810C0051E0AD09C3"
DATA "4C1B00256FD4A0850F0201E0000221D60A04E8C8AFED0050C517DFACE204E8B0E91005BED9A46205EA071901F78EC5827D1E40012A029BEDD9B2070610D3074D2CCD91C24C14"
DATA "7800DBA9E4437EF807F0CA104007B26E20A7FC2F2E7482ED0A41F007AE95906E150BFBEB0423EC602EDC0A34827557FB5D23BB85748324279A77402E3B8B6C782640441D53BE"
DATA "276E0EB629C04F656FDB340C4D49B345270ECE4283886EF71B641742042351800000004000200100FF000000000000000000807C2408010F85B901000060BE00C000108DBE00"
DATA "50FFFF57EB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E80372"
DATA "0DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73"
DATA "E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9EB0200008A07472C"
DATA "E83C0177F7803F0A75F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE000001008B0709C0743C8B5F048D84300020010001F35083C708FF96"
DATA "3C200100958A074708C074DC89F95748F2AE55FF964020010009C07407890383C304EBE16131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C010"
DATA "86C401F08903EBE2240FC1E010668B0783C702EBE28BAE442001008DBE00F0FFFFBB0010000050546A045357FFD58D871F02000080207F8060287F585054505357FFD558618D"
DATA "4424806A0039C475FA83EC80E93CEDFEFF0000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000080E9001040CB001003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C3001003C3001000000000000000000"
DATA "0000000069300100543001000000000000000000000000000000000000000000743001008230010092300100A2300100B030010000000000BE300100000000004B45524E454C"
DATA "33322E444C4C0056434F4D5039302E444C4C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F74656374000056697274"
DATA "75616C416C6C6F6300005669727475616C467265650000005F76636F6D705F666F726B0000000000256F735600000000FE300100010000000100000001000000F4300100F830"
DATA "0100FC300100501100000E31010000007072696D65636F756E74342E646C6C007072696D65636F756E74000000000020010010000000CD38C83ACC3A00000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
DATA "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
CLOSE #1
END

※失礼いたしました。一部が欠けておりましたので分割しました。
 

windows 10

 投稿者:iitaka  投稿日:2015年12月22日(火)13時34分13秒
  windows 10 ではグラフィックが表示されません
どうしたらよいでしょうか
教えてください

 

Re: windows 10

 投稿者:島村1243  投稿日:2015年12月24日(木)08時39分52秒
  iitakaさんへのお返事です。

> windows 10 ではグラフィックが表示されません
> どうしたらよいでしょうか
> 教えてください

Windows10は「Hyper-V」という仮想マシン機能(Windows10のマシンに、例えばWindows7或いは8をインストールできる)を持っているので、Windows7或いはWindows8のOSインストールディスクをお持ちなら、これをHyper-V機能を使ってインストールし、このWindows7或いは8のOS上にBASIC.exeをインストールしてBASICを使用する、という方法があるようです。

「Hyper-V」の詳しい説明は
「http://ascii.jp/elem/000/000/913/913933/」
と
「http://i-think-it.net/windows10-hyper-v-1/」
に出ていました。
 

Re: windows 10

 投稿者:白石 和夫  投稿日:2015年12月24日(木)11時02分36秒
  > No.3968[元記事へ]

iitakaさんへのお返事です。

> windows 10 ではグラフィックが表示されません
> どうしたらよいでしょうか
> 教えてください
>

Windows 10 Home 64ビット版
Intel Core i3-4170
Intel(R) HD Graphics 4400
だと問題ないようです。
1機限りのテストなので、情報を集めてみる必要があると思います。
この掲示板を見た方からの投稿をお願いします。

以前、Windows Vistaで Aero を無効化すると描画が正常に行われない不具合があり、
互換性オプションの描画タブに
Vista Non-Aero 障害対策
を追加しています。
描画に不具合があるときは、こちらの試行もお願いします。



 

Re: windows 10

 投稿者:白石 和夫  投稿日:2015年12月26日(土)20時52分18秒
  > No.3970[元記事へ]

Windows8のPCをWin10にアップグレードしてみました。
OSは64ビット,CPUはcelelon,
グラフィックスはIntel HD Graphics(統合グラフィックス)ですが,
問題なく動くようです。
 

 戻る