Bài tập luyện tập định lý Euclid - Euler về tìm số hoàn hảo chẵn và Lũy thừa nhị phân
Kiểm tra số hoàn hảo chẵn (Euclid)
Nộp bàiPoint: 1
Số hoàn hảo là số nguyên dương mà tổng các ước thực sự của nó (không tính chính nó) bằng chính nó. Theo định lý Euclid - Euler, mọi số hoàn hảo chẵn đều có dạng N = 2^(p-1) * (2^p - 1), trong đó 2^p - 1 là một số nguyên tố Mersenne. Cho T truy vấn, mỗi truy vấn cung cấp một số nguyên dương N. Hãy kiểm tra xem N có phải là số hoàn hảo chẵn hay không. Do số lượng truy vấn rất lớn, bạn cần tìm ra một thuật toán kiểm tra siêu tốc.
Dữ liệu vào: Dòng 1: Số nguyên dương T (1 <= T <= 10^5) là số lượng truy vấn. T dòng tiếp theo: Mỗi dòng chứa một số nguyên dương N (1 <= N <= 2 * 10^18).
Dữ liệu ra: Gồm T dòng, mỗi dòng in ra YES nếu N là số hoàn hảo chẵn, ngược lại in ra NO.
Ví dụ:
Input:
3
6
28
10
Output:
YES
YES
NO
Tìm số hoàn hảo trong đoạn (Euclid)
Nộp bàiPoint: 1
Cho hai số nguyên dương L và R. Hãy tìm và in ra tất cả các số hoàn hảo chẵn nằm trong đoạn [L, R].
Dữ liệu vào: Một dòng duy nhất chứa hai số nguyên dương L và R (1 <= L <= R <= 2 * 10^18).
Dữ liệu ra: In ra các số hoàn hảo chẵn nằm trong đoạn [L, R] theo thứ tự tăng dần, mỗi số trên một dòng. Nếu không có số nào thỏa mãn, in ra -1.
Ví dụ:
Input:
10 500
Output:
28
496
Số hoàn hảo thứ K (Euclid)
Nộp bàiPoint: 1
Dựa vào định lý Euclid - Euler, ta biết rằng một số hoàn hảo chẵn được tạo ra khi và chỉ khi 2^p - 1 là số nguyên tố. Bạn hãy tìm số hoàn hảo chẵn thứ K trong dãy các số hoàn hảo chẵn được sắp xếp tăng dần.
Dữ liệu vào: Một dòng duy nhất chứa số nguyên dương K (1 <= K <= 8).
Dữ liệu ra: In ra số hoàn hảo chẵn thứ K.
Ví dụ:
Input:
2
Output:
28
Kiểm tra số Mersenne (Euclid)
Nộp bàiPoint: 1
Số nguyên tố Mersenne là số nguyên tố có dạng M = 2^p - 1. Cho số nguyên dương p, bạn hãy kiểm tra xem 2^p - 1 có phải là số nguyên tố hay không. Một tính chất quan trọng: Để 2^p - 1 là số nguyên tố thì bản thân p bắt buộc phải là một số nguyên tố (tuy nhiên chiều ngược lại không phải lúc nào cũng đúng, ví dụ p=11 thì 2^11 - 1 = 2047 = 23 * 89 không phải nguyên tố).
Dữ liệu vào: Dòng đầu tiên chứa số nguyên T (1 <= T <= 100) là số lượng test case. T dòng tiếp theo, mỗi dòng chứa một số nguyên dương p (2 <= p <= 31).
Dữ liệu ra: Gồm T dòng, mỗi dòng in ra YES nếu 2^p - 1 là số nguyên tố, ngược lại in ra NO.
Ví dụ:
Input:
3
2
3
11
Output:
YES
YES
NO
Lũy thừa số hoàn hảo
Nộp bàiPoint: 1
Người ta tìm ra được một số nguyên tố p rất lớn sao cho 2^p - 1 là một số nguyên tố Mersenne. Gọi N là số hoàn hảo chẵn được tạo ra từ số p này theo công thức Euclid - Euler. Do N có thể vô cùng lớn, bạn hãy tính giá trị của N chia lấy dư cho 10^9 + 7.
Dữ liệu vào: Một dòng duy nhất chứa số nguyên dương p (2 <= p <= 10^12). Dữ liệu đảm bảo 2^p - 1 là số nguyên tố.
Dữ liệu ra: In ra giá trị của số hoàn hảo N modulo 10^9 + 7.
Ví dụ:
Input:
3
Output:
28
Lũy thừa nhị phân chia dư (đồng dư)
Nộp bàiPoint: 1
Cho a, b, c là các số nguyên dương, hãy tính a lũy thừa b chia dư cho c
Ràng buộc: ~1 \leq a, b, c \leq 10^6~
Input:
2 1000000 10
Tính 2 mũ 1000000 chia dư cho 10
Output:
6
Lũy thừa nhị phân
Nộp bàiPoint: 1
Nhiệm vụ của bạn là tính nhanh giá trị ~a^b~ mod ~10^9+7~
Lưu ý: Trong bài này, giả định rằng ~0^0 = 1~
Đầu vào:
Dòng đầu tiên chứa số nguyên ~n~: số phép tính.
~n~ dòng tiếp theo, mỗi dòng chứa hai số nguyên ~a~ và ~b~
Đầu ra:
In ra n dòng, mỗi dòng là kết quả của phép tính tương ứng.
Ràng buộc:
~1 \le n \le 2 \cdot 10^5~
~0 \le a,b \le 10^9~
Ví dụ :
Input:
3
3 4
2 8
123 123
Output:
81
256
921450052
Lũy thừa nhị phân (chia để trị)
Nộp bàiPoint: 1
Nhiệm vụ của bạn là tính A^K, kết quả được chia dư với 10^9 + 7
Đầu vào: Dòng duy nhất chứa 2 số A và K
Ràng buộc: 1<=N<=10^6; 1<=K<=10^9
Đầu ra: In ra kết quả của bài toán
Input:
9 9
Output:
387420489