소수들의 N 이하 거듭제곱들 중 최댓값들의 곱으로 나타내기.
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
int N;
long long ans = 1;
long long BIG = pow(2, 32);
vector<bool> primes;
vector<int> v;
void getPrimes(int n) {
for (int i = 2; i * i <= n; i++) {
if (!primes[i])
continue;
for (int j = 2 * i; j <= n; j += i) {
primes[j] = false;
}
}
}
void input() {
cin >> N;
primes.resize(N + 1, true);
}
void solve(){
v.push_back(2);
for(int i = 3; i <= N; i++){
if(primes[i]) v.push_back(i);
}
long long p;
for(int i = 0; i < v.size(); i++){
p = v[i];
while(p * v[i] <= N){
p *= v[i];
}
ans = (ans * p) % BIG;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
input();
getPrimes(N);
solve();
cout << ans % BIG;
return 0;
}
