Codegolf - Подсчет Цепей Каннингема

  • Автор темы Playhome
  • Обновлено
  • 21, Oct 2024
  • #1

Простые числа всегда очаровывали людей. 2300 лет назад Евклид написал в своих «Началах»

Простое число – это то, что измеряется только единицей.

Это означает, что простое число делится только на

2 I:5
2 II:3
3 I:2
7 II:2
19 II:3
29 I:2
31 II:2
41 I:3
53 I:2
79 II:3
89 I:6
97 II:2
113 I:2
131 I:2
139 II:2
173 I:2
191 I:2
199 II:2
211 II:2
229 II:2
(or by itself).

Люди всегда искали связи между простыми числами и придумывали довольно странные (например, «интересные») вещи.

Например Софи Жермен премьер является простым :) for which 2129 I:2 также является простым.

А безопасный премьер является простым 99 for which 79 II:3 также является простым, что является в точности обратным условием простого числа Софи Жермен.

Они связаны с тем, что мы ищем в этой задаче.

А Сеть Каннингема типа I представляет собой серию простых чисел, в которой каждый элемент, кроме последнего, является Софи Жермен премьер, и каждый элемент, кроме первого, является безопасный премьер. Количество элементов в этом цепь называется это длина.

Это означает, что мы начинаем с простого числа 10 and calculate 2 I:5 . Если 1 is prime too, we have a Cunnigham chain of type я длины 2. Затем проверяем 1 and so on, until the next generated number is composite.

Цепи Каннингема типа II строятся практически по одному и тому же принципу, с той лишь разницей, что мы проверяем 2 at each stage.

Цепи Каннингема могут иметь длина 1, что означает, что ни 2*p+1, ни 2*p-1 не являются простыми. Нас это не интересует.

Некоторые примеры цепей Каннингема

;) starts a chain of type я длиной 5.

11

Следующее построенное число будет 7 which isn't prime.
Это также говорит нам о том, что 5 , 5 , 3 and 2 не начинайте цепочку типов я, потому что у него будут предшествующие элементы.

(3+1)/2 == 2 also starts a chain of type II длины 3.

3

Следующим будет 7 , which isn't prime.

Давайте попробуем 3*2+1 == 7 for type II (мы исключили его из тип I ранее).
Хорошо, 1 would be next, which isn't prime, so we would have length 1 for that "chain", which we don't count in this challenge.

Испытание

Напишите программу или функцию, которая по заданному числу (3-1)/2 == 1 as input, writes/returns the starting number of the n-ный Каннингемская сеть тип I или II из по крайней мере длина 2, за которым следует пробел, а затем тип цепочки, которую он начинает (я или II), за которым следует двоеточие и длина цепочки этого типа. В случае, если простое число запускает оба типа цепочек (тип I

и 3

тип II) первой считают цепочку типа I. 2 might be part of a previously started chain of any type, in which case it shouldn't be considered a Пример: Имейте в виду, что

стартовый номер

цепи такого типа. 3 . Since it is the first prime at all we can be sure that there is no chain starting with a lower prime that contains 2*2-1 == 3 .
Давайте посмотрим, как это начинается 5 . 2*2+1 == 5 Мы начинаем с
Следующим номером в цепочке типа я буду 2 . 2 является простым, поэтому у нас уже есть цепочка длиной не менее 2.
Мы считаем это первой цепочкой. n .

А как насчет типа II? 2 I:5 . Here we should check if it is in a chain that a lower prime started.
Следующим номером будет n . 21 является простым, поэтому для типа II также существует цепь длины не менее 2.
Мы считаем это второй цепочкой. И мы закончили 11 . 9 Следующее простое число
Проверьте тип I: 2, 3, 5 appears in a type II chain that a lower prime started. 2 . 47 is prime, so 3 can't be considered as a не является простым числом, поэтому 3 может быть отправной точкой для цепочки типа I. Давайте это проверим. Следующим будет 23 in this chain, which would be 11 является простым, поэтому у нас есть цепочка типа I длиной не менее 2. Мы считаем ее третьей цепочкой.

Теперь мы проверим, если 5 , 95 , 2, 5, 11, 23, 47 and so on, counting until we find the nth Cunningham chain of at least length 2.

стартовый номер 2 ) we need to determine the complete length of the chain we found and print the result in the previously mentioned format.

для цепи типа II. Так что это не засчитывается, даже если следующее число после 2*p-1 that started both types of chains with a length greater than 2*q+1 .

, является простым.

(Конечно, мы это уже знали, и вы, конечно, можете и должны подумать о своем собственном методе проведения этих проверок.)

q

И поэтому мы проверяем

q=2*p+1


Затем (или, может быть, некоторое время раньше

p

Кстати: в своих тестах я не нашел ни одного простого числа, кроме

(p-1)/2


Примеры ввода/вывода

p

Вход

2*p+1


Выход

p

Вход Выход.

Вход Выход Выходы для входов 1..20

Список первых 5000 выходов можно найти 1

здесь

Playhome


Рег
06 May, 2016

Тем
71

Постов
203

Баллов
608
  • 26, Oct 2024
  • #2

Javascript, 236 208 байт

Сохранено 28 байт:

 
 
 
 Union[Flatten[DeleteCases[Table[c@x_:=Module[{t=0,p=Prime@k},If[PrimeQ[(p-x)/2],1,While[PrimeQ@p,p=2p+x;t++];t]];{Prime@k,If[#==1,"I","II"],c@#},{k,7!}],{a_,b_,1}]&/@{1,-1},1]][[#]]&
 

Сэкономлено 9 байт на f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)} function with: t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j}
p=n=>{for(i=n;n%--i&&i;);return 1==i} function was replaced by the 29 I:2 заявление непосредственно в f(6) function.


Предыдущее решение:

p=n=>{for(i=n;n%--i&&i;);return 1==i};t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j};f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)}

Пример: f

Выход: eval(...)

Объяснение
Я использую 3 функции

1 п: знать, если н является простым: t

2 т: узнать длину цепочки Каннингема, начиная с н типа I или II в зависимости от м параметр, который будет равен 1 или -1: p=(n,i=n)=>n%--i?p(n,i):i==1

3 ж: считает цепочки (для цикла) затем отобразить результат

p

для цикла: для каждого числа цепочка Каннингема (I, затем II, если необходимо) действительна, если

  • число простое
  • предшественник не является простым
  • преемник является простым
 

Андрей Предприимчивый


Рег
21 Oct, 2020

Тем
75

Постов
219

Баллов
624
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно