Numéros de Knödel - Trouver Kn


10

Numéros de Knödel

Les nombres de Knödel sont un ensemble de séquences. Plus précisément, les nombres de Knödel pour un entier positif nsont l'ensemble des nombres composites m, tels que tous i < m, coprime à m, satisfont i^(m-n) = 1 (mod m). L'ensemble des nombres de Knödel pour un spécifique nest indiqué Kn. ( Wikipedia ).

Par exemple, K1sont les numéros Carmichael et OEIS A002997 . Ils vont comme: {561, 1105, 1729, 2465, 2821, 6601, ... }. K2est OEIS A050990 et va comme, {4, 6, 8, 10, 12, 14, 22, 24, 26, ... }.

Ta tâche

Votre tâche consiste à écrire un programme / une fonction / etc. cela prend deux nombres, net p. Il doit retourner les premiers pnuméros de la séquence Knödel, Kn.

C'est le , donc le code le plus court en octets gagne!

Exemples

1, 6   ->   [561, 1105, 1729, 2465, 2821, 6601]
2, 3   ->   [4, 6, 8]
4, 9   ->   [6, 8, 12, 16, 20, 24, 28, 40, 44]
3, 1   ->   [9]
3, 0   ->   []
21, 21 ->   [45, 57, 63, 85, 105, 117, 147, 231, 273, 357, 399, 441, 483, 585, 609, 651, 741, 777, 861, 903, 987]

1
Pourquoi n'est 4pas dans la séquence K_4? i^(4-4) = 1 mod 4est toujours vrai.
isaacg

1
@isaacg MathWorld a la condition supplémentaire que m > n.
Martin Ender

Réponses:


6

Pyth, 29 28 octets

.f&tPZ!f&q1iTZt%^T-ZQZSZvzhQ

1 octet enregistré grâce à Jakube et orlp.

Manifestation.

Saisie dans le formulaire

p
n

Un calcul assez simple. La primauté relative est vérifiée via la fonction gcd de Pyth. Ce code présente .fla fonction "premier n satisfaisant" de Pyth.

J'ai incorporé la condition implicite qu'en m > ncommençant la recherche de mvaleurs à n + 1.


4

Haskell, 89 octets

Implémentation très simple. Définit un opérateur binaire n!p.

n!p=take p[m|m<-[n+1..],any((<1).mod m)[2..m-1],and[i^(m-n)`mod`m<2|i<-[1..m],gcd i m<2]]

Exemple:

Prelude> 4!9
[6,8,12,16,20,24,28,40,44]

2
À quoi ça sert m>n?
rubik

Je n'ai aucune idée. J'obtenais des negative exponenterreurs 21!21et j'ajoutais que cela avait résolu le problème.
Lynn

1
J'ai installé Haskell pour essayer de comprendre comment se débarrasser du m>n&&bit, en changeant m<-[4..]pour m<-[n+1..]semble fonctionner. Vous obtenez également un nombre d'octets de 91!
Kade

1
Soigné! Merci, @Vioz.
Lynn

@ Vioz- Vous vous êtes donc mêlé de Haskell sans le connaître auparavant? Comment avez-vous fait?
fier haskeller

2

Haskell, 90

a#b=gcd a b>1
n!p=take p[m|m<-[n+1..],any(m#)[2..m-1],all(\i->m#i||mod(i^(m-n))m<2)[1..m]]

la même chose que la réponse de @Marius, bien que développée indépendamment.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.