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