Trang chủ Tin Học Lớp 10 Nhập một số n,kiểm tra số n bằng phương pháp...

Nhập một số n,kiểm tra số n bằng phương pháp miller câu hỏi 3644865 - hoctapsgk.com

Câu hỏi :

Nhập một số n,kiểm tra số n bằng phương pháp miller

Lời giải 1 :

#include <iostream>
using namespace std;

#define int __int128
template <class T>
void readInt(T& num) {
    num = 0;
    char c = getchar();
    while (c != '-' && ('0' > c || '9' < c)) c = getchar();
    bool neg = false;
    if (c == '-') neg = true, c = getchar();
    for(num = 0; '0' <= c && c <= '9'; c = getchar()) num = (num << 1) + (num << 3) + (c - '0');
    if (neg) num = -num;
}

template <class T>
istream& operator>>(istream& i, T& x) {
    readInt(x);
    return i;
}

ostream& operator<<(ostream& o, const __int128& x) {
    if (x < 0) return o << "-" << -x;
    if (x < 10) return o << (char)(x + '0');
    return o << x / 10 << (char)(x % 10 + '0');
}

/* ==================================== */

int power(int A, int N, int M) {
    int 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(int A, int s, int d, int N) {
    if (N == A) return true;
    int 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;
}

bool prime(int x) {
    if (x <= 1) return false;
    if (x % 2 == 0) return x == 2;
    if (x % 3 == 0) return x == 3;

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

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

    return true;
}

/* ====================================== */

signed main() {
    int n; cin >> n;
    cout << prime(n);
}

Thảo luận

-- code mình có sẵn rồi mà :))
-- ;-;
-- mà công nhận cái mr test này nhanh thật :))
-- Đúng mà mình mún code lắm mà ko bt code sao '-'
-- #define int __int128 template <class T> void readInt(T& num) { num = 0; char c = getchar(); while (c != '-' && ('0' > c || '9' < c)) c = getchar(); bool neg = false; if (c == '-') neg = true, c = getchar(); for(num = 0; '0' <= c... xem thêm
-- nhập cho các loại int và xuất của __int128 :))
-- Thank nha
-- bạn ơi cho mình hỏi signed main với int main khác gì nhau ạ

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ự 10

Lớp 10 - Năm thứ nhất ở cấp trung học phổ thông, năm đầu tiên nên có nhiều bạn bè mới đến từ những nơi xa hơn vì ngôi trường mới lại mỗi lúc lại xa nhà mình hơn. Được biết bên ngoài kia là một thế giới mới to và nhiều điều thú vị, một trang mới đang chò đợi chúng ta.

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK