Anciennement les nombres composites

16

Définition de séquence

Construisez une séquence d'entiers positifs a(n)comme suit:

  1. a(0) = 4
  2. Chaque terme a(n), autre que le premier, est le plus petit nombre qui satisfait aux conditions suivantes:
    a) a(n)est un nombre composite,
    b) a(n) > a(n-1), et
    c) a(n) + a(k) + 1est un nombre composite pour chacun 0 <= k < n.

Nous commençons donc par a(0) = 4. L'entrée suivante a(1)doit être 9. Cela ne peut pas être 5ou 7puisque ceux-ci ne sont pas composites, et cela ne peut pas être 6ou 8parce que ce 6+4+1=11n'est pas composite et 8+4+1=13n'est pas composite. Enfin, 9+4+1=14ce qui est composite, donc a(1) = 9.

L'entrée suivante a(2)doit être 10, car c'est le plus petit nombre plus grand 9qu'avec 10+9+1=20et les 10+4+1=15deux composites.

Pour l'entrée suivante, 11et 13sont tous deux sortis car ils ne sont pas composites. 12est sorti parce que 12+4+1=17ce n'est pas composite.14est sorti parce que 14+4+1=19ce n'est pas composite. Ainsi, 15est le prochain terme de la séquence , car 15est composite et 15+4+1=20, 15+9+1=25et 15+10+1=26sont tous chaque composite, donc a(3) = 15.

Voici les 30 premiers termes de cette séquence:

4, 9, 10, 15, 16, 22, 28, 34, 35, 39, 40, 46, 52, 58, 64, 70, 75, 76, 82, 88, 94, 100, 106, 112, 118, 119, 124, 125, 130, 136

Il s'agit d' OEIS A133764 .

Défi

Étant donné un entier en entrée n, sortez le ne terme dans cette séquence.

Règles

  • Vous pouvez choisir une indexation basée sur 0 ou 1. Veuillez indiquer lequel dans votre soumission.
  • L'entrée et la sortie peuvent être supposées correspondre au type d'entier natif de votre langue.
  • L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
AdmBorkBork
la source
3
Titre: Le nombre anciennement appelé composite.
Magic Octopus Urn
@MagicOctopusUrn Si cela avait quelque chose à voir avec l'art ou la musique, j'irais avec. Mais, je m'en tiendrai au titre que j'ai actuellement.
AdmBorkBork
C'était plus une blague;).
Magic Octopus Urn

Réponses:

5

Husk , 11 octets

!üȯṗ→+fotpN

1 indexé. Essayez-le en ligne!

Explication

!üȯṗ→+fotpN  Implicit input, a number n.
          N  The list of positive integers [1,2,3,4,..
      f      Keep those
         p   whose list of prime factors
       ot    has a nonempty tail: [4,6,8,9,10,12,..
 ü           De-duplicate wrt this equality predicate:
     +       sum
    →        plus 1
  ȯṗ         is a prime number.
             Result is [4,9,10,15,16,..
!            Get n'th element.
Zgarb
la source
2

Perl 6 , 70 octets

{(4,->+_{first {none($^a X+0,|(_ X+1)).is-prime},_.tail^..*}...*)[$_]}

Essayez-le 0 indexé

Étendu:

{  # bare block lambda with implicit parameter $_

  (  # generate the sequence

    4, # seed the sequence

    -> +_ { # pointy block that has a slurpy list parameter _ (all previous values)

      first

      {  # bare block with placeholder parameter $a

        none(                 # none junction
            $^a               # placeholder parameter for this inner block
          X+                
            0,                # make sure $a isn't prime
            |( _ X+ 1 )       # check all a(k)+1
        ).is-prime            # make sure none are prime
      },

      _.tail ^.. *            # start looking after the previous value
    }

    ...                       # keep generating values until

    *                         # never stop

  )[$_]                       # index into the sequence
}
Brad Gilbert b2gills
la source
2

JavaScript (ES6), 83 octets

1 indexé

f=(n,a=[-1,p=4])=>a[n]||f(n,a.some(x=>(P=n=>n%--x?P(n):x<2)(x-=~p),p++)?a:[...a,p])

Démo

Commenté

Fonction d'assistance P () , renvoyant vrai si n est premier, ou faux sinon:

P = n => n % --x ? P(n) : x < 2

NB: Il faut l'appeler avec x = n .

Fonction principale f () :

f = (               // given:
  n,                //   n = target index
  a = [-1, p = 4]   //   a = computed sequence with an extra -1 at the beginning
) =>                //   p = last appended value
  a[n] ||           // if a[n] exists, stop recursion and return it
  f(                // otherwise, do a recursive call to f() with:
    n,              //   n unchanged
    a.some(x =>     //   for each value x in a[]:
      P(x -= ~p),   //     rule c: check whether x + p + 1 is prime
                    //     rule a: because a[0] = -1, this will first compute P(p)
      p++           //     rule b: increment p before the some() loop starts
    ) ?             //   end of some(); if truthy:
      a             //     p is invalid: use a[] unchanged
    :               //   else:
      [...a, p]     //     p is valid: append it to a[]
  )                 // end of recursive call
Arnauld
la source
0

Java 8, 186 173 octets

n->{int a[]=new int[n+1],r=a[n]=4;a:for(;n>0;)if(c(++r)<2){for(int x:a)if(x>0&c(r-~x)>1)continue a;a[--n]=r;}return r;}int c(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

0 indexé.
Malheureusement, les prime-checks (ou les anti-prime / composites dans ce cas) ne sont pas si bon marché en Java.

Explication:

Essayez-le en ligne.

n->{                     // Method with integer as both parameter and return-type
  int a[]=new int[n+1],  //  Integer-array of size `n+1`
      r=a[n]=4;          //  Start the result and last item at 4
  a:for(;n>0;)           //  Loop as long as `n` is larger than 0
    if(c(++r)<2){        //   Raise `r` by 1, and if it's a composite:
      for(int x:a)       //    Inner loop over the array
        if(x>0           //     If the item in the array is filled in (non-zero),
           &c(r-~x)>1)   //     and if `r+x+1` is a prime (not a composite number):
          continue a;}   //      Continue the outer loop
      a[--n]=r;}         //    Decrease `n` by 1, and put `r` in the array
  return r;}             //  Return the result

// Separated method to check if a given number is a composite number
// (It's a composite number if 0 or 1 is returned, otherwise it's a prime.)
int c(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}
Kevin Cruijssen
la source
0

Ruby + -rprime, 85 75 octets

->n{*a=x=4
n.times{x+=1;!x.prime?&&a.none?{|k|(x+k+1).prime?}?a<<x:redo}
x}

Essayez-le en ligne!

Un lambda renvoyant le nième élément indexé 0.

-10 octets: utilisation redoet un opérateur ternaire au lieu de loop... breaket une chaîne conditionnelle

Non golfé:

->n{
  *a=x=4                         # x is the most recent value: 4
                                 # a is the list of values so far: [4]
  n.times{                       # Repeat n times:
    x += 1                       # Increment x
    !x.prime? &&                 # If x is composite, and
      a.none?{|k|(x+k+1).prime?} #   for all k, a(n)+x+1 is composite,
      ? a<<x                     # Add x to a
      : redo                     # Else, restart the block (go to x+=1)
  }
  x                              # Return the most recent value
}
benj2240
la source
0

C (gcc) , 170 octets

P(n,d,b){for(b=d=n>1;++d<n;)b=b&&n%d;n=b;}h(n,N,b,k){if(!n)return 4;for(b=N=h(n-1);b;)for(b=k=!N++;k<n;b|=P(h(k++)-~N));n=N;}f(n,j){for(j=0;n--;)if(P(h(++j)))j++;n=h(j);}

Essayez-le en ligne!

Jonathan Frech
la source
0

C (gcc) ,  140  138 octets

Merci à @Jonathan Frech d'avoir économisé deux octets!

c(n,i){for(i=1;++i<n;)i=n%i?i:n;i=i>n;}f(n){int s[n],k,j,i=0;for(*s=k=4;i++-n;i[s]=k)for(j=!++k;j-i;)2-c(k)-c(k-~s[j++])?j=!++k:f;n=n[s];}

0 indexé

Essayez-le en ligne!

Steadybox
la source
++k,j=0peut être deux fois j=!++k, 138 octets .
Jonathan Frech