输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)

该博客介绍了如何计算一个正整数N的阶乘N!对给定质数P取模的结果。通过逐步乘积并取模P,可以得出N! Mod P的值。

思路:先得到两个数,然后得到第一个数的乘积,然后取模第二个数

-----------------------------------------------------------------------------------------------

using System;

using System.Numerics;
namespace _1008_N的阶乘modP
{
    class Program
    {
        static void Main(string[] args)
        {
            int number1;
            int number2;
            string[] sr = Console.ReadLine().Split(' ');
            number1 = Convert.ToInt32(sr[0]);
            number2 = Convert.ToInt32(sr[1]);
            BigInteger count = 1;
            for (int i = 2; i <= number1; i++)
            {
                count *= i;
            }
            Console.WriteLine(count % number2);
        }
    }
}
逆元的问题,即对于给定的整数 $ n $ 素数 $ p $,找到一个整数 $ x $ 使得: $$ x \cdot n \equiv 1 \pmod{p} $$ 该问题可以视为解线性同余方程 $ n x \equiv 1 \pmod{p} $ 的解。这种解存在的前提是 $ \gcd(n, p) = 1 $,即 $ n $ $ p $ 互素。由于 $ p $ 是素数,只要 $ n $ 不是 $ p $ 的倍数,该条件自然成立。 ### 解法步骤 1. 解此类问题可以使用扩展欧几里得算法(Extended Euclidean Algorithm),其目标是解形如 $ a x + b y = \gcd(a, b) $ 的方程的整数解。对于 $ n x + p y = \gcd(n, p) $,当 $ \gcd(n, p) = 1 $ 时,扩展欧几里得算法可以出 $ x $ 的值,其中 $ x $ 即为 $ n $ 在 $ p $ 意义下的逆元。 2. 另一种方法是利用费马小定理(Fermat's Little Theorem)。由于 $ p $ 是素数,费马小定理表明对于任意不被 $ p $ 整除的整数 $ a $,有: $$ a^{p-1} \equiv 1 \pmod{p} $$ 由此可得: $$ a \cdot a^{p-2} \equiv 1 \pmod{p} $$ 所以 $ a^{p-2} \mod p $ 就是 $ a $ 在 $ p $ 意义下的逆元。对于本题,$ a = n $,因此: $$ x \equiv n^{p-2} \pmod{p} $$ ### 示例代码 以下是一个使用 Python 实现逆元计算的示例代码,结合了扩展欧几里得算法费马小定理两种方法: ```python def extended_gcd(a, b): if b == 0: return (a, 1, 0) else: g, x1, y1 = extended_gcd(b, a % b) return (g, y1, x1 - (a // b) * y1) def mod_inverse_gcd(n, p): g, x, y = extended_gcd(n, p) if g != 1: return None # 不存在逆元 else: return x % p def mod_inverse_fermat(n, p): return pow(n, p - 2, p) # 示例:解 n = 5 在 p = 17 意义下的逆元 n = 5 p = 17 x_gcd = mod_inverse_gcd(n, p) x_fermat = mod_inverse_fermat(n, p) print(f"扩展欧几里得算法:x = {x_gcd}") print(f"费马小定理:x = {x_fermat}") ``` ### 结果验证 1. 使用扩展欧几里得算法解的 $ x $ 满足 $ n \cdot x \equiv 1 \pmod{p} $,可以直接验证。 2. 使用费马小定理解的 $ x $ 也满足 $ n \cdot x \equiv 1 \pmod{p} $,可以通过幂运算快速验证。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值