Розбір
Аналіз алгоритму
В перший ящик можна покласти будь-який з м'ячів. Колір м'яча у другому ящику не повинен збігатися з кольором у першому. Тому в другий ящик можна покласти будь-який м'яч із кольорів. В -ий ящик можна покласти м'яч будь-якого кольору, який не збігається з кольором м'яча в -ому ящику.
Таким чином кількість різних розташувань м'ячів по ящиках дорівнює
Реалізація алгоритму
Визначимо модуль, за яким будуть проводитися обчислення.
#define MOD 1000000007
Функція powmod
обчислює значення .
long long powmod(long long x, long long n, long long m) { if (n == 0) return 1; if (n % 2 == 0) return powmod((x * x) % m, n / 2, m); return (x * powmod(x, n - 1, m)) % m; }
Основна частина програми. Читаємо вхідне значення .
scanf("%lld", &n);
Обчислюємо та виводимо відповідь.
res = (powmod(n - 1, n - 1, MOD) * n) % MOD; printf("%d\n", res);
Java реалізація
import java.util.*; public class Main { public final static long MOD = 1000000007; static long PowMod(long x, long n, long m) { if (n == 0) return 1; if (n % 2 == 0) return PowMod((x * x) % m, n / 2, m); return (x * PowMod(x, n - 1, m)) % m; } public static void main(String[] args) { Scanner con = new Scanner(System.in); long n = con.nextLong(); long res = (PowMod(n - 1, n - 1, MOD) * n) % MOD; System.out.println(res); con.close(); } }
Python реалізація – власна функція степеня
Функція myPow
обчислює значення .
def myPow(x, n, m): if (n == 0): return 1 if (n % 2 == 0): return myPow((x * x) % m, n / 2, m) return (x * myPow(x, n - 1, m)) % m
Основна частина програми. Визначимо модуль mod = 10^9 + 7
, за яким будемо проводити обчислення.
mod = 10 ** 9 + 7
Читаємо вхідне значення .
n = int(input())
Обчислюємо та виводимо відповідь.
print(n * myPow(n - 1, n - 1, mod) % mod)
Python реалізація
Визначимо модуль mod = 10^9 + 7
, за яким будемо проводити обчислення.
mod = 10 ** 9 + 7
Читаємо вхідне значення .
n = int(input())
Обчислюємо та виводимо відповідь.
print(n * pow(n - 1, n - 1, mod) % mod)