Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
408,13 KB
Nội dung
Kiểm tra số nguyên tố + Định nghĩa: Là số nguyên lớn 1, có ước Các số ngun tố từ 1100: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 + Thuật toán: Để kiểm tra số nguyên n có phải số nguyên tố hay không, ta làm theo bước - Nếu n> KMP("abcabcabcabc", "cabc") Match at position Match at position Match at position Điểm thú vị cuối là, ký tự chuỗi s so sánh với nhiều gọi delay thuật tốn), tỉ lệ vàng! (đại lượng + Code hoàn chỉnh: Visual C# Code: using System; namespace Knuth_Morris_Pratt { class Test { private char[] s; private char[] p; public void Nhap() { Console.Write("Nhap xau S:"); string stdin1 = Console.ReadLine(); s = new char[stdin1.Length]; s = stdin1.ToCharArray(); Console.Write("Nhap xau P:"); string stdin2 = Console.ReadLine(); p = new char[stdin2.Length]; p = stdin2.ToCharArray(); } private int[] compute_MP_map() // map[i]=| border(p[0 i-1]) | { int m = p.Length; // p is the input pattern int[] MP_map = new int[m + 1]; // lưu ý ta phải tính map[0 m] // init MP_map[0] = -1; // hiểu // bay gio di tinh map[1 m] int i = 0; int j = MP_map[i]; while (i < m) { while (j >= && (p[i] != p[j])) j = MP_map[j]; j++; i++; MP_map[i] = j; } return MP_map; } private int[] compute_KMP_map() //thuật toán KMP cải tiến { int m = p.Length; int[] KMP_map = new int[m + 1]; int[] MP_map = compute_MP_map(); KMP_map[0] = -1; KMP_map[m] = MP_map[m]; for (int i = 1; i < m; i++) { int j = MP_map[i]; if (p[i] != p[j]) KMP_map[i] = j; else KMP_map[i] = MP_map[j]; } return KMP_map; } public void Morris_Pratt() { int[] map = compute_KMP_map(); int n = s.Length; int m = p.Length; int i = 0; string res = ""; for (int j = 0; j < { while ((i >= 0) i++; (i=m-1) i=-1 , lợi dụng if (i == m) { res += (j i = map[i]; } } Console.Write(res); } n; j++) && (p[i] != s[j])) i = map[i]; // Có khả xảy ra: hết chuỗi p điều m + 1).ToString() + " "; static void Main(string[] args) { Test object1 = new Test(); object1.Nhap(); object1.Morris_Pratt(); //Console.WriteLine("done"); Console.ReadLine(); } } } Liệt kê dãy nhị phân có độ dài n + Ví dụ: n=3 ta có dãy nhị phân sau Code: 0 0 1 1 0 1 0 1 1 1 + Tác giả: CayDan + Code: - Phương pháp sinh: C Code: void LKNhiPhan(int n) { int x[30]; for (int i=0; i=0) { for (i=0; i=0) && (x[i] == 1)) i ; if(i>=0) { x[i] = 1; for (int j= i+1; j