Số lượng nhỏ nhất không sử dụng chia sẻ một yếu tố


11

Đây là một câu hỏi khá hay của nhà máy. Tôi sẽ xác định một chuỗi và bạn chơi một số mã để xuất ra một mục được cung cấp một chỉ mục.

  • Mục đầu tiên trong chuỗi là 2.

  • Mục thứ n trong chuỗi là số nguyên dương nhỏ nhất ngoài n và 1 chia sẻ ít nhất một yếu tố với n (khác 1) chưa xuất hiện trong danh sách.

Các trường hợp thử nghiệm

Dưới đây là 25 mục đầu tiên trong chuỗi:

1  2
2  4
3  6
4  8
5  10
6  3
7  14
8  12
9  15
10 5
11 22
12 9
13 26
14 7
15 18
16 20
17 34
18 16
19 38
20 24
21 27
22 11
23 46
24 21
25 30

Liên quan (bù bởi một) OEIS

Câu trả lời:



3

Python 3 , 118 117 byte

-1 byte nhờ Cameron Aasta !

import math
def f(n,i=3):
 if n<2:return 2
 while 1:
  if math.gcd(n,i)>1>(i in map(f,range(n)))<i!=n:return i
  i+=1

Hãy thử trực tuyến!

Mã này khá kém hiệu quả (nó tạo ra một giá trị không tồn tại trong các kết quả trước đó và tính lại các kết quả trước đó trên mỗi giá trị mới), vì vậy nó hoạt động chính xác nhưng tôi không khuyên bạn nên chạy nó với số lượng lớn.


2
Mẹo nhỏ: Bạn có thể lưu một dòng mới bằng cách tạo nó def f(n,i=3):và xóa i=3dòng này
Cameron Aasta


2

Haskell , 60 59 byte

BIÊN TẬP:

  • -1 byte: @xnor chỉ ra all(/=x)là ngắn hơn x`notElem`.

f lấy một số nguyên và trả về một số nguyên.

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:map f[1..n-1]]!!0

Hãy thử trực tuyến!

Đây là thời gian rất theo cấp số nhân, vì vậy TIO hết thời gian sau 21, trong khi GHCi được giải thích của tôi đã lên tới 22 trước khi tôi dừng nó ngay bây giờ. Phiên bản dài hơn 9 byte sau đây ghi nhớ vào một danh sách dễ dàng đi vào hàng ngàn:

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:take(n-1)l]!!0
l=f<$>[1..]

Hãy thử trực tuyến!

  • f nsử dụng một sự hiểu biết danh sách để tạo ra các ứng cử viên x, thực hiện lần đầu tiên vượt qua !!0.
  • gcd x n>1kiểm tra xncó các yếu tố chung.
  • ||n<2miễn n==1yêu cầu yếu tố.
  • all(/=x)$n:map f[1..n-1]kiểm tra đó xkhông phải là nmột yếu tố trình tự trước.

@WheatWizard Hừm, có lẽ không có gì khác biệt trong trường hợp đó. Chỉ sử dụng để làm điều đó theo mặc định. Đây là một trong số ít các hàm chữ số có tính cố định được xác định để phù hợp với cách đó.
Ørjan Johansen

1
all(/=x)$là 1 ngắn hơn ở đó
xnor

2

Không tích hợp sẵn cho GCD trong C #, vì vậy ...

C # (.NET Core) , 197 196 194 byte

n=>{if(n<2)return 2;var p=new int[n-1];int i=0,a,b;for(;i<n-1;)p[i]=f(++i);for(i=2;;i++)if(n!=i){for(a=n,b=i;a*b>0;)if(a>b)a%=b;else b%=a;if(b!=1&a!=1&!System.Array.Exists(p,e=>e==i))return i;}}

Hãy thử trực tuyến!

Một lần nữa, không sử dụng mã này để tính các số trong chuỗi cho n>30...

  • -1 byte bằng cách thay đổi whilevòng lặp GCD cho một forvòng lặp.
  • -2 byte nhờ Kevin Cruijssen! Đẹp quá

1
a>0&b>0có thể được chơi gôna*b>0
Kevin Cruijssen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.