algorithm

BOJ 13172

rkawk 2022. 9. 29. 20:20
๋”๋ณด๊ธฐ

Σ ์„ฑ๊ณต

 
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์Šน์œผ๋กœ ํ‘œ๊ธฐํ•œ๊ฑฐ์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ๋กœ ๊ฐ‘์ž๊ธฐ ๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ์— ์ ์šฉ์„ ์‹œํ‚ค๋Š”์ง€.

๊ณต๋ถ€๋ฅผ ๋”ํ•ด์•ผ๊ฒ ๋‹ค. ๊ทธ๋ƒฅ ์•ฝ์†์ผ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๋ญ”๊ฐ€ ๋ถˆํŽธํ•˜๋‹ค.

 

https://rebro.kr/105

 

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;
}