๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

MOD ์—ฐ์‚ฐ์˜ ํŠน์„ฑ (๋ถ„๋ฐฐ ๋ฒ•์น™) ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/๊ธฐ์–ตํ•ด๋‘˜ ๊ฒƒ

MOD ์—ฐ์‚ฐ์˜ ํŠน์„ฑ (๋ถ„๋ฐฐ ๋ฒ•์น™)

9taetae9 2023. 9. 27. 17:07
728x90

๋ง์…ˆ

(A+B)%C=(A%C+B%C)%C

 

ex)

(20+6)%3=26%3=2

(20%3+6%3)%3=(2+0)%3=2

 

๋ปด์…ˆ

(A-B)%C=(A%C-B%C)%C

 

ex)

(20-6)%3=14%3=2

(20%3-6%3)%3=(2-0)%3=2

 

๊ณฑ์…ˆ

(A*B)%C=(A%C)*(B%C)%C

 

ex)

(20*6)%3=120%3=0

(20%3)*(6%3)%3=(2*0)%3=0

 

๋‚˜๋ˆ—์…ˆ

(A/B)%C != (A%C)/(B%C)%C => ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Œ

 

ex)

(20/6)%3=3%3=0

(20%3)/(6%3)%3=(2/0)%3=>๋ถ„๋ชจ 0 X 

 

MOD ์—ฐ์‚ฐ์€ ๋ง์…ˆ, ๋ปด์…ˆ, ๊ณฑ์…ˆ์— ๋Œ€ํ•ด์„œ ๋ถ„๋ฐฐ ๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•œ๋‹ค.

=>์ฆ‰, ์ •๋‹ต์„ ๊ตฌํ•œ ๋’ค % ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค %์—ฐ์‚ฐ์„ ํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋„๋ก ํ•˜์ž.

 

๋ฐฑ์ค€ 11051๋ฒˆ (์ดํ•ญ ๊ณ„์ˆ˜ 2) ๋ฌธ์ œ์— ์ด๋ฅผ ์ ์šฉํ•ด๋ณด์ž.

๋ฌธ์ œ:

์ž์—ฐ์ˆ˜ N๊ณผ ์ •์ˆ˜ K๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ดํ•ญ ๊ณ„์ˆ˜ (N K)๋ฅผ 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ:

์ฒซ์จฐ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1<=N<10000, 0<=K<=N)

์ถœ๋ ฅ:

(N K)๋ฅผ 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

1) ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํ’€์ด.

public static void main(String[] args) throws Exception{

    Scanner sc = new Scanner(System.in);

    int N = sc.nextInt();

    int K = sc.nextInt();

    int D[][] = new int[N+1][N+1];

    for(int i=0; i<= N; i++){

      D[i][1]=i;

      D[i][0]=1;

      D[i][i]=1;

    }

    for(int i=2; i<=N; i++){

      for(int j=1; j<i; j++){

        D[i][j] = D[i-1][j] + D[i-1][j-1];

        D[i][j] = D[i][j];

      }

    }

    System.out.println(D[N][K]%10007); =>๋งˆ์ง€๋ง‰์— ํ•œ๋ฒˆ์— %์—ฐ์‚ฐ์„ ์‹œ๋„ํ•จ.

=> ์‹คํŒจ : ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ์ด๋ฏธ ๋ฒ”์œ„ ์ดˆ๊ณผ

 

2) MOD์—ฐ์‚ฐ์˜ ๋ถ„๋ฐฐ๋ฒ•์น™์˜ ์„ฑ์งˆ์„ ์ด์šฉํ•œ ํ’€์ด

public static void main(String[] args) throws Exception{

    Scanner sc = new Scanner(System.in);

    int N = sc.nextInt();

    int K = sc.nextInt();

    int D[][] = new int[N+1][N+1];

    for(int i=0; i<= N; i++){

      D[i][1]=i;

      D[i][0]=1;

      D[i][i]=1;

    }

    for(int i=2; i<=N; i++){

      for(int j=1; j<i; j++){

        D[i][j] = D[i-1][j] + D[i-1][j-1];

        D[i][j] = D[i][j]%10007; => ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค % ์—ฐ์‚ฐ์„ ํ•ด์ฃผ๊ธฐ

      }

    }

    System.out.println(D[N][K]);

**์ •๋‹ต์„ ~๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. => ๋‹จ๊ณ„๋งˆ๋‹ค %์—ฐ์‚ฐํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๋จผ์ € ์‹œ๋„ํ•ด๋ณด์ž.

728x90