Могут ли чётные числа стать простыми?


24

Последовательность

Все знают , что только даже простое число 2. Ho-гул. Но есть определенные четные числа, nгде при объединении n-1они становятся простым числом.

Для начала, 1не в списке, потому что 10не является основным. Аналогично с 2( 21) и 3( 32). Тем не менее, 4работает, потому что 43это простое число, так что это первое число в последовательности a(1) = 4. Следующее число, которое работает (ни 6( 65), ни 8( 87) не работает 10, это потому, что 109это простое число a(2) = 10. Тогда мы пропускаем кучу больше, пока 22, потому что 2221простое, так a(3) = 22. И так далее.

Очевидно, что все члены в этой последовательности являются четными, потому что любое нечетное число nпри объединении n-1становится четным (как 3превращается в 32), которое никогда не будет простым.

Это последовательность A054211 в OEIS.

Соревнование

Если задан входной номер, nкоторый вписывается где-то в эту последовательность (т. nЕ. Соединен с n-1простым), выведите его положение в этой последовательности. Вы можете выбрать 0- или 1-индексированный, но, пожалуйста, укажите, какой в ​​вашем представлении.

правила

  • Можно предположить, что ввод и вывод соответствуют целочисленному типу вашего языка.
  • Ввод и вывод может быть дан в любом удобном формате .
  • Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
  • Если возможно, укажите ссылку на среду онлайн-тестирования, чтобы другие люди могли опробовать ваш код!
  • Стандартные лазейки запрещены.
  • Это поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).

Примеры

Приведенные ниже примеры 1-проиндексированы.

n = 4
1

n = 100
11

n = 420
51

1
Почему вы должны сделать это в обратном порядке? У cQuents такого режима нет :(
Стивен

4
@StepHen Просто для изменения темпа; нечто отличное от обычного.
AdmBorkBork

9
Я чувствую, что это будет намного лучше, как решение проблемы.
Пшеничный волшебник

4
Не только 2 является единственным простым числом, делимым на 2, 3 также является единственным простым числом, делимым на 3, и 5 является единственным простым числом, делимым на 5. В общем, простое число nвсегда является единственным простым числом, делимым на n. Это не особенное - просто так работают простые числа.
Esolanging Fruit

Ответы:


11

Желе ,  8  7 байт

ḊżṖVÆPS

Монадическая ссылка, принимающая член последовательности и возвращающая его индекс в последовательности.

Попробуйте онлайн!

Как?

ḊżṖVÆPS - Link: number, n
Ḋ       - dequeue (implicit range) = [ 2   , 3   , 4   ,... ,              n         ]
  Ṗ     - pop (implicit range)     = [   1 ,   2 ,   3 ,... ,                  n-1   ]
 ż      - zip                      = [[2,1],[3,2],[4,3],... ,             [n , n-1]  ]
   V    - evaluate as Jelly code   = [ 21  , 32  , 43  ,... ,         int("n"+"n-1") ]
    ÆP  - is prime? (vectorises)   = [  0  ,  0  ,  1  ,... , isPrime(int("n"+"n-1"))]
      S - sum

TIO не для меня, может быть, он только что вернулся?
Конор О'Брайен

1
Исправлено 2 минуты назад :)
Джонатан Аллан

Прекрасный! Этот zip(head(), pop())трюк действительно крутой. :)
DJMcMayhem

В какой кодировке это 7 байтов?
kylefinn

1
@kylefinn Jelly имеет свою собственную кодовую страницу, нажмите на ссылку байтов в заголовке, чтобы увидеть ее.
Джонатан Аллан

8

Haskell , 80 75 70 байт

5 байтов сэкономить благодаря Laikoni

p x=all((>0).mod x)[2..x-1]
g n=sum[1|x<-[4..n],p$read$show=<<[x,x-1]]

Попробуйте онлайн!


1
Я думаю, что вы можете использовать более короткое простое испытание, p x=all((>0).mod x)[2..x-1]которое не выполняется в течение 1, но в этом случае это не должно иметь значения.
Лайкони

1
Также show x++show(x-1)может быть сокращено до show=<<[x,x-1].
Лайкони

@Laikoni Спасибо за советы! Я думал, что это showможно сделать более коротким способом, но по какой-то причине я не думал о карте concat.
Пшеничный волшебник

6

Желе , 12, 10 , 8 байтов

;’VÆPµ€S

Попробуйте онлайн!

1-2 байта сохранены благодаря @ nmjmcman101, и 2 байта сохранены благодаря @Dennis!

Объяснение:

     µ€   # For N in range(input()):
;         #   Concatenate N with...
 ’        #   N-1
  V       #   And convert that back into an integer
   ÆP     #   Is this number prime?
       S  # Sum that list 

Вы можете просто отбросить R и использовать неявный диапазон?
nmjcman101

@ nmjcman101 Я совершенно не знал, что это была вещь. Благодарность!
DJMcMayhem

5

05AB1E , 9 8 7 байт

Код

ƒNN<«pO

Использует кодировку 05AB1E . Попробуйте онлайн!

объяснение

ƒ          # For N in [0 .. input]..
 NN<«      #   Push n and n-1 concatenated
     p     #   Check for primality
      O    #   Sum the entire stack (which is the number of successes)

Конечно, это использует тот факт, что 05AB1E игнорирует ошибки ... потому что я не думаю, что вы можете проверить, '0-1'является ли простое число.
Эрик Outgolfer

5

Шелуха , 13 11 10 байт

1-индексированный раствор:

#ȯṗdS¤+d←ḣ

Попробуйте онлайн!

Ungolfed / Пояснение

         ḣ -- in the range [1..N]
#          -- count the number where the following predicate is true
        ←  --   decrement number,
    S  d   --   create lists of digits of number and decremented 
     ¤+    --   concatenate,
   d       --   interpret it as number and
 ȯṗ        --   check if it's a prime number

Спасибо @Zgarb за -3байты!


1
£İpэквивалентно . Кроме того, вы можете сохранить байт #…ḣвместо £f…N.
Згарб


4

Pyth , 12 байт

smP_s+`d`tdS

Попробуйте онлайн! или Проверьте все тестовые случаи.


Как?

smP_s+`d`tdSQ  -> Full Program. Takes input from Standard Input. Q means evaluated input
                  and is implicit at the end.

 m         SQ  -> Map over the Inclusive Range: [1...Q], with the current value d.
    s+`d`td    -> Concatenate: d, the current item and: td, the current item decremented. 
                  Convert to int.
  P_           -> Prime?
s              -> Sum, counts the occurrences of True.

4

Japt , 15 14 12 11 9 8 байт

1-индексироваться.

ÇsiZÄÃèj

Попытайся

Ç            :Map each Z in the range [0,input)
 s           :  Convert to string
  i          :    Prepend
   ZÄ        :    Z+1
     Ã       :End map
      è      :Count
       j     :  Primes


Г! Почему у меня такая слепая точка для Æи Ç?! Спасибо, @Oliver; Я обновлю, когда вернусь к компьютеру.
Лохматый

2o+X(с завершающим пробелом) будет работать вместо [XXÉ], хотя, если я когда-нибудь найду автоматическую балансировку []скобок, ваше решение будет на байт короче. (На самом деле 2, так как вы могли бы это сделать õ_ZÉ]¬nÃèj)
ETHproductions

@ETHproductions: В настоящее время первое, что я делаю при работе с массивом, это проверка, добавлена ​​ли автоматическая балансировка []! : D
Лохматый

По некоторым причинам я думаю, что точки с запятой также полностью перестали работать, поэтому я попытаюсь это исправить. Не думай, что у меня будет шанс до завтрашнего дня.
ETHproductions

3

Рёда , 73 байта

{seq 3,_|slide 2|parseInteger`$_2$_1`|{|i|[1]if seq 2,i-1|[i%_!=0]}_|sum}

Попробуйте онлайн!

1-индексироваться. Он использует поток для ввода и вывода.

Объяснение:

{
seq 3,_| /* Create a stream of numbers from 3 to input */
slide 2| /* Duplicate every number except the first and the last
            to create (n-1,n) pairs */
parseInteger`$_2$_1`| /* Concatenate n and n-1 and convert to integer */
{|i| /* For every i in the stream: */
    [1]if seq 2,i-1|[i%_!=0] /* Push 1 if i is a prime
                                (not divisible by smaller numbers) */
}_|
sum /* Return the sum of numbers in the stream */
}

2

Pyth , 14 байт

lfP_Tms+`d`tdS

Попробуйте онлайн!

объяснение

              Q    # Implicit input
             S     # 1-indexed range
     m             # For d in range [1, Q]...
      s+`d`td      # Concatenate d and d - 1
 fP_T              # Filter on primes
l                  # Return the length of the list

Вы опередили меня на несколько секунд, я опередил вас на несколько байтов: P
Mr. Xcoder

@ Mr.Xcoder Моя первая версия была lfTmP_s+`d`tdS, к сожалению, я не нашел твой трюк в то время сам :)
Джим


2

C, 99 94 байта

1 проиндексировано. Мне больно писать тесты на простоту, которые в вычислительном отношении расточительны, но байты - это байты.

Если мы допустим некоторые действительно хрупкие вещи, компилируя на моей машине без оптимизации с помощью GCC 7.1.1, будут работать следующие 94 байта (спасибо @Conor O'Brien )

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}

в противном случае эти гораздо более надежные 99 байтов делают свою работу

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}return c;}

Полная программа, немного более читабельная:

i,c,m,k;
f(n){
    c=i=1;
    for(;++i<n;c+=m==k){
        for(k=m=1;m*=10,m<i;);
        for(m=i*m+i-1;++k<m&&m%k;);
    }
    return c;
}

int main(int argc, char *argv[])
{
    printf("%d\n", f(atoi(argv[1])));
    return 0;
}

В зависимости от вашего компилятора, вы можете сохранить несколько байтов, используя n=c;вместо return c;:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
Conor O'Brien

Я не могу сказать, что хочу использовать вещи, которые, кажется, даже меняются в зависимости от уровня оптимизации. Использование GCC без оптимизации -O0 работает, с другими флагами оптимизации - нет. Интересно, что -O1 -O2 и -O3 возвращает 0, с -Os возвращает 1, с -Og возвращает n-1.
17

Вы всегда можете указать в своем ответе, как ваша программа должна быть скомпилирована.
Конор О'Брайен

Я думаю, чувствует себя немного дешево. Но я могу добавить альтернативу.
Альгмир

Я понимаю, но я бы не чувствовал себя плохо из-за этого - это один из советов для игры в гольф в Си
Конор О'Брайен


1

Mathematica, 77 байтов

Position[Select[Range@#,PrimeQ@FromDigits[Join@@IntegerDigits/@{#,#-1}]&],#]&

0

QBIC , 25 байтов

[:|p=p-µa*z^_l!a$|+a-1}?p

объяснение

[:|     FOR a = 1 to <n>
p=p-    Decrement p (the counter) by
µ       -1 if the following is prime, or 0 if not
        For the concatenating, we multiply 'a' by 10^LENGTH(a), then add a-1$┘p
        Example 8, len(8) = 1, 8*10^1 = 80, add 8-1=7, isPrime(87) = 0
a*z^_l!a$|+a-1
}       Close the FOR loop - this also terminates the prime-test
?p      Print p, the 0-based index in the sequence.

Для этого используется довольно сложная математическая вещь с наложенным приведением к строке. Создание версии, которая выполняет только конкатенацию на основе строк, на один байт длиннее:

[:|A=!a$+!a-1$┘p=p-µ!A!}?p

0

PHP , 203 байта

<?php $n=($a=$argv[1]).($a-1);$p=[2];$r=0;for($b=2;$b<=$n;$b++){$x=0;if(!in_array($b,$p)){foreach($p as $v)if(!($x=$b%$v))break;if($x)$p[]=$b;}}for($b=1;$b<=$a;$b++)if(in_array($b.($b-1),$p))$r++;die $r;

Попробуйте онлайн!

Использует индекс на основе 1 для вывода. Ссылка TIO имеет читабельную версию кода.


0

Рубин , 42 + 9 = 51 байт

Использует -rprime -nфлаги. 1-индексироваться.

Работает путем подсчета всех чисел, равных или меньших от входных данных, которые удовлетворяют условию (или, более технически, всех чисел, которые удовлетворяют n-1условию). Поскольку входные данные гарантированно находятся в последовательности, нет риска ошибки случайного входа 7, который не «становится простым».

p (?3..$_).count{|i|eval(i.next+i).prime?}

Попробуйте онлайн!




0

Java 8, 108 байт

n->{for(long r=0,q=1,z,i;;){for(z=new Long(q+""+~-q++),i=2;i<z;z=z%i++<1?0:z);if(z>1)r++;if(q==n)return r;}}

0 индексированные

Объяснение:

Попробуйте онлайн.

n->{                             // Method with integer parameter and long return-type
  for(long r=0,                  //  Result-long, starting at 0
      q=1,                       //  Loop integer, starting at 1
      z,i;                       //  Temp integers
      ;){                        //  Loop indefinitely
    for(z=new Long(q+""+~-q++),  //   Set z to `q` concatted with `q-1`
        i=2;i<z;z=z%i++<1?0:z);  //   Determine if `z` is a prime,
      if(z>1)                    //   and if it indeed is:
        r++;                     //    Increase the result-long by 1
      if(q==n)                   //   If `q` is now equal to the input integer
        return r;}}              //    Return the result

0

Stax , 10 байт

1- Индексируется

Äm▬á┌╕|°φ♦

Запустите и отладьте его Объяснение

Rxr\{$e|pm|+         #Full program, unpacked, implicit input  (Example (4))
R                    #Create [1 to input] range  (ex [1,2,3,4] )             
 x                   #Copy value from x register (ex (4) )
  r                  #Create [0 to input-1] range (ex [0,1,2,3)
   \                 #Create array pair using the range arrays (ex [[1,0],[2,1],[3,2],[4,3]])
    {    m           #Map block
     $e|p            #To string, eval string (toNum), isPrime (ex [1,0] => "10" => 10 => 0)
          |+         #Sum the array to calculate number of truths (ex [0,0,0,1] => 1)

0

Приборка , 33 байта

index({n:prime(n.n-1|int)}from N)

Попробуйте онлайн!

объяснение

Основная идея состоит в том, чтобы создать последовательность действительных чисел, а затем вернуть функцию индекса с карри.

index({n:prime(n.n-1|int)}from N)
      {n:                }from       select all numbers `n` from...
                               N     the set of natural numbers, such that:
               n.n-1                     `n` concatenated with `n-1`
                    |int                 ...converted to an integer
         prime(         )                ...is prime
index(                          )    function that returns index of input in that sequence
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.