BOJ 13172
Σ ์ฑ๊ณต
1 ์ด 512 MB 2945 1404 1129 46.346% ๋ฌธ์
์ค์ ๋ก ์กด์ฌํ๋์ง ์๋์ง๋ ์ฐจ์นํ๊ณ , ๋น์ ์๊ฒ ์ผ๋ฉด์ฒด ์ฃผ์ฌ์๊ฐ ์์ด์ ์ด ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ๋ค๊ณ ์๊ฐํด๋ณด์. ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ๊ฐ ๋ฉด์ด ๋์ฌ ํ๋ฅ ์ ๋ชจ๋ ๋์ผํ๊ฒ 1/3 ์ด๋ค. ํ ๋ฉด์๋ 1, ๋ค๋ฅธ ํ ๋ฉด์๋ 2, ๋จ์ ํ ๋ฉด์๋ 4๊ฐ ์ ํ์๋ค๊ณ ํ๋ฉด ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ๋์ค๊ฒ ๋๋ ์ซ์์ ๊ธฐ๋๊ฐ์ ๊ณผ์ฐ ๋ช์ผ๊น? ๊ฐ๋จํ๊ฒ๋ ์ ์ ํ๊ท ์ธ 7/3์ด ๋ ๊ฒ์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ํ์ฅํด์, "N๋ฉด์ฒด ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์ ์ ํ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ๊ฐ ๋ฉด์ด ๋์ฌ ํ๋ฅ ์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ๋์ค๊ฒ ๋๋ ์์ ๊ธฐ๋๊ฐ์ ๊ณผ์ฐ ๋ช์ผ๊น?"๋ผ๋ ๋ฌธ์ ๊ฐ ์ฃผ์ด์ก๋ค๊ณ ํ์. ์์ ์์์ ๋ํ ๋ต์ ์์๋ก ์ถ๋ ฅํ๋ค๋ฉด 2.33333333...์ผํ ๋ฐ, ๋ฌดํํ ์๋ฆฟ์๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ ์๋ ์์ผ๋ ์ ๋นํ ๋์ด์ ์ถ๋ ฅํ ๊ฒ์ด๊ณ , ์ด ๋๊ธด ์์๋ฅผ ์ฑ์ ํ๋ก๊ทธ๋จ์ด ๋ค์ ์ ๋ ฅ๋ฐ์์ ์ ๋ต๊ณผ ๋น๊ตํ๋ค๊ณ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ผ๋ง๋ ๋ถ์ ํํ ๊ฒ์ธ๊ฐ? ๊ทธ๋ ๊ธฐ์ ๋ต์ ์ ํํ ํ๋ณํ๊ธฐ ์ํด ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ถ์๋ฅผ ๊ธฐ์ฝ๋ถ์๋ก ๋ง๋ค์ด ๋ถ๋ชจ์ ๋ถ์๋ฅผ ์ง์ ์ถ๋ ฅํ๋๋ก ํ๋ ์๊ธฐ๊ฐ ์์๋ค.
์ด์ ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ๋ ํ์ฅํ์ฌ, M๊ฐ์ ์ฃผ์ฌ์๊ฐ ์์ด์ ์ด ์ค i๋ฒ์งธ ์ฃผ์ฌ์๊ฐ Ni๋ฉด์ฒด ์ฃผ์ฌ์์ด๊ณ ๋ชจ๋ ๋ฉด์ ์ ํ ์๋ฅผ ๋ํ ๊ฐ์ด Si์ผ ๋, ๊ฐ ์ฃผ์ฌ์์ ๋ํด์ ์ฃผ์ฌ์๋ฅผ ๋์ก์ ๋ ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์ด ๋์ฌ ํ๋ฅ ์ด ๋์ผํ๋ค๊ณ ๊ฐ์ ํ ์ํ์์ ๋ชจ๋ ์ฃผ์ฌ์๋ฅผ ๊ฐ๊ฐ ํ ๋ฒ์ฉ ๋์ก์ ๋ ๋์จ ์๋ค์ ํฉ์ ๊ธฐ๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ค์๋ค. ํ๋ฅ ๋ณ์ X์ ๊ธฐ๋๊ฐ์ E(X)๋ก ๋ํ๋ด๋ฉด, ๊ธฐ๋๊ฐ์ ์ ํ์ฑ์ ์ํด์ ๋ ํ๋ฅ ๋ณ์ X, Y์ ๋ํด E(X + Y) = E(X) + E(Y)๊ฐ ์ฑ๋ฆฝํ๋ฏ๋ก, ์ด ๋ฌธ์ ์ ๋ต์ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ๋ํ๋ผ ์ ์๋ค.
S1/N1 + S2/N2 + ... + SM/NM
์ฆ, ๊ฐ ์ฃผ์ฌ์์์ ๋์ค๊ฒ ๋๋ ์์ ๊ธฐ๋๊ฐ์ ๋ชจ๋ ๋ํ๋ฉด ๋ต์ด ๋๋ ๊ฒ์ด๋ค. ์ด ๋ต์ ์ ํํ๊ฒ ์ถ๋ ฅํ๊ธฐ ์ํด, ๋ชจ๋ ๋ถ์(์ฌ๊ธฐ์๋ ๊ฐ ์ฃผ์ฌ์์ ๊ธฐ๋๊ฐ)๋ฅผ ํต๋ถํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ด ๋ถ์์ ๋ถ๋ชจ์ ๋ถ์์ ๊ฐ์ด ์ด๋ค ๋ฒ์๊น์ง ์น์๊ฒ ๋ ๊ฒ์ธ๊ฐ? ์ฆ, ๋ถ๋ชจ์ ๋ถ์๋ฅผ ๋ชจ๋ ์ ์ฅํ๊ณ ์๊ฒ ๋๋ฉด, ๋ ๋ถ์์ ํฉ์ ๊ตฌํ ๋ ๋ถ๋ชจ์ ๋ถ์๋ฅผ ์ ์ ํ ๋ฒ์ ๋ด์์ ๊ณ์ฐํด๋ผ ์ ์๋ค๋ ๋ฌธ์ ์ ๋ถ๋ชํ๊ฒ ๋๋ค. "๊ทธ๋ ๋ค๋ฉด ๋ถ๋ชจ์ ๋ถ์๋ฅผ ์ด๋ค ๋ชจ๋๋ฌ ์์์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋์ง ์์๊น?"๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, ๊ทธ๋ฌ๋ฉด ๋ถ๋ชจ์ ๋ถ์๋ฅผ ์ฝ๋ถํ ์๊ฐ ์๊ฒ ๋๋ค. ๊ทธ๋ ๊ธฐ์, ๋ถ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋๋ฌ ์์์ ํ๋์ ์ ์๋ก ๊ฐ์ง๊ณ ์๋ ๋ฐฉ๋ฒ์ ์ฑํํ๊ฒ ๋์๋ค.
์ด๋ค ๋ถ์๊ฐ ๊ธฐ์ฝ๋ถ์๋ก ๋ํ๋์ ๋ a/b์ด๋ฉด, ์ด ๋ถ์๋ a × b-1 mod X (X๋ ์์)์ผ๋ก ๋์ ๊ณ์ฐํ๋๋ก ํ๋ค. ์ฌ๊ธฐ์ b-1์ b์ ๋ชจ๋๋ฌ ๊ณฑ์ ์ ๋ํ ์ญ์์ด๋ค.
b์ ๋ชจ๋๋ฌ ๊ณฑ์ ์ ๋ํ ์ญ์ b-1์ ๋์ฒด ์ด๋ค ์์ธ ๊ฒ์ผ๊น? ์ด ์๋ ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ ๋ง์กฑํ๋ ์ ์์ด๋ค.
b-1 × b ≡ 1(mod X)
์์ ๋ชจ๋๋ฌ์์๋ง ์ฑ๋ฆฝํ๋ ํ๋ฅด๋ง์ ์์ ๋ฆฌ์ ์ํด bX - 1 ≡ 1 (mod X)๊ฐ ์ฑ๋ฆฝํ๊ธฐ์, bX - 2 ≡ b-1 (mod X) ์ญ์ ์ฑ๋ฆฝํจ์ ์ ์ ์๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด X๋ฅผ 11๋ก ๋๊ณ Q = 7/3 ์ ๊ณ์ฐํด๋ณด์. 3-1 ≡ 4 (mod 11)์ด๋ฏ๋ก, Q ≡ 7 × 4 ≡ 6 (mod 11)์ด๋ค. ์ด Q์ 3์ ๊ณฑํ ๋ค์ 11๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํด ๋ณด๋ฉด 7์ด ๋์ค๋ฏ๋ก, 6์ด๋ผ๋ ์ ์๊ฐ 7/3์ ์ ์ ํ ์ ์ฅํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ถ์(์ ๋ฆฌ์)๋ฅผ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ํ๋ธ๋ค๋ฉด, ๋ ๋ถ์์ ๋ง์ , ๋บ์ , ๊ณฑ์ ์ mod X์์ ๋ ์ ์๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐํ๋ฏ์ด ์ฒ๋ฆฌํ๊ณ , ๋๋์ ์ ๋๋๋ ๋ถ์์ ๊ณฑ์ ์ ๋ํ ์ญ์์ ๊ตฌํ ํ ๊ทธ ์ญ์์ mod X์์ ๊ณฑํ๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด, ๋ถ์๋ฅผ ์ ํํ ์ถ๋ ฅํ๊ธฐ ์ํด ํต๋ถ์ ํ๊ฑฐ๋ ๊ธฐ์ฝ๋ถ์๋ก ๋ง๋๋ ๊ณจ์น์ํ ์ผ์ ํ ํ์๊ฐ ์์ด์ง๋ค!
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์์ ์์์ 7/3์ 6์ผ๋ก ์ ์ฅํ์ง๋ง, ๊ทธ๋ฅ 6/1๋ 6์ผ๋ก ์ ์ฅํ ๊ฒ์ด๋ค. ์ฆ ์๋ก ๋ค๋ฅธ ๋ ๋ถ์๋ ๋ชจ๋๋ฌ ์์์ ๊ฐ์ ์ ์๋ก ์ ์ฅํ์ฌ, ์ ํํ ํ๋ณ์ ํ๋ค๋ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ๋ถํฉํ์ง ์๋ ๊ฒ์ด๋ค. ๋๋ค๋ฅธ ๋ฌธ์ ๋ก๋, ๋ถ๋ชจ๊ฐ ์์ธ์๋ก X๋ฅผ ๊ฐ์ง ๋์๋ ์ญ์์ ๊ณ์ฐํ ์ ์์ด์ ๋ชจ๋๋ฌ๋ก ๋ํ๋ผ ์๊ฐ ์๋ค๋ ์ ์ด ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋๋ฌ๋ฅผ 1,000,000,007์ ๊ฐ์ ํฐ ์์๋ก ํ๋๋ฐ, ์ด๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ๋ ๋ถ์๊ฐ ๊ฐ์ ์ ์๋ก ๋ํ๋๊ฒ ๋๋ ํ๋ฅ ์ ๋ฎ์ถ๊ณ , ๋ถ๋ชจ๊ฐ ๊ฐ์ง ์ ์๋ ์์ธ์์ ๋ฒ์๋ฅผ ๋๋ฆฌ๋ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค. ๊ทธ๋ ์ด๋ฐ ๋ฐฉ์์ด ๊ทธ๋๋ ๊ฐ์ฅ ์ ํํ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋์๋ค.
์ด์ ์ด ๋ฐฉ์์ผ๋ก M ๊ฐ์ ์ฃผ์ฌ์๊ฐ ์๊ณ , i๋ฒ์งธ ์ฃผ์ฌ์๊ฐ Ni๋ฉด์ฒด ์ฃผ์ฌ์์ด๋ฉฐ, ๋ชจ๋ ๋ฉด์ ์ ํ ์ซ์๋ฅผ ๋ํ ๊ฐ์ด Si์ผ ๋, ๊ฐ ์ฃผ์ฌ์์ ๋ํด์ ์ฃผ์ฌ์๋ฅผ ๋์ก์ ๋ ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์ด ๋์ฌ ํ๋ฅ ์ด ๋์ผํ๋ค๋ฉด, ๋ชจ๋ ์ฃผ์ฌ์๋ฅผ ํ ๋ฒ์ฉ ๋์ก์ ๋ ๋์จ ์ซ์๋ค์ ํฉ์ ๊ธฐ๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ฃผ์ฌ์์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ M(1 ≤ M ≤ 104)์ด ์ฃผ์ด์ง๋ค.
๋ค์ M๊ฐ์ ์ค์ ๊ฐ ์ฃผ์ฌ์์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด ์ค i(1 ≤ i ≤ M)๋ฒ์งธ ์ค์๋ Ni, Si(1 ≤ Ni, Si ≤ 109)๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๋ชจ๋ ์ฃผ์ฌ์๋ฅผ ํ ๋ฒ์ฉ ๋์ก์ ๋ ๋์จ ์ซ์๋ค์ ํฉ์ ๊ธฐ๋๊ฐ์ ์ถ๋ ฅํ๋ค. ์ ํํ ํ๋ณ์ ์ํด, ๋ต์ ๊ธฐ์ฝ๋ถ์๋ก ๋ํ๋ด์์ ๋ a/b๊ฐ ๋๋ค๋ฉด, (a × b-1) mod 1,000,000,007์ ๋์ ์ถ๋ ฅํ๋๋ก ํ๋ค. b-1์ b์ ๋ชจ๋๋ฌ ๊ณฑ์ ์ ๋ํ ์ญ์์ด๋ค. ์ด ๋ฌธ์ ์์๋ ๊ฐ๋ฅํ ๋ชจ๋ ์ ๋ ฅ์ ๋ํด ๋ต์ด ์กด์ฌํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
1 3 7
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
333333338
ํํธ
๋ชจ๋๋ฌ๊ฐ 11์์ 1,000,000,007์ด ๋์ด ๋ต์ด ๋ฌ๋ผ์ก์ง๋ง, ์ญ์ 3์ ๊ณฑํ ๋ค์ 1,000,000,007์ผ๋ก ๋๋ ๋๋จธ์ง๋ 7์ด ๋๋ค.
๋ณธ๋ฌธ ์ฝ๊ณ ์ดํดํ๋๋ฐ๋ง ์ธ์๊ฐ์ ๊ฑธ๋ฆฐ๊ฑฐ๊ฐ๋ค.
์ผ๋จ ์ญ์ Notation์ด ๊ต์ฅํ ๋ง์์ ์๋ ๋ค. ์ญ์์ B^-1 ๋ก ํ๊ธฐํด๋จ๋๋ฐ ์ ์๋ก ์ฌ์ ์ง์์ด ์๋ค๋ณด๋๊น ํ๋ฅด๋ง ์์ ๋ฆฌ ๊ณต์๊ณผ ์ด๊ฒ ๋๋ฌด ํท๊ฐ๋ ธ๋ค.
bX - 1 ≡ 1 (mod X)๊ฐ ์ฑ๋ฆฝํ๊ธฐ์, bX - 2 ≡ b-1(mod X)
ํนํ ์ด ํ๊ธฐ๊ฐ ์ ์ดํด๊ฐ ์๋๋ค.
์ ์์ b^X-2๋ ๊ฑฐ๋ญ์ ๊ณฑ์ ์๋ฏธํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ, ํ์์ b^-1์ ๋ชจ๋๋ฌ ์ญ์์ ํด๋นํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๋ชจ๋๋ฌ ์ฐ์ฐ์์์ ํฉ๋์์ ๊ธฐํธ๋ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ์ ์๋์๋, ๋นก๋๊ฐ๋ฆฌ๋ผ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ํ๋ฅด๋ง ์์ ๋ฆฌ ์์ฒด๋ ์ดํด๋๋๋ฐ ์ญ์์ ํ๊ธฐ๊ฐ ์ ์ดํด๋์ง ์๋ ๊ฒ ๊ฐ๋ค. ๋ชจ๋๋ฌ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฉด ์ ์๊ฐ ๋์ค๋๊ฒ ๋ง๋๋ฐ ์ -1์น์ผ๋ก ํ๊ธฐํ๊ฑฐ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ฑธ๋ก ๊ฐ์๊ธฐ ๊ฑฐ๋ญ์ ๊ณฑ ์ฐ์ฐ์ ์ ์ฉ์ ์ํค๋์ง.
๊ณต๋ถ๋ฅผ ๋ํด์ผ๊ฒ ๋ค. ๊ทธ๋ฅ ์ฝ์์ผ ์๋ ์๋๋ฐ ๋ญ๊ฐ ๋ถํธํ๋ค.
PS๋ฅผ ์ํ ์ ์๋ก - (3) ํ๋ฅด๋ง์ ์์ ๋ฆฌ์ ํ์ฉ (์ดํญ ๊ณ์, ๋ฐ๋ฌ-๋ผ๋น)
[๋ชฉ์ฐจ] 1. ํ๋ฅด๋ง์ ์์ ๋ฆฌ 2. ์ค์ผ๋ฌ ์ ๋ฆฌ 3. ํ์ฉ 1) ์ดํญ ๊ณ์ nCr ๋น ๋ฅด๊ฒ ๊ตฌํ๊ธฐ 4. ํ์ฉ 2) ๋ฐ๋ฌ-๋ผ๋น(Miller-Rabin) ์์ ํ๋ณ๋ฒ 1. ํ๋ฅด๋ง์ ์์ ๋ฆฌ (Fermat's little theorem) ํ๋ฅด๋ง์ ์์ ๋ฆฌ๋ ๋ค์๊ณผ..
rebro.kr
์ ์๋ก ๊ณต๋ถ์ข ํด์ผ๊ฒ ๋ค.
#include <iostream>
#include <algorithm>
#include <numeric>
using namespace std;
int M, ans;
long long func(int a, int power){
if(power == 1){
return a%1000000007;
}
if(power % 2 == 1){
return a * func(a,power-1) % 1000000007;
}else{
long long b = func(a, power/2)%1000000007;
return b * b %1000000007;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>M;
while(M--){
int N, S;
cin>>N>>S;
int gc = gcd(N,S);
N /= gc;
S /= gc;
ans += S * func(N, 1000000005) % 1000000007;
ans %= 1000000007;
}
cout<<ans;
}