Factorielles Z modifiées principales
Laissez-moi vous expliquer un par un les termes ci-dessus ...
Nous appellerons \$\text{Z-Factorial}(n)\$d'un entier positif \$n\$, \$n!\$(c'est-à-dire \$n\$factorielle) sans zéros à la fin. Alors, \$\text{Z-Factorial}(30)\$est \$26525285981219105863630848\$parce que \$30!=265252859812191058636308480000000\$
Nous appellerons Modified Z-Factorial
de \$n\$, le \$\text{Z-Factorial}(n) \mod n\$.
Donc, Modified Z-Factorial
de \$30\$, est \$\text{Z-Factorial}(30) \mod 30\$qui est \$26525285981219105863630848 \mod 30 = 18\$
Nous sommes intéressés par ceux \$n\$pour lesquels le Modified Z-Factorial of n
est un nombre premier
Exemple
Le numéro \$545\$est PMZ parce que \$\text{Z-Factorial}(545) \mod 545 = 109\$ qui est premier
Voici une liste des premières valeurs de \$n\$ qui produisent Prime Modified Z-Factorial (PMZ)
5,15,35,85,545,755,815,1135,1165,1355,1535,1585,1745,1895,1985,2005,2195,2495,2525,2545,2615,2705,2825,2855,3035,3085,3155,3205,3265,3545,3595,3695,3985,4135,4315,4385,4415,4685,4705,4985,5105,5465,5965,6085,6155,6185,6385,6415,6595...
Tâche
La liste ci-dessus continue et votre tâche est de trouver le \$k\$e PMZ
Contribution
Un entier positif \$k\$
Production
Le \$kth\$ PMZ
Cas de test
voici quelques cas de test indexés en 1 .
Veuillez indiquer le système d'indexation que vous utilisez dans votre réponse pour éviter toute confusion.
Vos solutions ne doivent fonctionner que dans les limites de la taille entière native de votre langue.
input -> output
1 5
10 1355
21 2615
42 5465
55 7265
100 15935
500 84815
C'est du code-golf , donc le score le plus bas en octets l'emporte.
Réponses
05AB1E , 16 octets
[N!0ÜN%pi®>©¹Q#N
L'entrée est k basée sur 1 .
Sort le k-ème PMZ.
Explication:
[N!0ÜN%pi®>©¹Q#N
[ Start infinite loop
N! Factorial of the index
0Ü Remove trailing zeros
N% Mod index
p Is prime?
i If it is:
®>© Increment the value stored in register c (initially -1)
¹Q Is the value equals the input?
#N If it does, push the index (which is the PMZ) and break
Essayez-le en ligne!
Gelée , 13 11 octets
!Dt0Ḍ%⁸Ẓµ#Ṫ
Une lecture de programme complète à partir de STDIN qui imprime le résultat dans STDOUT.
Essayez-le en ligne!
Comment?
!Dt0Ḍ%⁸Ẓµ#Ṫ - Main Link: no arguments
# - set n=0 (implicit left arg) and increment getting the first
(implicit input) values of n which are truthy under:
µ - the monadic chain (f(n)):
! - factorial -> n!
D - convert from integer to decimal digits
t0 - trim zeros
Ḍ - convert from decimal digits to integer
⁸ - chain's left argument, n
% - modulo
Ẓ - is prime?
Ṫ - tail
- implicit print
Ajouter ++ , 58 octets
D,f,@,Rb*BDBGbUdb*!!*BFJiA%P
x:?
Wx,`y,+1,`z,$f>y,`x,-z
Oy
Essayez-le en ligne!
Délais d'attente pour \ $ k \ ge 30 \ $ sur TIO
Comment ça fonctionne
D,f,@, ; Define a function, f, taking 1 argument, n
; Example: STACK = [30]
Rb* ; Factorial STACK = [265252859812191058636308480000000]
BD ; Convert to digits STACK = [2 6 5 ... 0 0 0]
BGbU ; Group adjacents STACK = [[2] [6] [5] ... [8] [4] [8] [0 0 0 0 0 0 0]]
db*!! ; If last is all 0s
*BF ; remove it STACK = [[2] [6] [5] ... [8] [4] [8]]
Ji ; Join to make integer STACK = [26525285981219105863630848]
A% ; Mod n STACK = [18]
P ; Is prime? STACK = [0]
; Return top value 0
x:? ; Set x to the input
Wx, ; While x > 0
`y,+1, ; y = y + 1
`z,$f>y, ; z = f(y)
`x,-z ; x = x - z
; We count up with y
; If y is PMZ, set z to 1 else 0
; Subtract z from x, to get x PMZs
Oy ; Output y
Japt , 13 octets
Indexé 0. Ne fonctionne que, dans la pratique, 0
et 1
comme une fois que nous allons plus 21!
nous dépassons JavaScript de MAX_SAFE_INTEGER
.
ÈÊsÔsÔuX j}iU
Essayez-le
ÈÊsÔsÔuX j}iU :Implicit input of integer U
È :Function taking an integer X as argument
Ê : Factorial
s : String representation
Ô : Reverse
sÔ : Repeat (There has to be a shorter way to remove the trailing 0s!)
uX : Modulo X
j : Is prime?
} :End function
iU :Pass all integers through that function, returning the Uth one that returns true
R , 99 93 octets
Edit: -6 octets (et -4 octets de la version à précision arbitraire) grâce à Giuseppe
k=scan();while(k){F=F+1;z=gamma(F+1);while(!z%%5)z=z/10;x=z%%F;k=k-(x==2|all(x%%(2:x^.5)))};F
Essayez-le en ligne!
Utilise l'approche simple, en suivant les étapes de l'explication. Sort malheureusement des limites de la précision numérique de R à factorielle (21), donc échoue pour tout k> 2.
Une version à précision arbitraire (qui ne se limite pas à un petit k, mais qui est moins compétitive au golf) est:
R + gmp, 115 octets
Husk , 11 octets
!foṗS%ȯ↔↔ΠN
Essayez-le en ligne!
Explication
!foṗS%ȯ↔↔ΠN
f N filter list of natural numbers by:
Π take factorial
↔↔ reverse twice, remove trailing zeros
S% mod itself
ṗ is prime?
! get element at index n
JavaScript (Node.js) , 89 ... 79 77 octets
n=>(g=y=>y%10n?(p=k=>y%--k?p(k):~-k||--n?g(x*=++i):i)(y%=i):g(y/10n))(x=i=2n)
Essayez-le en ligne!
Python 3 , 145 140 138 129 octets
def f(n,r=0):
c=d=2
while r<n:
c+=1;d*=c
while 1>d%10:d//=10
i=d%c;r+=i==2or i and min(i%j for j in range(2,i))
return c
Essayez-le en ligne!
Python 2 , 126125 octets
def f(n,r=0):
c=d=2
while r<n:
c+=1;d*=c
while d%10<1:d/=10
i=d%c
r+=i==2or i and min(i%j for j in range(2,i))
print c
Essayez-le en ligne!
Explication: Continuez à diviser par 10 tant que la factorielle actuelle est divisible par 10, puis vérifiez le nombre courant modulo factoriel pour la primalité.
Merci à caird coinheringaahing pour -20 octets et Dominic van Essen pour -9 octets!
Haskell , 129 111 octets
g n
|n`mod`10>0=n
|0<1=g$div n 10 f=(!!)[n|n<-[1..],let p=mod(g$product[1..n])n,[x|x<-[2..p],mod p x<1]==[p]]
Essayez-le en ligne!
g
supprime 0
s du nombre.
f
prend l' k
élément d'une compréhension de liste infinie où:
[x|x<-[2..p],mod p x==0]==[p]
est prime
condition (compare une liste de diviseurs de p
et une liste de seulement p).
Et p
est mod(g$foldr(*)1[1..n])n
le modulo factoriel passé à travers g
.
Enregistré 18 grâce à l' utilisateur