Java 10, 195 194 184 182 182 octets
n->{var L=new java.util.Stack();int i=1,k,x,s,r=0;for(;i++<n;){for(k=1;i%++k>0;);if(k==i)L.add(i);}for(x=L.size(),i=0;i<x;)for(k=i++,s=0;k<x;r+=s==n?1:0)s+=(int)L.get(k++);return r;}
-1 octet grâce à @ceilingcat .
-10 octets grâce à @SaraJ .
Essayez-le en ligne.
Explication:
n->{ // Method with integer as both parameter and return-type
var L=new java.util.Stack();
// List of primes, starting empty
int i=1,k,x,s, // Temp integers
r=0; // Result-counter, starting at 0
for(;i++<n;){ // Loop `i` in the range [2, `n`]
for(k=1; // Set `k` to 1
i%++k>0;); // Inner loop which increases `k` by 1 before every iteration,
// and continues as long as `i` is not divisible by `k`
if(k==i) // If `k` is now still the same as `i`; a.k.a. if `i` is a prime:
L.add(i);} // Add the prime to the List
for(x=L.size(), // Get the amount of primes in the List
i=0;i<x;) // Loop `i` in the range [0, amount_of_primes)
for(s=0, // (Re)set the sum to 0
k=i++;k<x; // Inner loop `k` in the range [`i`, amount_of_primes)
r+=s==n? // After every iteration, if the sum is equal to the input:
1 // Increase the result-counter by 1
: // Else:
0) // Leave the result-counter the same by adding 0
s+=(int)L.get(k++);
// Add the next prime (at index `k`) to the sum
return r;} // And finally return the result-counter
C'est fondamentalement similaire à la réponse de Jelly ou 05AB1E , juste 190 octets de plus .. XD
Voici une comparaison pour chacune des parties, ajoutée juste pour le plaisir (et pour voir pourquoi Java est si verbeux, et ces langages de golf sont si puissants):
- Prenez l'entrée: (Jelly: 0 octets) implicitement ; (05AB1E: 0 octet) implicitement ; (Java 10: 5 octets)
n->{}
- Créez une liste de nombres premiers dans la plage
[2, n]
: (Gelée: 2 octets) ÆR
; (05AB1E: 2 octets) ÅP
; (Java 10: 95 octets)var L=new java.util.Stack();int i=1,k,x,s,r=0;for(;i++<n;){for(k=1;i%++k>0;);if(k==i)L.add(i);}
- Obtenez toutes les sous-listes continues: (Gelée: 1 octet)
Ẇ
; (05AB1E: 1 octet) Œ
; (Java 10: 55 octets) for(x=L.size(),i=0;i<x;)for(k=i++;k<x;)
et(int)L.get(k++);
- Additionnez chaque sous-liste: (Gelée: 1 octet)
§
; (05AB1E: 1 octet) O
; (Java 10: 9 octets) ,s
et ,s=0
ets+=
- Comptez ceux égaux à l'entrée: (Gelée: 1 octet)
ċ
; (05AB1E: 2 octets) QO
; (Java 10: 15 octets) ,r=0
etr+=s==n?1:0
- Afficher le résultat: (Jelly: 0 octets) implicitement ; (05AB1E: 0 octet) implicitement ; (Java 10: 9 octets)
return r;
2æR
est le même queÆR