以前的复合数字


16

序列定义

构造正整数序列,a(n)如下所示:

  1. a(0) = 4
  2. a(n)除第一项外,每个项都是满足以下条件的最小数:
    a)a(n)是一个复合数,
    b)a(n) > a(n-1)
    c)a(n) + a(k) + 1是每个复合数0 <= k < n

因此,我们从开始a(0) = 4。下一个条目a(1)必须为9。它不能为57因为它们不是复合的,所以不能为68因为6+4+1=11不是复合8+4+1=13的也不是复合的。最后9+4+1=14是,因此是a(1) = 9

下一个条目a(2)必须为10,因为它是910+9+1=2010+4+1=15一起大于两者的最小数字。

对于下一个条目,11并且13都是,因为他们没有复合。12之所以出来是因为12+4+1=17这不是复合的。14之所以出来是因为14+4+1=19这不是复合的。因此,15是所述序列的下一个术语,因为15是复合材料和15+4+1=2015+9+1=25以及15+10+1=26是所有各复合,所以a(3) = 15

以下是此顺序中的前30个术语:

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

这是OEIS A133764

挑战

给定输入integer nn按此顺序输出th项。

规则

  • 您可以选择基于0或1的索引。请说明您提交的内容。
  • 可以假定输入和输出适合您语言的本机整数类型。
  • 输入和输出可以通过任何方便的方法给出。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 禁止出现标准漏洞
  • 这是因此所有常见的高​​尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

3
标题:该数字以前称为Composite。
魔术章鱼缸

@MagicOctopusUrn如果这与艺术或音乐有关,我会考虑的。但是,我将继续使用当前拥有的标题。
AdmBorkBork

更像是个玩笑;)。
魔术章鱼缸

Answers:


5

外壳,11个字节

!üȯṗ→+fotpN

1个索引。 在线尝试!

说明

!üȯṗ→+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.

2

Perl 6,70个字节

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

尝试 0索引

展开:

{  # 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
}


2

JavaScript(ES6),83个字节

1索引

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])

演示版

已评论

辅助函数P(),如果n为素数,则返回true,否则返回false

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

注意:必须使用x = n进行调用。

主要功能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



0

Java的8,186个 173字节

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索引。
不幸的是,在Java中,素数检查(或这种情况下的反素数/复合检查)并不是那么便宜。

说明:

在线尝试。

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;}

0

Ruby + -rprime85 75字节

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

在线尝试!

返回0索引的第n个元素的lambda。

-10个字节:使用redo和三元运算符代替loop... break和条件链

取消高尔夫:

->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
}


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.