R, 156 123 bayt
cat(cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))[scan()])
Süper ilginç bir çözüm. Uygun olanı üzerinde çalışıyorum.
@Giuseppe sayesinde 33 bayt kaydedildi.
R (+ sayılar ve gmp), 198 bayt
function(n,x=unique(gmp::as.bigz(unlist(sapply(1:n,function(x)substring(gsub("[.]","",numbers::dropletPi(50)),x,x:n))))))min(length(x),sum(sapply(sapply(x[x>0&!is.na(x)],gmp::factorize),length)==1))
Uygun çözüm. Alır ngirdi olarak.
Pi'nin numbers::dropletPi(50)ilk 50 ondalık basamağını üretmek için kullanılır. gsubondalık noktasını kaldırır. substringpi'nin mümkün olan her alt basmasını (sürpriz sürprizini) alır n.
Döndürülen liste düzleşmiş ve dönüştürülür gmpbireyin bigzbiçimi. Bu format, 50 uzunluktaki tamsayıları depolamak için gereklidir unique. Bu vektörün benzersiz değerlerini alır. Bu sonuç saklanır x.
Sonra ilkelliği kontrol ederiz. Bu çok zor, çünkü bir sürü kenar durum ve sıkıntı var:
Yüksek için n, bir 0pi var. Bu, başında sıfır olan alt dizilere yol açar. çıkarılması gereken s ile bunun as.bigzüretir NA.
Benzer bir notta, alt dize "0"çökecektir gmp::factorize, bu yüzden de kaldırılmalıdır.
İçin n=1, x = 3. Kendisi için uygun olan, ancak bigztemsili 3yinelenebilir, bu yüzden sapplykafası karışır ve 16 primes rapor edecek. Bu amaçla, vektörün uzunluğunun minimumunu xve içindeki primerlerin miktarını alırız .
gmp::isprimeBüyük sayıları güvenilir bir şekilde ele almayı başaramıyor gibi görünebilir. Bunun yerine gmp::factorizeçıktının uzunluğunu kullanır ve kontrol ederiz 1.
Sonuçta, biz çıkarırız 0ve NAçıkarırız x. Hepsini çarpanlara ayırıp xuzunluğu kontrol ediyoruz . Bunun oluşum sayısını sayar 1ve geri veririz min(occurences, length(x)).