Étonnamment, je ne pense pas que nous ayons une question de code-golf pour déterminer si un nombre est à mi-temps .
Un semi-premier est un nombre naturel qui est le produit de deux nombres premiers (pas nécessairement distincts).
Assez simple, mais un concept remarquablement important.
Étant donné un entier positif, déterminez s'il s'agit d'un semi-premier. Votre sortie peut être sous n'importe quelle forme tant qu'elle donne la même sortie pour toute valeur véridique ou falsey. Vous pouvez également supposer que votre entrée est suffisamment petite pour que les performances ou le débordement ne soient pas un problème.
Cas de test:
input -> output
1 -> false
2 -> false
3 -> false
4 -> true
6 -> true
8 -> false
30 -> false (5 * 3 * 2), note it must be EXACTLY 2 (non-distinct) primes
49 -> true (7 * 7) still technically 2 primes
95 -> true
25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216869987549182422433637259085141865462043576798423387184774447920739934236584823824281198163815010674810451660377306056201619676256133844143603833904414952634432190114657544454178424020924616515723350778707749817125772467962926386356373289912154831438167899885040445364023527381951378636564391212010397122822120720357
-> true, and go call someone, you just cracked RSA-2048
Il s'agit de code-golf , donc les règles standard s'appliquent!
Réponses:
Brachylog , 2 octets
Fondamentalement, un port de la réponse de Fatalize au défi du numéro Sphenic.
Essayez-le en ligne!
Comment?
la source
Ċ
est en fait une liste intégrée de deux variables; étant un langage déclaratif, la sortie est, par défaut, un test de satisfaction (par exempleḋ
, seul produiraittrue.
des entiers non négatifs).c6 eb
.Décortiquer , 4 octets
Regardez ma pas Unicode!
Essayez-le en ligne!
Comment?
la source
Mathematica, 16 octets
PrimeOmega
compte le nombre de facteurs premiers, en comptant la multiplicité.la source
SemiprimeQ
PrimeOmega
Pyth , 4 octets
Suite de tests .
Comment?
la source
Python 3 , 54 octets
Essayez-le en ligne!
Le Verson précédent avait quelques problèmes d' arrondi sur un grand nombre de cube (
125
,343
, etc.)Il calcule la quantité de diviseurs (non seulement les nombres premiers), si elle a
1
ou2
il retourneTrue
.La seule exception est lorsqu'un nombre a plus de deux facteurs premiers mais seulement deux diviseurs. Dans ce cas, c'est un cube parfait d'un nombre premier (ses diviseurs sont sa racine cubique et sa racine cubique au carré).
x**3==n
couvrira ce cas, l'ajout d'un à l'entrée racine du cube pousse la somme jusqu'à un nombre de 3 et arrête le faux positif. remercie Jonathan Allan d'avoir écrit avec cette belle explicationla source
n**(1/3)%1>0<sum...
devrait marcher.Rubis ,
5648 octetsEssayez-le en ligne!
Comment ça marche:
Merci Value Ink pour l'idée d'avoir économisé 8 octets.
la source
c
commencer à 0 et compter, au lieu d'en faire un tableau auquel vous ajoutez tous les facteurs? De cette façon, vous supprimez le besoin d'utilisersize
à la finMathematica,
3129 octetsla source
Neim , 4 octets
Essayez-le en ligne!
la source
𝐏
,𝐥
,δ
et𝔼
comme mono-octets.Python 2 , 67 octets
Essayez-le en ligne!
-10 octets grâce à @JonathanAllan!
Le mérite de l'algorithme de factorisation Prime revient à Dennis (dans la version initiale)
la source
JavaScript (ES6), 47 octets
Renvoie un booléen.
Démo
Afficher l'extrait de code
la source
Mathematica 32 octets
Merci à ngenesis pour 1 octet enregistré
la source
;;
au lieu deAll
.Gelée , 5 octets
Essayez-le en ligne!
Explication
la source
En fait , 4 octets
Essayez-le en ligne!
la source
05AB1E, 4 octets
Essayez-le en ligne!
Comment?
la source
MATL, 5 octets
Essayez-le en ligne!
Explication
Yf
- Facteurs premiers.n
- Longueur.2=
- Est égal à 2?la source
Dyalog APL, 18 octets
Essayez-le en ligne!
Comment?
⎕CY'dfns'
- importerpco
3pco⎕
- courirpco
en entrée avec l'argument de gauche 3 (facteurs premiers)2=≢
- longueur = 2?la source
Gaia , 4 octets
4 octets semble être une longueur commune, je me demande pourquoi ...: P
Essayez-le en ligne!
Explication
la source
Python avec SymPy 1.1.1 ,
5744 octets-13 octets grâce à alephalpha (utilisez 1.1.1's
primeomega
)Essayez-le en ligne!
la source
lambda n:primeomega(n)==2
R , 67 octets
Essayez-le en ligne!
la source
Rubis , 35 + 8 = 43 octets
Utilise le
-rprime
drapeau pour déverrouiller laprime_division
fonction.Essayez-le en ligne!
la source
Java 8,
6961 octets-8 octets grâce à @Nevay .
Essayez-le ici.
la source
else++r;
) pour économiser 8 octetsn->{int r=1,c=2;for(;r++<n;)for(;n%r<1;n/=r)c--;return c==0;}
.Python 2 ,
7565 octetsEssayez-le en ligne!
Tout le crédit à la réponse de xnor pour le code de factorisation premier d'origine.
la source
C #, 112 octets
Avec la mise en forme appliquée:
Et comme programme de test:
Qui a la sortie:
la source
Pari / GP , 17 octets
Essayez-le en ligne!
la source
Rétine , 45 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez en unaire.
Essayez de trouver deux facteurs.
Assurez-vous que les deux facteurs sont primordiaux.
Assurez-vous que deux facteurs ont été trouvés.
la source
Python 2, 90 octets
f
prend un entiern
supérieur ou égal à1
, renvoie booléen.Essayez-le en ligne!
Cas de test:
la source
J , 6 octets
5 octets fonctionneront de manière unique:
Je crois que j'en ai besoin de six lorsque je définis la fonction:
la source
Pyke , 5 octets
Essayez-le ici!
la source
Japt ,
65 octetsTestez-le en ligne
Explication
Fait à peu près la même chose que la plupart des autres réponses:
k
obtient le tableau des facteurs premiers,Ê
obtient sa longueur et¥
vérifie l'égalité avec2
.la source
÷k o)j
fonctionne aussi, malheureusement c'est la même longueur :-(Perl 6 , 43 octets
Essayez-le en ligne!
f
est le plus petit facteur supérieur à 1 de l'argument d'entrée$_
, ouNil
si$_
est 1. La valeur de retour de la fonction est vraie sif
est vraie (c'est-à-dire pasNil
) ET l'argument d'entrée divisé par le facteur est premier.Si
$_
lui-même est premier, alorsf
sera égal à$_
, et$_ / f
est 1, ce qui n'est pas premier, donc la formule fonctionne dans ce cas également.la source