#----------- # 既約ピタゴラス数のbの値で、三角数の4倍となるリスト(はじめてのもの)を抽出 #----------- # 環境変数、関数、初期変数の設定 sfold="D:\\R\\pythagorean_theorem" #データ保存フォルダ rfold1="D:\\R\\triangular_number" #三角数の保存フォルダ rfile1=paste(rfold1,"\\tnlist10000.txt",sep="") #三角数リスト rfold2=sfold #ピタゴラス数の保存フォルダ rfile2=paste(rfold2,"\\ptn_list_s3-1000.txt",sep="") lfile="log2.txt" #ログファイル名 sfile=paste(sfold,"\\ptn_eq_4tn_list.txt",sep="") #保存ファイル名 options(scipen=100) #指数表記回避 #---------- setwd(sfold) #カレントディレクトリの変更 starttime<-proc.time() #経過時間の初期値 #データの読み込み arr_tn<-read.csv(rfile1,header=FALSE) #三角数データの格納 maxi=nrow(arr_tn) #データ数 cat("三角数のデータ数=",maxi,"\n") arr_ptn<-read.csv(rfile2,header=TRUE) #ピタゴラス数データの格納 #print(arr_ptn) maxi2=nrow(arr_ptn) #データ数 cat("ピタゴラス数のデータ数=",maxi2,"\n") colnames(arr_ptn) <- c("s","t","a","b","c","dummy") #列の名前の付替え(これをしないとエラーになる) #print(arr_ptn) arr_ptn<-arr_ptn[order(arr_ptn$b),] #bで並べ替え #print(arr_ptn) sink(lfile) #ログファイルの初期化 sink() sink(sfile) #保存ファイルの初期化 cat("tn,4tn,s,t,a=st,b=(s^2-t^2)/2,c=(s^2+t^2)/2,dummy\n") sink() cat("tn,4tn,s,t,a=st,b=(s^2-t^2)/2,c=(s^2+t^2)/2,dummy\n") i=1 #三角数配列番号用 j=1 #ピタゴラス数配列番号用 while(i4*arr_tn[i,1]){ #三角数の4倍がピタゴラス数のbより大きかったら次のデータに写る break }else if(arr_ptn[j,4]==4*arr_tn[i,1]){ #三角数の4倍とピタゴラス数のbが一致したら保存 flag=1 sink(sfile,append=TRUE) cat(arr_tn[i,1],4*arr_tn[i,1],arr_ptn[j,1],arr_ptn[j,2],arr_ptn[j,3],arr_ptn[j,4],arr_ptn[j,5],"\n",sep=",") sink() cat(arr_tn[i,1],4*arr_tn[i,1],arr_ptn[j,1],arr_ptn[j,2],arr_ptn[j,3],arr_ptn[j,4],arr_ptn[j,5],"\n",sep=",") } j=j+1 #次のピタゴラス数に移る } if(flag==0){ #一致するピタゴラス数がない場合 sink(sfile,append=TRUE) cat(arr_tn[i,1],4*arr_tn[i,1],"nothing\n",sep=",") sink() cat(arr_tn[i,1],4*arr_tn[i,1],"nothing\n",sep=",") } if(j>=maxi2){ #ピタゴラス数のデータ数を超えたら探索終了 break } #cat(arr_tn[i,1],"\n") i=i+1 } rm(list=ls(all=TRUE)) #全体の初期化