๋ฌธ์
์ค๋ฏผ์ ์ฑ๊ณต
์ค๋ฏผ์์ ๋ง์กฑํ๋ ์: 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์์ฐ์๋ก ๋๋์ด ๋จ์ด์ง๋ ์.
์์์ด์ ๋ค์์ด๋ N์ด ์ฃผ์ด์ก์ ๋, ์ค๋ฏผ์์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ ์๊ฐ ๊ถ๊ธํด์ก๋ค. ๊ทธ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค. N์ 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ํด ์ค๋ฏผ์์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ ์์ฐ์๋ฅผ 987654321๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
1 ๋ถํฐ ์ฐ์๋๋ ์ฆ๊ฐํ๋ ์ ์๋ค์ ๊ณฑ์ ์์ ์ต์๊ณต๋ฐฐ์๊ฐ ์๊ธฐ๋ ๊ท์น์ ์ฐพ์ผ๋ฉด ๋ฌธ์ ๊ฐ ํ๋ฆฐ๋ค.
๋ชจ๋ ์๋ 1๋ก ๋๋์ด ๋จ์ด์ง๋ฏ๋ก 1์ ์ ์ธํ๊ณ , 2๋ถํฐ ์ฐ์ํด์ ๋์ดํด๋ณด๋ฉด
2, 3, 2^2, 5, 2 * 3, 7, 2^3, 3^2 ์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
์์๋๋ก ๊ณฑํด๊ฐ๋ฉด์ ์ต์๊ณต๋ฐฐ์๋ฅผ ํ์ธํ๋ฉด ์ฐ์ ์ ์ผ๋ก
1. lcm(a, b) = (a * b) % gcd(a, b) ์ด๋ค. a, b๊ฐ ์๋ก์์ด๋ฉด gcd(a, b)๋ 1์ด๊ณ , a, b์ค ํ๋๊ฐ ์์๋ผ๋ฉด ํญ์ ์๋ก์์ด๋ฏ๋ก
a, b ๋์ค ํ๋๊ฐ ์์๋ผ๋ฉด lcm(a, b) = a * b์ด๋ค. ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
2. lcm(a, b) = (a * b) % gcd(a, b)๋ฅผ ๋ค์ ๊ธฐ์ตํด์, ์์์ N์น์ ํด๋นํ๋ ์์ฐ์๊ฐ ๋์ค๋ฉด lcm ๊ณ์ฐ ๊ณผ์ ์์ ํญ์ gcd๋ก mod ์ฐ์ฐ์ ํด์ฃผ์๊ธฐ ๋๋ฌธ์ ํน์ ์์์ N - 1์น ๊น์ง๋ง ์ต์๊ณต๋ฐฐ์๊ฐ ๋ง์กฑํ๊ณ ์๋ค๋ ์ฌ์ค ์ ์์์๋ค.
์๋ฅผ ๋ค์ด, 1 ๋ถํฐ 7 ๊น์ง ๊ณฑํ์๋ ์ด์ ์ ๊ณ์ฐ ๊ณผ์ ์ ๋ฐ๋ผ 2^2 * 3 * 5 * 7 ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. 8์ 2^3์ด๊ณ , lcm์์ 2๊ฐ ํ๋ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ ๊ตฌํํ๋ฉด ๋๋ค.
#include <iostream>
#include <vector>
#define ll long long
using namespace std;
int isPrime[1000001], isTime[1000001];
vector<int>priArr;
void pcheck() {
for(int i=2; i <= 1000000; i++) isPrime[i] = i;
for(int i=2; i*i <=1000000; i++) {
if(!isPrime[i]) continue;
for(int j = i*i; j<=1000000; j += i) isPrime[j] = 0;
}
for(int i=2; i<=1000000; i++)
if(isPrime[i]) priArr.push_back(i);
}
int main() {
ll a = 1, N;
cin>>N;
pcheck();
for(auto e : priArr) {
long long check = e;
while(check * e <= 1000000){
check = check * e;
isTime[check] = e;
}
}
for(int i=1; i<=N; i++){
if(isPrime[i])
a = (a*i)%987654321;
else {
if(isTime[i])
a = (a*isTime[i])%987654321;
}
}
cout<<a;
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1987 (1) | 2024.06.12 |
---|---|
Codeforces Round 938 (Div. 3) (0) | 2024.05.02 |
BOJ 3197 (0) | 2024.03.24 |
BOJ 6087 (1) | 2024.03.20 |
BOJ 5615 (0) | 2024.03.15 |