Trang chủ Tin Học Lớp 7 Viết chương trình nhập vào xâu kí tự S. Ghép...

Viết chương trình nhập vào xâu kí tự S. Ghép các kí tự là chữ số trong xâu lại với nhau sao cho số tạo thành là một số nguyên tố. In ra màn hình số lượng số ng

Câu hỏi :

Viết chương trình nhập vào xâu kí tự S. Ghép các kí tự là chữ số trong xâu lại với nhau sao cho số tạo thành là một số nguyên tố. In ra màn hình số lượng số nguyên tố ghép được. Input: a7b9c9 Output: 1 Ràng buộc: S.length $\leq$ 10, trong đó có ít nhất 1 kí tự chữ và 2 kí tự số. Thời gian: 3s đối với ngôn ngữ C++, C#, Java, Scala, Pascal. 4s đối với ngôn ngữ Python, JavaScript, php.

Lời giải 1 :

#include <iostream>
#include <vector>
#include <map>
using namespace std;

__int128 power(__int128 A, __int128 N, __int128 M) {
    __int128 ret = 1; A = A % M;

    while (N > 0) {
        if (N & 1) ret = ret * A % M;
        N >>= 1;
        A = A * A % M;
    }

    return ret;
}

bool check(__int128 A, __int128 s, __int128 d, __int128 N) {
    if (N == A) return true;
    __int128 p = power(A, d, N);
    if (p == 1) return true;

    for(; s > 0; s--) {
        if (p == N - 1) return true;
        p = p * p % N;
    }

    return false;
}

// miller test
bool prime(__int128 x) {
    if (x <= 1) return false;
    if (x % 2 == 0) return x == 2;
    if (x % 3 == 0) return x == 3;

    __int128 d = x - 1, s = 0;
    while ((d & 1) == 0) {
        s++;
        d >>= 1;
    }

    for(__int128 i: {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37})
        if (!check(i, s, d, x)) return false;

    return true;
}

vector<int> a;
map<int, bool> m;

int calc(int cnt, int num, int mark) {
    // leading by zero
    if (cnt != 0 && num == 0) return 0;
    
    if (cnt >= a.size()) {
        if (m[num]) return 0;
        m[num] = 1;
        
        bool r = prime(num);
        // if (r) cout << num << " ";
        return r;
    }
    
    int res = 0;
    for (int i = 0; i < a.size(); ++i)
        if (((mark >> i) & 1) == 0) res += calc(cnt + 1, num * 10 + a[i], mark ^ (1 << i));
    return res;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    string s;
    cin >> s;
    
    for (char c: s)
        if ('0' <= c && c <= '9') a.emplace_back(c - '0');
    
    cout << calc(0, 0, 0);
}

Thảo luận

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 7

Lớp 7 - Năm thứ hai ở cấp trung học cơ sở, một cuồng quay mới lại đến vẫn bước tiếp trên đường đời học sinh. Học tập vẫn là nhiệm vụ chính!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247