hix , tui là girl đấy nhá . Khổ lắm nói mãi . Thế bạn tìm đc cái biến nào mà chứa nổi 10000! thì tui tính tích ra ngay cho . qword cũg chỉ chứa đc 18 chữ số thôi . Có thể lưu vô mảg , để tui nghiên cứu đã , sẽ post code sau . Phần phân tích của đoạn code trên nà
Code:
1000!=2.3.4.5...10000
Mà mỗi số tự nhiên có đặc điểm là có thể biểu diễn bằng tích của các số nguyên tố, nếu nó là số nguyên tố rùi thì nó đc biểu diễn bằng chính nó nhân với 1
VD:
54=2*3*3*3
7=7*1
Giờ bài toán đặt ra là tính giai thừa của 1 số lớn, mà nếu lớn thì ko có biến nào chứa nổi, vì thế nên biểu diễn= tích của các số nguyên tố.
VD:
66=2*3*11
Trong đó 2, 3, 11 là các số nguyên tố
Tính theo dãy số nguyên tố thì đc sắp xếp như sau:
2 3 5 7 11
ta thấy số 2,3,11 mỗi số xuất hiện 1 lần trong tích
vì thế nên file out có dạng:
1 1 0 0 1
0 là ko xuất hiện lần nào, vì 5 và 7 ko xuất hiện
còn 2 3 11 thì xuất hiện 1 lần nên in ra số lần xuất hiện
nên ch.trình của ta sẽ là
Cho 1 biến i chạy từ 2 đến n (1 k là số nguyên tố => chạy từ 2 ) , và mỗi giá trị của i thì gọi thủ tục Xuly(i:integer) 1 lần
Trong phần xử lí ta sẽ làm như sau:
cho biến t=2, t sẽ là các số nguyên tố mà số i sẽ chia hết, nếu ko chia hết thì cứ tăng t lên và thế mà chia cho đến khi i=1 thì thui
dùng mảng a để lưu số lần xuất hiện của t, sẽ đc tính là a[t], và dùng 1 mảng đánh dấu là dd để bỏ wa ko in ra cái t ko phải là số nguyên tố khi tăng t 1 đơn vị ngẫu nhiên wa mỗi vòng lặp nếu i ko chia hết cho t.
Phần in ra, ta cho i chạy từ 2 đến t, nếu dd[t]=true { xác định t là số nguyên tố} thì mới in ra a[t] { là số lần xuất hiện của t đc lưu trong mảng a}
Hết.
Bookmarks