Chuỗi số dày đặc


12

OEIS: A167171

Một số dày đặc là một số có chính xác nhiều ước số nguyên tố như các ước số không nguyên tố (bao gồm 1 và chính nó là ước số). Tương tự, nó là một số nguyên tố hoặc một sản phẩm của hai số nguyên tố riêng biệt. 100 số dày đặc đầu tiên là:

2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 29, 31, 33, 34, 35, 37, 38, 39, 41, 43, 46, 47, 51, 53, 55, 57, 58, 59, 61, 62, 65, 67, 69, 71, 73, 74, 77, 79, 82, 83, 85, 86, 87, 89, 91, 93, 94, 95, 97, 101, 103, 106, 107, 109, 111, 113, 115, 118, 119, 122, 123, 127, 129, 131, 133, 134, 137, 139, 141, 142, 143, 145, 146, 149, 151, 155, 157, 158, 159, 161, 163, 166, 167, 173, 177, 178, 179, 181, 183, 185, 187, 191, 193, 194

Cho một số nguyên không âm n, đầu ra dense(n). ncó thể là 0 chỉ mục hoặc 1 chỉ mục.

Tham chiếu thực hiện (Sage)

import itertools

def dense_numbers():
    n = 1
    while True:
        prime_divisors = [x for x in divisors(n) if x.is_prime()]
        non_prime_divisors = [x for x in divisors(n) if not x.is_prime()]
        if len(prime_divisors) == len(non_prime_divisors):
            yield n
        n += 1

N = 20

print itertools.islice(dense_numbers(), N, N+1).next()

Dùng thử trực tuyến


Rất nhiều chuỗi số nguyên tố ... Tôi không biết có quá nhiều tồn tại
Beta Decay

2
@ βετѧΛєҫαγ Có còn số nguyên tố gọi là Sexy Primes (͡ ° ͜ʖ ͡ °).
Ad Nam

@Adnan Oh myy; D
Beta Decay

Giá trị tối đa cho n gì?
R. Kap

@ R.Kap Cao như ngôn ngữ bạn chọn có thể đi.
Mego

Câu trả lời:


3

Thạch , 9 byte

ÆE²Sḍ2µ#Ṫ

Đọc từ STDIN và sử dụng lập chỉ mục dựa trên 1. Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ÆE²Sḍ2µ#Ṫ  Main link. No arguments. Implicit argument: 0

      µ#   Read an integer n from STDIN and execute the chain to the left for
           k = 0, 1, 2, ... until n of them return a truthy value.
           Return the array of matches.
ÆE           Compute the exponents of k's prime factorization.
  ²          Square each exponent.
   S         Compute the sum of all squares.
    ḍ2       Test if 2 is divisible by the result (true iff  the sum is 1 or 2).
        Ṫ  Tail; extract the last (n-th) matching value of k.

2

Trên thực tế , 12 byte

Tất cả các khoản tín dụng cho Dennis cho thuật toán của mình .

`w♂N;*2%Y`╓N

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

`w♂N;*2%Y`╓N

`        `     define a function
 w             prime factorization in exponent form:
               18 = (2^1)*(3^2) becomes [[2,1],[3,2]]
  ♂N           get the last element (exponent) of each sublist
    ;*         dot-product with self; equivalent to squaring
               each item and then taking the sum
      2%Y      test divisibility by 2
          ╓    first (input) solutions to the above function
           N   get the last element.

1

05AB1E, 12 11 byte

1 chỉ mục

µ             # while counter != input
 NÑ           # get divisors of current number
   p          # check if prime
    D         # duplicate
     O        # sum one copy
      s_O     # invert and sum the other copy
         Q½   # if equal increase counter

Dùng thử trực tuyến


1

Brachylog , 17 byte

:1yt.
1<.=$p#dl<3

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

Vị ngữ 0 (vị ngữ chính)

:1yt.
:1y     Find the first (input) solutions of predicate 1
   t    Last element
    .   Unify with output

Vị ngữ 1 (vị ngữ phụ)

1<.=$p#dl<3
1<.            1 < output
  .=           assign a value to output
  . $p#d       output's prime factorization contains no duplicate
        l      and the length
         <3    is less than three

0

R, 93 byte

dense=function(n){a=b=0;for(i in which(!n%%1:n))if(which(!i%%2:i)+1==i)a=a+1 else b=b+1;a==b}

Nó có xu hướng ném một cảnh báo. Nó không thực sự là một vấn đề. Cho phép cảnh báo giúp tôi tiết kiệm 5 byte.

Ung dung

dense=function(n){
     a=b=0                                #Initializing
     factors = which(!n%%1:n)             #Finds all factors
     for(i in factors)                    #Loops through factors
         prime = which(!i%%2:i)+1==i      #Tests if current factor is prime. If it is -- the first term in this vector will be TRUE. Otherwise, it will be false.
           if (prime) a=a+1 else b=b+1    #If first term is true, add 1 to a. Else add one to b. 
      return(a==b)                        #Test equality of a and b.
}

Bạn không thể sử dụng +=toán tử để lưu 2 byte?
R. Kap

Đáng buồn thay, R không có bất kỳ toán tử gia tăng hữu ích nào như +=hoặc a++. Đôi khi có thể có những cách ngắn hơn (tận dụng cấu trúc vòng lặp), nhưng tôi không biết về cách này ở đây.
dùng5957401

0

Python, 79 byte

f=lambda n,k=2:n<1or-~f(n-(sum((k%i<1)+2*(k%i**2<1)for i in range(2,k))<3),k+1)

Sử dụng lập chỉ mục dựa trên 1. Kiểm tra nó trên Ideone .



0

Tiên đề, 102 byte

f(n:PI):PI==(i:=1;repeat(i:=i+1;a:=divisors(i);2*#[x for x in a|prime?(x)]=#a=>(n=1=>break;n:=n-1));i)

ungolf và kết quả

-- 1 base Indexed: return the n_th number i that has 2*#divisorsPrimeOf(i)=#divisors(i)
ff(n:PI):PI==
     i:=1
     repeat
        i:=i+1
        a:=divisors(i)
        2*#[x for x in a|prime?(x)]=#a=>(n=1=>break;n:=n-1)
     i

(3) -> [f(i)  for i in 1..23]
   (3)  [2,3,5,6,7,10,11,13,14,15,17,19,21,22,23,26,29,31,33,34,35,37,38]
                                               Type: List PositiveInteger
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.