minhbuonacc123
Giới thiệu
include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 20232024;
// Hàm kiểm tra số nguyên tố
bool is_prime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// Hàm tính lũy thừa nhanh với modulo
ll mod_pow(ll base, ll exp, ll mod) {
ll result = 1;
base = base % mod; // Xử lý trường hợp base lớn hơn mod
while (exp > 0) {
if (exp % 2 == 1) { // Nếu exp là lẻ
result = (result * base) % mod;
}
base = (base * base) % mod;
exp /= 2;
}
return result;
}
// Hàm tìm các ước nguyên tố của n
vector<int> find_prime_factors(int n) {
vector<int> prime_factors;
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0 && is_prime(i)) {
prime_factors.push_back(i);
}
// Chia hết cho i, tiếp tục chia
while (n % i == 0) {
n /= i;
}
}
if (n > 1 && is_prime(n)) {
prime_factors.push_back(n);
}
return prime_factors;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
// Đọc đầu vào
int n;
cin >> n;
// Tìm các ước nguyên tố của n
vector<int> prime_factors = find_prime_factors(n);
// Nếu không có ước nguyên tố nào, số Cool(n) = 1
if (prime_factors.empty()) {
cout << 1 << endl;
return 0;
}
ll result = 1;
// Tính số Cool(n) với các ước nguyên tố
for (int d : prime_factors) {
ll term = (mod_pow(3, d, MOD) + d) % MOD; // Tính (3^d + d) % 20232024
result = (result * term) % MOD; // Nhân và lấy phần dư theo MOD
}
// In ra kết quả
cout << result << endl;
return 0;
}