#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static long Pow(int v, long p, int mod) { if (p == 0) return 1; if (v == 0) return 0; if ((p & 1) != 0) return Pow(v, p - 1, mod) * v % mod; var h = Pow(v, p >> 1, mod); return h * h % mod; } var n = I(); var b = I(); var pz = new int[b]; var cz = new int[b]; for (var i = 0; i < b; i++) { var p = (int)Pow(i, n, b); pz[i] = p; cz[p]++; } var ans = 0L; for (var i = 0; i < b; i++) { var ci = cz[i]; if (ci == 0) continue; for (var j = 0; j < b; j++) { var cj = cz[j]; if (cj == 0) continue; ans += (long)cz[(pz[i] + pz[j]) % b] * ci * cj; } } Console.WriteLine(ans);