số thứ n có n số yếu tố nguyên tố riêng biệt


10

Tạo hàm, chương trình hoặc biểu thức ngắn nhất tính A073329 , nghĩa a(n)là số thứ nn thừa số nguyên tố riêng biệt. Đầu vào là số phần tử trong chuỗi cần trả về. 0 < n. Tôi không quan tâm đến độ chính xác số nguyên. Tôi chỉ muốn thuật toán. Đối với các ngôn ngữ không hỗ trợ số nguyên lớn tùy ý, chúng tôi sẽ giả vờ như vậy.

Bạn có thể tìm thấy các trường hợp thử nghiệm bằng cách theo liên kết đến OEIS được cung cấp ở trên.

CẬP NHẬT:

Hãy để tôi nói rõ rằng bạn cần trả về một chuỗi số nguyên từ chương trình, hàm hoặc biểu thức của bạn. Nói cách khác, f(x)nên tính toán a(n)cho tất cả ntừ 1 đến x. Cho x8, hàm của bạn sẽ trả về 2, 10, 60, 420, 4290, 53130, 903210, 17687670dưới dạng một mảng hoặc một số cấu trúc dữ liệu thích hợp khác.


Giới hạn / giới hạn ??
st0le

Tôi không thực sự quan tâm đến các giới hạn và giới hạn, nhưng nếu nó quan trọng với bạn, thì thuật toán giả sử đầu vào sẽ không quá 8 và chúng tôi sẽ giả vờ nó hoạt động với số lượng cao hơn. Như tôi đã nói, tôi quan tâm đến thuật toán toán học trừu tượng, không phải là chi tiết về các giới hạn số nguyên của một ngôn ngữ cụ thể.
Gregory Higley

1
Có lẽ nó cởi mở hơn, khi chúng ta nói: output a(1), ... a(n)thay vì trả lại một cái gì đó, như một mảng của ...
người dùng không biết

Câu trả lời:


2

Con trăn, 144 ký tự

R=range
P=[x for x in R(2,99)if all(x%i for i in R(2,x))]
for a in R(input()):
 x=n=0
 while n<=a:n+=sum(x%p==0for p in P)==a+1;x+=1
 print x-1

Mất khoảng 2 phút để chạy đến khi hoàn thành x = 8.


2

Java, 170 ký tự trong một dòng

int a(int n) {
    int a = 2, t = a, m = 1, i = 1;
    Set s = new HashSet();
    while (i++ > 0) {
        if (t % i == 0) {
            s.add(i);
            t /= i;
            if (t == 1) {
                if (s.size() == n) {
                    if (n == m) {
                        break;
                    }
                    m++;
                }
                t = ++a;
                s.clear();
            }
            i = 1;
        }
    }
    return a;
}

Cập nhật, +77 ký tự IOL

int[] f(int n) {
    int[] f = new int[n];
    for (int i = 0; i < n; i++) {
        f[i] = a(i+1);
    }
    return f;
}

Điều này thực sự không chính xác, nhưng gần, mặc dù tôi nghĩ rằng tôi có lẽ nên làm cho câu hỏi của tôi rõ ràng hơn. Bạn sẽ trả về một chuỗi số nguyên. Chẳng hạn, nếu đầu vào 8, bạn nên trả về 8 phần tử đầu tiên trong chuỗi A073329.
Gregory Higley

@Gregory xem cập nhật
cubanacan

Tôi xin lỗi - Tôi đã bỏ phiếu cho bạn, dựa trên sự hiểu lầm của riêng tôi về nhiệm vụ, điều này đã được làm rõ sau khi đọc liên kết OEIS. Nếu bạn thực hiện một chỉnh sửa nhỏ cho bài đăng của mình, tôi có thể và sẽ thu hồi downvote của mình.
người dùng không xác định

@user vì sự hiểu lầm của riêng tôi về nhận xét của bạn, làm rõ yêu cầu của bạn, xin vui lòng
cubanacan

Tôi đã hiểu sai câu hỏi và nghĩ rằng, tất cả các yếu tố phải là các số nguyên tố riêng biệt, vì vậy 2 * 3 * 5 * 2 sẽ là một câu trả lời sai. Vì vậy, tôi đã bỏ phiếu trả lời của bạn cho ong sai. Sau đó, tôi phát hiện ra, "các số nguyên tố khác biệt" là như thế nào để hiểu và muốn sửa lỗi bỏ phiếu của tôi, nhưng tôi không được phép thay đổi phiếu bầu của mình - điều đó chỉ có thể trong vài phút đầu tiên. Nhưng nếu bạn chỉnh sửa câu trả lời của mình, tôi có thể thay đổi phiếu bầu của mình. Vì vậy, tôi đang yêu cầu bạn chỉnh sửa một chút.
người dùng không xác định

2

Java (Ungolfed)

public class M {

    public static void main(String[] a) {
        final int N = 100000000;
        int[] p = new int[N];
        for(int f = 2; f * f < N; f++) {
            if(p[f] == 0)
                for(int k = f; k < N; k += f)
                    p[k]++;
        }
        for(int i = 1; i <= 8; i++) {
            int c = 0, j;
            for(j = 1; j < N && c < i; j++)
                if(p[j] == i)
                    c++;
            if(c == i)
                System.out.println(i + " = " + --j);
        }
    }
}

Sử dụng một thuật toán sàng. Nó khá nhanh. (6 giây) Sẽ hoạt động chính xác cho tối đa 8, có thể sẽ thất bại cho mọi thứ cao hơn.


1

JavaScript, 149 ký tự

function(n){function f(x){for(r=[],o=x,z=2;z<=o;x%z?++z:(x/=z,r.indexOf(z)+1?0:r.push(z)));return r}for(c=0,i=1;c<n;)f(++i).length==n?c++:0;return i}

Cảm thấy không phản hồi cho n> = 6 vì vậy tôi đã không kiểm tra xem nó mất bao lâu (trình duyệt của tôi bật lên thông báo kịch bản treo cứ sau 10 giây hoặc do đó tôi không thể điều chỉnh thời gian chính xác và tôi không muốn treo hoàn toàn nếu tôi kiểm tra "không hiển thị lại cái này" ...)

Chỉnh sửa: Để trả về mảng là 200 ký tự (+51) :

function(n){function F(){function f(x){for(r=[],o=x,z=2;z<=o;x%z?++z:(x/=z,r.indexOf(z)+1?0:r.push(z)));return r}for(c=0,i=1;c<n;)F(++i).length==n?c++:0;return i}for(a=[];n>0;n--)a.push(f());return a}

0

J, 32 byte

({"0 1~i.@#)(]/.~#@~.@q:)

Nhưng vì tôi đang trả lời câu hỏi của chính mình quá muộn, chúng tôi sẽ chỉ để lại câu trả lời này vì tò mò.

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.