SỐ HUYỀN BÍ – MYSTERY – SPOJ | LÀM HẾT MÌNH
LÀM HẾT MÌNH – VÌ CHÍNH MÌNH
Bỏ qua nội dung ← KHỐI LẬP PHƯƠNG LỚN NHẤT – MAXCUB – SPOJ VÒNG SỐ NGUYÊN TỐ – PCIRCLE – SPOJ →
Bỏ qua nội dung ← KHỐI LẬP PHƯƠNG LỚN NHẤT – MAXCUB – SPOJ VÒNG SỐ NGUYÊN TỐ – PCIRCLE – SPOJ → SỐ HUYỀN BÍ – MYSTERY – SPOJ
Đăng trong 11/06/2014 bởi connhangheovodanhĐỀ BÀI :
SỐ HUYỀN BÍ – MYSTERY – SPOJ
Đất nước Văn Lang thời cổ xưa đã có những hiểu biết tân tiến về số học. Tương truyền rằng, vua Hùng Vương thứ 17 cùng các trưởng lão trong triều đình đã phát minh ra các số huyền bí. Các số này giúp chỉ dẫn đường vào kho tàng của đất nước.
Theo các chứng tích khảo cổ, các nhà khoa học kết luận rằng số huyền bí cơ sở a bằng tích của (3d-1) với mọi ước số d > 0 của a.
Bờm thích số học đồng thời cũng rất thích tìm hiểu lịch sử đất nước. Bạn hãy giúp Bờm tính số huyền bí cơ sở a (1 ≤ a ≤ 109). Do kết quả có thể rất lớn, bạn chỉ cần in ra phần dư của số huyền bí cơ sở a khi chia cho 20122007.
Dữ liệu
Gồm một số nguyên a duy nhất.
Kết qủa
In ra số nguyên duy nhất là phần dư của số huyền bí cơ sở a khi chia cho 20122007.
Ví dụ
Dữ liệu: 10 Kết qủa 7291779THUẬT TOÁN :
Ta có một số nhận xét như sau. Để tính được nghiệm của bài toán thì chỉ cần for 1 vòng từ 1 -> √n rồi tính 3^i-1 và 3^(n/i)-1 nhân lại rồi nhân vào res thôi. Chú ý khi nó là số chính phương thì căn của nó chỉ tính 1 lần thôi nha! Khi đó thực hiện trong O(sqrt(N))
Bây giờ là tính 3^i -1 bằng cách nào. Nếu vét thì trường hợp xấu nhất là O(10^9) chết ngắt. Nhận xét 3^9 = 3^4 x 3^4 x 3 mà 3^4 = 3^2 x 3^2 … dùng đệ qui bình thường trong thời gian log2(i) thôi mà log2(10^9) = 29 (nhỏ xíu như hạt đậu ấy).
Vậy khi đó tổng thời gian thuật toán không quá O(sqrt(N)*log2(N)) < 10^6 dư sức chạy.
Chú ý một điều (3^d-1) mod base = ((3^d mod base) – 1) mod base nên ta yên tâm tính 3^d trước rồi mới tính 3^d-1.
CODE :
#include <iostream> #include <fstream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #define ll long long using namespace std; const int base = 20122007; ll n,res = 1; ll g(int x) { if (x == 1) return 3; ll tmp = g(x/2) % base; if (x % 2 == 0) return (tmp*tmp) % base; return ((tmp*tmp % base)*3) % base; } ll f(int x) { return (g(x) - 1 + base) % base; } int main() { scanf("%lli",&n); for (int i=1;i*i<=n;i++) { if (n % i == 0) { if (i*i == n) res = res*f(i) % base; else res = ((res*f(i) % base) * f(n/i)) % base; } } printf("%lli",res); return 0; }Chia sẻ:
- X
Có liên quan
Bài này đã được đăng trong Spoj. Đánh dấu đường dẫn tĩnh. ← KHỐI LẬP PHƯƠNG LỚN NHẤT – MAXCUB – SPOJ VÒNG SỐ NGUYÊN TỐ – PCIRCLE – SPOJ →1 Response to SỐ HUYỀN BÍ – MYSTERY – SPOJ
-
Ẩn danh nói: 11/06/2014 lúc 9:24 Chiều
page này hay đó
Bình luận về bài viết này
- Tìm kiếm cho:
Thống kê
- 291 004 lượt xem
-
Bài viết mới
- SPOJ – Tin mật – SEC 02/04/2015
- SPOJ – Chuỗi từ – CHAIN2 30/03/2015
- SPOJ – ACM – ACMNB 27/03/2015
- SPOJ – Chuỗi ốc – BEADSNB 27/03/2015
- Codeforces – Tutorial For Contest Nowruz challenge 25/01/2015
- SPOJ – Phần tử thứ K – YPKTH 24/01/2015
- SPOJ – Cuộc đấu cân não – NCOB 20/01/2015
- SPOJ – Time Travel – TTRAVEL 20/01/2015
- SPOJ – Tập hợp động – CPPSET (cơ bản về set) 20/01/2015
- SPOJ – Dãy số may mắn – NKLUCK 15/01/2015
- SPOJ – Above the Median – KMEDIAN 13/01/2015
- SPOJ – LUBENICA – LUBENICA 11/01/2015
- SPOJ – Lowest Common Ancestor – LCA 11/01/2015
- SPOJ – Tăng tốc mạng máy tính – NETACCEL 11/01/2015
- SPOJ – Floyd hoặc Dijkstra ( Cơ bản ) – FLOYD 11/01/2015
Follow
Enter your email address to follow this blog and receive notifications of new posts by email.
Địa chỉ email:
Theo dõi
Tham gia cùng 26 người đăng ký khácLượt nhấp chuột hàng đầu
- ideone.com/PQN4Dl
- vn.spoj.com/problems/SEC
- Tìm kiếm cho:
Liên kết
- Tạo tài khoản
- Đăng nhập
- RSS bài viết
- RSS bình luận
- WordPress.com
- Bình luận
- Đăng lại
- Theo dõi Đã theo dõi
-
LÀM HẾT MÌNH - VÌ CHÍNH MÌNH Đã có 26 người theo dõi Theo dõi ngay - Đã có tài khoản WordPress.com? Đăng nhập.
-
-
-
LÀM HẾT MÌNH - VÌ CHÍNH MÌNH - Theo dõi Đã theo dõi
- Đăng ký
- Đăng nhập
- URL rút gọn
- Báo cáo nội dung
- Xem toàn bộ bài viết
- Quản lý theo dõi
- Ẩn menu
-
Từ khóa » Số Huyền Bí Pascal
-
Số Huyền Bí Lập Trình Pascal, Giải đề Thi Hsg Tin Học - YouTube
-
Số Huyền Bí - VNOJ: VNOI Online Judge
-
MYSTERY Spoj - Số Huyền Bí - Kiến Thức 24h
-
Số Huyền Bí Lập Trình Pascal, Giải đề Thi Hsg Tin Học
-
Tin Học - Pascal | Tính Số Huyền Bí Cơ Sở - HOCMAI Forum
-
Problem MYSTERY
-
Pascal: Số Huyền Bí Của N Là Tích Của ((3^d)
-
Số Huyền Bí Lập Trình Pascal, Giải đề Thi Hsg Tin Học - ArabXanh
-
Số Huyền Bí Lập Trình Pascal, Giải đề Thi Hsg Tin Học
-
MYSTERY - Số Huyền Bí - Tutorial SPOJ
-
Soi Cau Pascal