#----------- # 三角数かつ四角数となるリストを生成、テキスト形式で保存 # ※三角数のリストはあらかじめ用意 #----------- # 環境変数、初期変数の設定 rfold="D:\\R\\triangular_number" #三角数データ保存フォルダ rfile=paste(rfold,"\\tnlist1e+05.txt",sep="") #三角数ファイル #rfile=paste(rfold,"\\tnlist1000.txt",sep="") #三角数ファイル sfold=rfold #データ保存フォルダ sfile="tn_eq_n2_list.txt" #保存ファイル名 lfile="log2.txt" #ログファイル options(scipen=100) #指数表記回避 #---------- setwd(sfold) #カレントディレクトリの変更 arr_tn<-read.csv(rfile,header=FALSE) #三角数データの格納 maxi=nrow(arr_tn) #データ数 cat("三角数のデータ数=",maxi,"\n") viewval=as.integer(maxi/10) #画面表示判定用 i=1 #i番目の三角数 k=1 #n^2用の変数 sink("lfile") #ログファイルの初期化 sink() sink(sfile) #保存ファイルの初期化 cat("三角数T(i)のi,四角数S(k)のk,T(i)=S(k)\n") sink() starttime<-proc.time() #経過時間の初期値 flag<-0 #表示判定用 while(i<=maxi){ #探索範囲 num=k*k #cat(i,",",k,",",num,"\n") if(num==arr_tn[i,1]){ #同値だったら保存 sink(sfile,append=TRUE) cat(i,",",k,",",num,"\n") sink() cat(i,",",k,",",num,"\n") # endtime<-proc.time() # keika=(endtime-starttime)[3] # sink(lfile,append=TRUE) # cat(i,",",k,",",num," 経過時間=",keika,"\n") # sink() i=i+1 k=k+1 flag=1 }else if(num>arr_tn[i,1]){ #n^2の方が大きければ次の素数と比較 i=i+1 }else if(num1000000000000000){ #大きすぎる数字になった場合ループを抜ける cat("1000000000000000より大きい数字\n") break } } rm(list=ls(all=TRUE)) #全体の初期化