Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 프로그래밍에서 인접한 그림의 색상이 동일하지 않도록 N 그림을 그리는 방법

<시간/>

이 문제에서는 N개의 그림이 주어지고 그림을 그릴 수 있는 m개의 색이 있고 같은 색 그림이 서로 겹치지 않도록 그림을 그릴 수 있는 방법의 수를 찾아야 합니다.

프로그램의 출력은 매우 큰 값을 가질 수 있으며 이러한 값을 처리하는 것은 약간 문제가 있으므로 표준 모듈로 10 9 으로 답을 계산합니다. +7.

수식을 구하는 공식은 다음과 같습니다.

Ways = n*(m-1)(n-1)

문제를 설명하는 예는 그림 수 n과 색상 수 m이 필요합니다.

입력

n = 5 ,m = 6

출력

3750

예시

#include <iostream>
#include<math.h>
#define modd 1000000007
using namespace std;
unsigned long find(unsigned long x,
unsigned long y, unsigned long p) {
   unsigned long res = 1;
   x = x % p;
   while (y > 0) {
      if (y & 1)
         res = (res * x) % p;
      y = y >> 1;
      x = (x * x) % p;
   }
   return res;
}
int ways(int n, int m) {
   return find(m - 1, n - 1, modd) * m % modd;
}
int main() {
   int n = 5, m = 6;
   cout<<"There are"<<ways(n, m)<<"ways";
   return 0;
}

출력

There are 3750 ways