Probem 145は前に解いたので(Problem 145 - もうカツ丼でいいよな)146。
Problem 146 - Project Euler
, , , , , が連続する素数となる最小のnは10である。100万未満でそのようなnの総和は1242490になる。
1億5千万未満についてこのようなnの総和を求めよ。
ダメダメ。そもそも素数判定確率的だし。「1億未満の〜」とか出てくるとどうも毎回ダメな感じになってしまう。
library(gmp) limit <- 150000000 ans <- 0 nlist <- seq(10, limit, by=10) nlist <- nlist[nlist %% 30 == 10 | nlist %% 30 == 20] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 1, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 3, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 7, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 9, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 13, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] sieve <- logical(length(nlist)) for(i in 1:length(sieve)){ if(isprime(as.bigz(nlist[i])^2 + 27, reps=1) != 0) sieve[i] <- TRUE } nlist <- nlist[sieve] ans <- 0 for(i in nlist){ k <- as.bigz(i^2) + 1 if(isprime(k)){ k <- nextprime(k) if(k == as.bigz(i^2) + 3){ k <- nextprime(k) if(k == as.bigz(i^2) + 7){ k <- nextprime(k) if(k == as.bigz(i^2) + 9){ k <- nextprime(k) if(k == as.bigz(i^2) + 13){ k <- nextprime(k) if(k == as.bigz(i^2) + 27){ ans <- ans + i } } } } } } } ans