: Maxima数学A自習教材開発
教材の概要
3 整数の性質 2)ユークリッドの互除法
 4.ユークリッドの互除法
 5.1次不定方程式
 302.補充問題

Maxima数学I自習教材試行報告用紙(Word)
Maxima数学I自習教材試行報告用紙(PDF)

: 教材の概要

活動時間 
 自宅での予習か授業初めの5分程度
活動概要
 1 タブレット等を用いてトライ
  1) 教科書の該当ページを開く
  2) このWebページを開く
  3) Maxima on lineのWebページを開く
  4) 該当コマンドをMaximaOnLineにコピペして、実行
 2 自分なりの感触、着想
  1) 自分なりに、実行結果を見て、気づいたり感じたりすることがないか、考えてみる。
  2) ワークシートに、考えてみたこと(意見・質問・感じたこと)を書く
  3) ワークシートを、事前に提出する場合は、課題提出フォームを使うこと。
 3 問題の雰囲気を2で感じてから、授業へ
  1) 班活動などで自分の考えを仲間に伝える
  2) 仲間の考えを受け止める
  3) 筋が通って、見通しのよい解法、数学的な論点をうまく処理した解法をまとめる


http://www.ac.cyberhome.ne.jp/~konoha/KNOPPIX/MaximaBook.pdf
参照テキスト
 数研出版新編数学A

: 第3章整数の性質
 第2節 ユークリッドの互除法
  4.ユークリッド互除法

   A. ユークリッドの互除法
◆コマンド番号401
●ユークリッドの互除法
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"例9 練習18 401 731,301の最大公約数"/*(◆修正部分1)*/$
KOUSATU:"ユークリッドの互除法とは、整除実行後に、除数を被除数に、余りを除数に入れ替えて、整除を繰り返すことである。余りが0になったとき、除数が最初の2数の最大公約数だから、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$

n1:731;n2:301;n:n1;n0:n2;r:1/*(◆修正部分2)*/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r);
anl:[n,n0,"の最大公約数",n1];

KAITOU:anl/*[n,n0,"の最大公約数",n1]解答*//**/$
SUJIMITI:"整除で余りが0になったときの除数(  )が、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"商と余りの確認"/**/$
kknn:[gcm(n,n0)]/**/;
print([kknn,"<<< ",n,n0,"の最大公約数が",n1])/**/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例9 練習18 401 1463,304の最大公約数"/*(◆修正部分1)*/$
n1:1463;n2:304;n:n1;n0:n2;r:1/*(◆修正部分2)*/;


   B. 互除法の活用
◆コマンド番号402
●24x+17y=1を満たすx、y
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"例10 練習19 402 24*x+17*y=1を満たすx,yは"/*(◆修正部分1)*/$
KOUSATU:"24と17は互いに素だから、24*x+17*y=1を満たすx,yをユークリッドの互除法によって、・・・"/*(◆修正部分1)*/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$

e:24*x+17*y=1;n1:coeff(lhs(e),x,1);n2:coeff(lhs(e),y,1);C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/*(◆修正部分2)*/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r,anl0:endcons([q,r],anl0));
print(anl0);anl1:[anl0[1][2],anl0[2][2]];
for i:3 thru length(anl0)-1 do(
/**/anl1:endcons(anl1[i-2]-anl1[i-1]*anl0[i][1],anl1));
print(anl1);
anl:[expand(last(anl1)*C/gcm(n,n0))];

KAITOU:anl/*解答*//**/$
SUJIMITI:"最初の2数をN1,N2として、互除法の余りを最大公約数まで追跡すると(  )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[subst([N1=n,N2=n0],anl[1])]/**/;
print([kknn,"<<< ",anl[1]])/**/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例10 練習19 402 26*x+11*y=5を満たすx,yは"/*(◆修正部分1)*/$
KOUSATU:"26と11は互いに素だから、26*x+11*y=1を満たすx,yを5倍する。ユークリッドの互除法によって、・・・"/*(◆修正部分1)*/;
e:26*x+11*y=5;n1:coeff(lhs(e),x,1);n2:coeff(lhs(e),y,1);C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/*(◆修正部分2)*/;


: 5.1次不定方程式
   A. a*x+b*y=1の整数解
◆コマンド番号501
●有限小数
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"例題7 練習20 501 3*x+4*y=1の整数解のすべては"/*(◆修正部分1)*/$
KOUSATU:"ユークリッドの互除法により、解を1組x1,y1見つけて、x=x1+X,y=y1+Yとおくと、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)/*素因数分解リストから数*/$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$
jtF(fal,o):=block([i,iM],iM:length(fal),tF:[false,0],print([fal,o,iM,tF,"01"]),
/**/for i:1 thru iM do(if fal[i]=o then tF:[true,i]),print([fal,o,tF[2],tF,"01+"]),tF:tF)$
jF(f):=block([Num,Denom,i,j,fal,ful,fol,ful0,fo,fu,o,jtf],Num:num(f),Denom:denom(f),i:0,ful:[],fol:[],ful0:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:0,fol:endcons(fo,fol),fal:[fu],
/**/while fu>0 and 10>i do (q:quotient(fu*10,Denom),o:mod(fu*10,Denom),print([i,fal,o,"02"]),jtf:jtF(fal,o),
/**//**/if jtf[1]=false then
/**//**//**//**/(fal:endcons(o,fal),ful:endcons(q,ful),fu:mod(fu*10,Denom),i:i+1,print([i,o,fu,fal,ful,"03"]))
/**//**//**/else (ful:endcons(q,ful),
/**//**//**//**/for j:1 thru jtf[2]-1 do(ful0:endcons(ful[j],ful0)),
/**//**//**//**/ful0:endcons("'",ful0),
/**//**//**//**/for j:jtf[2] thru length(ful) do(ful0:endcons(ful[j],ful0)),i:11)),
/**/if jtf[1] then(ful0:endcons("'",ful0),print([i,ful0,"04"]),fl0:[fol,".",ful0])
/**//**/else fl0:[fol,".",ful])/*分数から(循環)小数*/$
mF(f,n):=block([Num,Denom,i,fo,fu,fol,ful,q,fl0],Num:num(f),Denom:denom(f),ful:[],fol:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:1,fol:endcons(fo,fol),
/**/while fu>0 and n>=i do (q:quotient(fu*10,Denom),
/**//**/ful:endcons(q,ful),fu:mod(fu*10,Denom),print([i,o,fu,ful,"03"]),i:i+1),
/**/fl0:[fol,".",ful])$
fF(fl3):=block([iM,n1,i,n,js,hjun,jun,jk,vp,vS,vl,vSS],iM:length(fl3),n1:0,i:1,
/**/while iM>i do(
/**//**/if fl3[i]#"'" then (n1:n1+fl3[i]/10^i,print([i,n1]),i:i+1) else (n:n1,n1:0,js:i,i:i+1)),
/**/(n:n,numer),(n1:n1*10,numer),print(n,n1,js,iM-2),
/**/hjun:n,jun:fix(n1*10^(iM-2)),js:-js,jk:iM-1+js,
/**/vp:10^jk*V-V=(hjun+10^(js+1)*jun*10^(-jk))*10^jk-hjun,
/**/vS:solve(vp,V) /* "分数表記" */,
/**/(vSS:rhs(vS[1]),numer) /* "小数表記で確認すると" */,vl:[vp,vS,vSS])$
jmF(f):=block([Num,Denom,i,iM,jm,fc],Denom:denom(f),fc:fct(Denom)[2],iM:length(fc),jm:"有限小数",
/**/for i thru iM do(if fc[i][1]#2 and fc[i][1]#5 then jm:"循環小数"),
/**/jm:jm)$

e:3*x+4*y=1;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/**/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r,anl0:endcons([q,r],anl0));
print(anl0);anl1:[anl0[1][2],anl0[2][2]];
for i:3 thru length(anl0)-1 do(
/**/anl1:endcons(anl1[i-2]-anl1[i-1]*anl0[i][1],anl1));
print(anl1);
anl:[expand(last(anl1)*C/gcm(n,n0))];
x1:coeff(anl[1],N1,1)*abs(coeff(lhs(e),x,1))/coeff(lhs(e),x,1);y1:coeff(anl[1],N2,1)*abs(coeff(lhs(e),y,1))/coeff(lhs(e),y,1);
xyl:[x=x1+X,y=y1+Y];e1:expand(subst(xyl,e)-rhs(e));
X1:coeff(lhs(e1),Y,1)*k;Y1:-coeff(lhs(e1),X,1)*k;
xyl:subst([X=X1,Y=Y1],xyl);

KAITOU:[xyl,"(k 整数)"]/*解答*//**/$
SUJIMITI:"解を1組はx1=( )、y1=( )で、x=x1+X,y=y1+Yとおくと、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[expand(subst(xyl,lhs(e))),"<<<",lhs(e),"に",xyl,"を代入すると"];
print(kknn)/*小数を確認*/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例題7 練習20 501 5*x-7*y=1の整数解のすべては"/*(◆修正部分1)*/$
e:5*x-7*y=1;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;


   B. a*x+b*y=Cの整数解
◆コマンド番号502
●a*x+b*y=Cの整数解
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"例題8 練習21 502 34*x+29*y=3の整数解のすべては"/*(◆修正部分1)*/$
KOUSATU:"ユークリッドの互除法により、解を1組x1,y1見つけて、x=x1+X,y=y1+Yとおくと、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)/*素因数分解リストから数*/$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$
jtF(fal,o):=block([i,iM],iM:length(fal),tF:[false,0],print([fal,o,iM,tF,"01"]),
/**/for i:1 thru iM do(if fal[i]=o then tF:[true,i]),print([fal,o,tF[2],tF,"01+"]),tF:tF)$
jF(f):=block([Num,Denom,i,j,fal,ful,fol,ful0,fo,fu,o,jtf],Num:num(f),Denom:denom(f),i:0,ful:[],fol:[],ful0:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:0,fol:endcons(fo,fol),fal:[fu],
/**/while fu>0 and 10>i do (q:quotient(fu*10,Denom),o:mod(fu*10,Denom),print([i,fal,o,"02"]),jtf:jtF(fal,o),
/**//**/if jtf[1]=false then
/**//**//**//**/(fal:endcons(o,fal),ful:endcons(q,ful),fu:mod(fu*10,Denom),i:i+1,print([i,o,fu,fal,ful,"03"]))
/**//**//**/else (ful:endcons(q,ful),
/**//**//**//**/for j:1 thru jtf[2]-1 do(ful0:endcons(ful[j],ful0)),
/**//**//**//**/ful0:endcons("'",ful0),
/**//**//**//**/for j:jtf[2] thru length(ful) do(ful0:endcons(ful[j],ful0)),i:11)),
/**/if jtf[1] then(ful0:endcons("'",ful0),print([i,ful0,"04"]),fl0:[fol,".",ful0])
/**//**/else fl0:[fol,".",ful])/*分数から(循環)小数*/$
mF(f,n):=block([Num,Denom,i,fo,fu,fol,ful,q,fl0],Num:num(f),Denom:denom(f),ful:[],fol:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:1,fol:endcons(fo,fol),
/**/while fu>0 and n>=i do (q:quotient(fu*10,Denom),
/**//**/ful:endcons(q,ful),fu:mod(fu*10,Denom),print([i,o,fu,ful,"03"]),i:i+1),
/**/fl0:[fol,".",ful])$
fF(fl3):=block([iM,n1,i,n,js,hjun,jun,jk,vp,vS,vl,vSS],iM:length(fl3),n1:0,i:1,
/**/while iM>i do(
/**//**/if fl3[i]#"'" then (n1:n1+fl3[i]/10^i,print([i,n1]),i:i+1) else (n:n1,n1:0,js:i,i:i+1)),
/**/(n:n,numer),(n1:n1*10,numer),print(n,n1,js,iM-2),
/**/hjun:n,jun:fix(n1*10^(iM-2)),js:-js,jk:iM-1+js,
/**/vp:10^jk*V-V=(hjun+10^(js+1)*jun*10^(-jk))*10^jk-hjun,
/**/vS:solve(vp,V) /* "分数表記" */,
/**/(vSS:rhs(vS[1]),numer) /* "小数表記で確認すると" */,vl:[vp,vS,vSS])$
jmF(f):=block([Num,Denom,i,iM,jm,fc],Denom:denom(f),fc:fct(Denom)[2],iM:length(fc),jm:"有限小数",
/**/for i thru iM do(if fc[i][1]#2 and fc[i][1]#5 then jm:"循環小数"),
/**/jm:jm)$

e:34*x+29*y=3;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/**/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r,anl0:endcons([q,r],anl0));
print(anl0);anl1:[anl0[1][2],anl0[2][2]];
for i:3 thru length(anl0)-1 do(
/**/anl1:endcons(anl1[i-2]-anl1[i-1]*anl0[i][1],anl1));
print(anl1);
anl:[expand(last(anl1)*C/gcm(n,n0))];
x1:coeff(anl[1],N1,1)*abs(coeff(lhs(e),x,1))/coeff(lhs(e),x,1);y1:coeff(anl[1],N2,1)*abs(coeff(lhs(e),y,1))/coeff(lhs(e),y,1);
xyl:[x=x1+X,y=y1+Y];e1:expand(subst(xyl,e)-rhs(e));
X1:coeff(lhs(e1),Y,1)*k;Y1:-coeff(lhs(e1),X,1)*k;
xyl:subst([X=X1,Y=Y1],xyl);

KAITOU:[xyl,"(k 整数)"]/*解答*//**/$
SUJIMITI:"解を1組はx1=( )、y1=( )で、x=x1+X,y=y1+Yとおくと、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[expand(subst(xyl,lhs(e))),"<<<",lhs(e),"に",xyl,"を代入すると"];
print(kknn)/*小数を確認*/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例題8 練習21 502 45*x+32*y=4の整数解のすべては"/*(◆修正部分1)*/$
e:45*x+32*y=4;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;


◆コマンド番号503
●a*x+b*y=Cの整数解
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"応用例題2 練習22 503 11で割ると1余り、5で割ると4余る自然数で、3桁の最小のものは"/*(◆修正部分1)*/$
KOUSATU:"商をそれぞれx,yと置いて等置し、ax+by=cと変形し、ユークリッドの互除法により、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)/*素因数分解リストから数*/$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$
jtF(fal,o):=block([i,iM],iM:length(fal),tF:[false,0],print([fal,o,iM,tF,"01"]),
/**/for i:1 thru iM do(if fal[i]=o then tF:[true,i]),print([fal,o,tF[2],tF,"01+"]),tF:tF)$
jF(f):=block([Num,Denom,i,j,fal,ful,fol,ful0,fo,fu,o,jtf],Num:num(f),Denom:denom(f),i:0,ful:[],fol:[],ful0:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:0,fol:endcons(fo,fol),fal:[fu],
/**/while fu>0 and 10>i do (q:quotient(fu*10,Denom),o:mod(fu*10,Denom),print([i,fal,o,"02"]),jtf:jtF(fal,o),
/**//**/if jtf[1]=false then
/**//**//**//**/(fal:endcons(o,fal),ful:endcons(q,ful),fu:mod(fu*10,Denom),i:i+1,print([i,o,fu,fal,ful,"03"]))
/**//**//**/else (ful:endcons(q,ful),
/**//**//**//**/for j:1 thru jtf[2]-1 do(ful0:endcons(ful[j],ful0)),
/**//**//**//**/ful0:endcons("'",ful0),
/**//**//**//**/for j:jtf[2] thru length(ful) do(ful0:endcons(ful[j],ful0)),i:11)),
/**/if jtf[1] then(ful0:endcons("'",ful0),print([i,ful0,"04"]),fl0:[fol,".",ful0])
/**//**/else fl0:[fol,".",ful])/*分数から(循環)小数*/$
mF(f,n):=block([Num,Denom,i,fo,fu,fol,ful,q,fl0],Num:num(f),Denom:denom(f),ful:[],fol:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:1,fol:endcons(fo,fol),
/**/while fu>0 and n>=i do (q:quotient(fu*10,Denom),
/**//**/ful:endcons(q,ful),fu:mod(fu*10,Denom),print([i,o,fu,ful,"03"]),i:i+1),
/**/fl0:[fol,".",ful])$
fF(fl3):=block([iM,n1,i,n,js,hjun,jun,jk,vp,vS,vl,vSS],iM:length(fl3),n1:0,i:1,
/**/while iM>i do(
/**//**/if fl3[i]#"'" then (n1:n1+fl3[i]/10^i,print([i,n1]),i:i+1) else (n:n1,n1:0,js:i,i:i+1)),
/**/(n:n,numer),(n1:n1*10,numer),print(n,n1,js,iM-2),
/**/hjun:n,jun:fix(n1*10^(iM-2)),js:-js,jk:iM-1+js,
/**/vp:10^jk*V-V=(hjun+10^(js+1)*jun*10^(-jk))*10^jk-hjun,
/**/vS:solve(vp,V) /* "分数表記" */,
/**/(vSS:rhs(vS[1]),numer) /* "小数表記で確認すると" */,vl:[vp,vS,vSS])$
jmF(f):=block([Num,Denom,i,iM,jm,fc],Denom:denom(f),fc:fct(Denom)[2],iM:length(fc),jm:"有限小数",
/**/for i thru iM do(if fc[i][1]#2 and fc[i][1]#5 then jm:"循環小数"),
/**/jm:jm)$

e1:11*x+1;e2:5*y+4;e:e1-e2-subst([x=0,y=0],e1-e2)=-subst([x=0,y=0],e1-e2);n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/**/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r,anl0:endcons([q,r],anl0));
print(anl0);anl1:[anl0[1][2],anl0[2][2]];
for i:3 thru length(anl0)-1 do(
/**/anl1:endcons(anl1[i-2]-anl1[i-1]*anl0[i][1],anl1));
print(anl1);
anl:[expand(last(anl1)*C/gcm(n,n0))];
x1:coeff(anl[1],N1,1)*abs(coeff(lhs(e),x,1))/coeff(lhs(e),x,1);y1:coeff(anl[1],N2,1)*abs(coeff(lhs(e),y,1))/coeff(lhs(e),y,1);
xyl:[x=x1+X,y=y1+Y];e3:expand(subst(xyl,e)-rhs(e));
X1:coeff(lhs(e3),Y,1)*k;Y1:-coeff(lhs(e3),X,1)*k;
xyl:subst([X=X1,Y=Y1],xyl);
e4:subst(xyl,e1);el:fourier_elim( [e4>99], [k]);K:fix(rhs(el[1]));e4:subst(k=K,e4)/*(◆修正部分3)*/;

KAITOU:[e4,"(k 整数)"]/*解答*//**/$
SUJIMITI:"解を1組はx1=( )、y1=( )で、x=x1+X,y=y1+Yとおくと、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[e4,"を11で割ると",mod(e4,11),"余り、5で割ると",mod(e4,5),"余る"]/*(◆修正部分4)*/;
print(kknn)/*それぞれの余りを確認*/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"応用例題2 練習22 503 17で割ると7余り、12で割ると10余る自然数で、4桁の最小のものは"/*(◆修正部分1)*/$
e1:17*x+7;e2:12*y+10;e:e1-e2-subst([x=0,y=0],e1-e2)=-subst([x=0,y=0],e1-e2);n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;
e4:subst(xyl,e1);el:fourier_elim( [e4>999], [k]);K:fix(rhs(el[1]));e4:subst(k=K,e4)/*(◆修正部分3)*/;
kknn:[e4,"を17で割ると",mod(e4,17),"余り、12で割ると",mod(e4,12),"余る"]/*(◆修正部分4)*/;


:    補充問題
◆コマンド番号30201
●a*x+b*y=Cの整数解
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"補充問題2 30201 33*x-19*y=2の整数解のすべては"/*(◆修正部分1)*/$
KOUSATU:"ユークリッドの互除法により、解を1組x1,y1見つけて、x=x1+X,y=y1+Yとおくと、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)/*素因数分解リストから数*/$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$
jtF(fal,o):=block([i,iM],iM:length(fal),tF:[false,0],print([fal,o,iM,tF,"01"]),
/**/for i:1 thru iM do(if fal[i]=o then tF:[true,i]),print([fal,o,tF[2],tF,"01+"]),tF:tF)$
jF(f):=block([Num,Denom,i,j,fal,ful,fol,ful0,fo,fu,o,jtf],Num:num(f),Denom:denom(f),i:0,ful:[],fol:[],ful0:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:0,fol:endcons(fo,fol),fal:[fu],
/**/while fu>0 and 10>i do (q:quotient(fu*10,Denom),o:mod(fu*10,Denom),print([i,fal,o,"02"]),jtf:jtF(fal,o),
/**//**/if jtf[1]=false then
/**//**//**//**/(fal:endcons(o,fal),ful:endcons(q,ful),fu:mod(fu*10,Denom),i:i+1,print([i,o,fu,fal,ful,"03"]))
/**//**//**/else (ful:endcons(q,ful),
/**//**//**//**/for j:1 thru jtf[2]-1 do(ful0:endcons(ful[j],ful0)),
/**//**//**//**/ful0:endcons("'",ful0),
/**//**//**//**/for j:jtf[2] thru length(ful) do(ful0:endcons(ful[j],ful0)),i:11)),
/**/if jtf[1] then(ful0:endcons("'",ful0),print([i,ful0,"04"]),fl0:[fol,".",ful0])
/**//**/else fl0:[fol,".",ful])/*分数から(循環)小数*/$
mF(f,n):=block([Num,Denom,i,fo,fu,fol,ful,q,fl0],Num:num(f),Denom:denom(f),ful:[],fol:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:1,fol:endcons(fo,fol),
/**/while fu>0 and n>=i do (q:quotient(fu*10,Denom),
/**//**/ful:endcons(q,ful),fu:mod(fu*10,Denom),print([i,o,fu,ful,"03"]),i:i+1),
/**/fl0:[fol,".",ful])$
fF(fl3):=block([iM,n1,i,n,js,hjun,jun,jk,vp,vS,vl,vSS],iM:length(fl3),n1:0,i:1,
/**/while iM>i do(
/**//**/if fl3[i]#"'" then (n1:n1+fl3[i]/10^i,print([i,n1]),i:i+1) else (n:n1,n1:0,js:i,i:i+1)),
/**/(n:n,numer),(n1:n1*10,numer),print(n,n1,js,iM-2),
/**/hjun:n,jun:fix(n1*10^(iM-2)),js:-js,jk:iM-1+js,
/**/vp:10^jk*V-V=(hjun+10^(js+1)*jun*10^(-jk))*10^jk-hjun,
/**/vS:solve(vp,V) /* "分数表記" */,
/**/(vSS:rhs(vS[1]),numer) /* "小数表記で確認すると" */,vl:[vp,vS,vSS])$
jmF(f):=block([Num,Denom,i,iM,jm,fc],Denom:denom(f),fc:fct(Denom)[2],iM:length(fc),jm:"有限小数",
/**/for i thru iM do(if fc[i][1]#2 and fc[i][1]#5 then jm:"循環小数"),
/**/jm:jm)$

e:33*x-19*y=2;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;
n:n1;n0:n2;r:1;anl0:[[0,N1],[0,N2]]/**/;
while r>0 do(
/**/q:quotient(n1,n2),r:mod(n1,n2),print([n1,"=",n2,"*",q,"+",r]),n1:n2,n2:r,anl0:endcons([q,r],anl0));
print(anl0);anl1:[anl0[1][2],anl0[2][2]];
for i:3 thru length(anl0)-1 do(
/**/anl1:endcons(anl1[i-2]-anl1[i-1]*anl0[i][1],anl1));
print(anl1);
anl:[expand(last(anl1)*C/gcm(n,n0))];
x1:coeff(anl[1],N1,1)*abs(coeff(lhs(e),x,1))/coeff(lhs(e),x,1);y1:coeff(anl[1],N2,1)*abs(coeff(lhs(e),y,1))/coeff(lhs(e),y,1);
xyl:[x=x1+X,y=y1+Y];e1:expand(subst(xyl,e)-rhs(e));
X1:coeff(lhs(e1),Y,1)*k;Y1:-coeff(lhs(e1),X,1)*k;
xyl:subst([X=X1,Y=Y1],xyl);

KAITOU:[xyl,"(k 整数)"]/*解答*//**/$
SUJIMITI:"解を1組はx1=( )、y1=( )で、x=x1+X,y=y1+Yとおくと、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[expand(subst(xyl,lhs(e))),"<<<",lhs(e),"に",xyl,"を代入すると"];
print(kknn)/*小数を確認*/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例題8 練習21 502 30*x+17*y=5の整数解のすべては"/*(◆修正部分1)*/$
e:30*x+17*y=5;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;


◆コマンド番号30202
●コラム
●●●●●●●●●●●●●●●●
kill(all) /**/$
MONDAI:"コラム 31897の素因数分解は"/*(◆修正部分1)*/$
KOUSATU:"2から順に自然数で割ってゆくと、・・・"/**/;

KANSUU:"";
unf(list):=block([i,iM,p],iM:length(list),p:1,
/**/for i:1 thru iM step 2 do(p:p*list[i]^list[i+1]),p:p)/*素因数分解リストから数*/$
fct(n):=block([la,l2,l3,i,pw],la:[],l2:[],l3:[],i:2,
/**/while n#1 do(if mod(n,i)=0 then (n:n/i,la:endcons(i,la)) else i:i+1),la:endcons(0,la)/*素因数list1、最後0*/,
/**/if length(la)=2 then l2:[la[1],1] else(pw:1,
/**//**/for i:2 thru length(la) do(if la[i]=la[i-1] then (pw:pw+1) else (l2:append(l2,[la[i-1],pw]),pw:1))),
/**/for i:1 thru length(l2) step 2 do(l3:endcons([l2[i],"^",l2[i+1]],l3)),l3:[l2,l3])/*[素因数list2,素因数分解]*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*listから順列作成、スイッチは、1324>>sw="N",1234>>sw="G",4321>>sw="L",1122>>sw="A"*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))$
jtF(fal,o):=block([i,iM],iM:length(fal),tF:[false,0],print([fal,o,iM,tF,"01"]),
/**/for i:1 thru iM do(if fal[i]=o then tF:[true,i]),print([fal,o,tF[2],tF,"01+"]),tF:tF)$
jF(f):=block([Num,Denom,i,j,fal,ful,fol,ful0,fo,fu,o,jtf],Num:num(f),Denom:denom(f),i:0,ful:[],fol:[],ful0:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:0,fol:endcons(fo,fol),fal:[fu],
/**/while fu>0 and 10>i do (q:quotient(fu*10,Denom),o:mod(fu*10,Denom),print([i,fal,o,"02"]),jtf:jtF(fal,o),
/**//**/if jtf[1]=false then
/**//**//**//**/(fal:endcons(o,fal),ful:endcons(q,ful),fu:mod(fu*10,Denom),i:i+1,print([i,o,fu,fal,ful,"03"]))
/**//**//**/else (ful:endcons(q,ful),
/**//**//**//**/for j:1 thru jtf[2]-1 do(ful0:endcons(ful[j],ful0)),
/**//**//**//**/ful0:endcons("'",ful0),
/**//**//**//**/for j:jtf[2] thru length(ful) do(ful0:endcons(ful[j],ful0)),i:11)),
/**/if jtf[1] then(ful0:endcons("'",ful0),print([i,ful0,"04"]),fl0:[fol,".",ful0])
/**//**/else fl0:[fol,".",ful])/*分数から(循環)小数*/$
mF(f,n):=block([Num,Denom,i,fo,fu,fol,ful,q,fl0],Num:num(f),Denom:denom(f),ful:[],fol:[],
/**/fo:quotient(Num,Denom),fu:mod(Num,Denom),i:1,fol:endcons(fo,fol),
/**/while fu>0 and n>=i do (q:quotient(fu*10,Denom),
/**//**/ful:endcons(q,ful),fu:mod(fu*10,Denom),print([i,o,fu,ful,"03"]),i:i+1),
/**/fl0:[fol,".",ful])$
fF(fl3):=block([iM,n1,i,n,js,hjun,jun,jk,vp,vS,vl,vSS],iM:length(fl3),n1:0,i:1,
/**/while iM>i do(
/**//**/if fl3[i]#"'" then (n1:n1+fl3[i]/10^i,print([i,n1]),i:i+1) else (n:n1,n1:0,js:i,i:i+1)),
/**/(n:n,numer),(n1:n1*10,numer),print(n,n1,js,iM-2),
/**/hjun:n,jun:fix(n1*10^(iM-2)),js:-js,jk:iM-1+js,
/**/vp:10^jk*V-V=(hjun+10^(js+1)*jun*10^(-jk))*10^jk-hjun,
/**/vS:solve(vp,V) /* "分数表記" */,
/**/(vSS:rhs(vS[1]),numer) /* "小数表記で確認すると" */,vl:[vp,vS,vSS])$
jmF(f):=block([Num,Denom,i,iM,jm,fc],Denom:denom(f),fc:fct(Denom)[2],iM:length(fc),jm:"有限小数",
/**/for i thru iM do(if fc[i][1]#2 and fc[i][1]#5 then jm:"循環小数"),
/**/jm:jm)$

n:31897;fctl:fct(n)/*(◆修正部分2)*/;

KAITOU:[fctl,"素因数分解"]/*解答*//**/$
SUJIMITI:"(  )で1回割れ、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、3での整除を現認など、実行者の振り返りを書きこむこと)"$

KAKUNIN:"確認"/**/$
kknn:[unf(fctl[1]),"<<<素因数を掛け合わせると"];
print(kknn)/*小数を確認*/$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"例題8 練習21 502 30*x+17*y=5の整数解のすべては"/*(◆修正部分1)*/$
e:30*x+17*y=5;n1:abs(coeff(lhs(e),x,1));n2:abs(coeff(lhs(e),y,1));C:rhs(e)/*(◆修正部分2)*/;