Thuật toán số học C++

46 907 0
Thuật toán số học C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thuật toán số học hay C. Thầy Nguyễn Xuân HuyMỤC LỤC 2 Các bài toán nội dung số2 2.1 Sàng Eratosthenes2 2.2 Biểu diễn số6 2.3 Bậc của thừa số11 2.4 Phân tích ra thừa số nguyên tố13 2.5 Bậc của thừa số nguyên tố trong giai thừa19 2.6 Các số 0 tận cùng21 2.7 Bậc của thừa số pk trong giai thừa22 2.8 Bậc của thừa số u trong giai thừa24 2.9 Tổng kết về bậc28 2.10 Tổng ước32 2.11 Tổng kết về ước37 2 Các bài toán nội dung số Ta kí sử dụng các kí hiệu sau đây: Tập các số tự nhiên N = {0, 1, 2, ... } Tập các số nguyên dương Z+ = {1, 2, ... } Tập các số nguyên âm Z = {1, 2, ... } Tập các số nguyên Z = {0, 1, 2, ... } 2.1 Sàng Eratosthenes Cho số nguyên dương n, nếu n là tích của hai số nguyên dương a và b, n = ab, ta nói a (và b) là ước của n. Kí hiệu U(n) là tập các ước của số nguyên dương n, S(n) là số ước của số nguyên dương n. Thí dụ, U(6) = {1, 2, 3, 6}; S(6) = 4. Số nguyên dương p được gọi là nguyên tố nếu p có đúng 2 ước (phân biệt) là 1 và p, S(p) = 2. Hãy liệt kê các số nguyên tố trong khoảng 1..n. Thuật toán Thuật toán dưới đây do Eratosthenes đề xuất: Ghi vào mảng nguyên p toàn bộ số nguyên tố trong khoảng 1 đến n. Bước 1. Viết dãy số 1, 2, …, n. Bước 2. Xóa số 1, vì 1 không phải là số nguyên tố. Bước 3. Lặp từ 2 đến 3.1. Tìm tiếp số i đầu tiên chưa bị xóa: đó là số nguyên tố. 3.2. Xóa các bội của i kể từ i2 đến n Bước 4. Ghi nhận kết quả: Các số không bị xóa đều là nguyên tố. Khởi trị mảng p để ghi nhận các số: nếu p[i] = 0 thì i là số nguyên tố, ngược lại, khi p[i] = 1, tức là khi i bị xoá thì i không phải là số nguyên tố. Sau khi sinh các số nguyên tố ta duyệt lại p và chuyển các số nguyên tố (thoả điều kiện p[i] = 0) lên đầu mảng. Hàm Sieve (sàng) cho ra số lượng các số nguyên tố trong khoảng 1 đến n. Thí dụ int p[21]; int m = Sieve(20); cho ta m = 8: có 8 số nguyên tố trong khoảng 1..20; p[1] = 2; p[2] = 3; p[3] = 5; p[4] = 7; p[5] = 11; p[6] = 13; p[7] = 17; p[8] = 19; Chương trình C++ // Sieve.cpp // m = Sieve(n): cho ra day so nguyen to p[1..m] // trong khoang 1..n #include #include #include using namespace std; const int MN = 500000; // Max(n) = 499999 int p[MN+1]; // The Sieve of Eratosthenes int Sieve(int n) { const int PRIME = 0; const int DELETED = 1; int i, j; memset(p,PRIME,sizeof(p)); p[0] = p[1] = DELETED; int can = int(sqrt(n)); // can nguyen bac 2 cua n for (i = 2; i

Ngày đăng: 15/09/2015, 15:52

Từ khóa liên quan

Mục lục

  • 2 Các bài toán nội dung số

    • 2.1 Sàng Eratosthenes

      • Thuật toán

      • Thí dụ

      • Chương trình C++

      • Chương trình Pascal

      • Độ phức tạp (tính toán)

      • Phát triển

      • Chương trình C++

      • Chương trình Pascal

      • 2.2 Biểu diễn số

        • Thuật toán

        • Thí dụ

        • Chương trình C++

        • Chương trình Pascal

        • 2.3 Bậc của thừa số

          • Thí dụ

          • Thuật toán

          • Chương trình C++

          • Chương trình Pascal

          • 2.4 Phân tích ra thừa số nguyên tố

            • Thí dụ

            • Thuật toán

            • Chương trình C++

            • Chương trình Pascal

Tài liệu cùng người dùng

Tài liệu liên quan