Factorielles Z modifiées principales

Aug 18 2020

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-Factorialde \$n\$, le \$\text{Z-Factorial}(n) \mod n\$.
Donc, Modified Z-Factorialde \$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 nest 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

3 SomoKRoceS Aug 18 2020 at 04:25

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!

3 JonathanAllan Aug 18 2020 at 01:36

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
2 cairdcoinheringaahing Aug 18 2020 at 03:08

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
2 Shaggy Aug 18 2020 at 05:56

Japt , 13 octets

Indexé 0. Ne fonctionne que, dans la pratique, 0et 1comme 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
2 DominicvanEssen Aug 18 2020 at 16:57

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

2 Razetime Oct 23 2020 at 15:15

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
1 Arnauld Aug 18 2020 at 01:21

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!

1 ManishKundu Aug 18 2020 at 03:17

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!

1 AZTECCO Aug 18 2020 at 23:22

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!

gsupprime 0s du nombre.

fprend l' kélément d'une compréhension de liste infinie où:
[x|x<-[2..p],mod p x==0]==[p]est primecondition (compare une liste de diviseurs de pet une liste de seulement p).

Et pest mod(g$foldr(*)1[1..n])nle modulo factoriel passé à travers g.

Enregistré 18 grâce à l' utilisateur