#----------- # abc-tripleの根基(radical)とqのリストを生成、テキスト形式で保存 #----------- # 環境変数、関数、初期変数の設定 ffold="D:\\R\\function" #関数保存フォルダ ffile=paste(ffold,"\\function_rad.R",sep="") #根基算出関数 ffile2=paste(ffold,"\\function_gcd.R",sep="") #最大公約数出力関数 rfold="D:\\R\\prime_number" #素数データ保存フォルダ rfile=paste(rfold,"\\primelist1e+07.txt",sep="") #素数ファイル sfold="D:\\R\\abc" #データ保存フォルダ start_b=2 #bの探索範囲の初期値 end_b=100 #bの探索範囲の最終値 jud_num=(end_b-start_b)/10 #log保存用 jud_num=floor(jud_num) #log保存間隔 sfile=paste(sfold,"\\abc-triple_list_",start_b,"-",end_b,".txt",sep="") #保存ファイル名 lfile=paste("log_abc-triple_",start_b,"-",end_b,".txt",sep="") #ログファイル名 options(scipen=100) #指数表記回避 #---------- # 関数・既存データの読み込み source(ffile) #rad関数ファイル source(ffile2) #gcd関数ファイル arr_pn<-read.csv(rfile,header=FALSE) #素数データの格納 maxi=nrow(arr_pn) #データ数 #---------- setwd(sfold) #カレントディレクトリの変更 sink(lfile) #ログファイルの初期化 sink() sink(sfile) #保存ファイルの初期化 cat("a,b,c,abc,rad(abc),q,dummy\n") sink() cat("a,b,c,abc,rad(abc),q,dummy\n") starttime<-proc.time() #経過時間の初期値 jud_i=1 #log保存間隔用 for(b in start_b:end_b){ #まずはbの探索範囲を決める if(b<2){ #bが2より小さい場合は次に移る next } for(a in 1:(b-1)){ #aの範囲を決める(a1000000000000000){#大きすぎる数字になった場合はループを抜ける cat("numが1000000000000000より大きい数字\n") break } rad_num=rad(num,arr_pn,maxi) q=log(c)/log(rad_num) sink(sfile,append=TRUE) #保存 cat(a,b,c,num,rad_num,q,"\n",sep=",") sink() } } if(b==jud_i*jud_num){ #log保存の位置の場合 jud_i=jud_i+1 endtime<-proc.time() keika=(endtime-starttime)[3] sink(lfile,append=TRUE) cat("b=",b," 経過時間=",keika,"\n",sep="") sink() cat("b=",b," 経過時間=",keika,"\n",sep="") } } rm(list=ls(all=TRUE)) #全体の初期化