• 洛谷P3811题解


    原题:

    思路:

    没啥思路

    已经把思路贴我脸上了

    求逆元

    这玩意是很重要的东西,一旦涉及到除法取模,就要用逆元转化成乘法来取模

    原因是:

    (a+b) mod c=((a mod c)+(b mod c))mod c

    (a-b) mod c=((a mod c)-(b mod c))mod c

    (a*b) mod c=((a mod c)*(b mod c))mod c

    (ab) mod c=((a mod c)b)mod c

    但就是没有(a/b) mod c=((a mod c)/(b mod c))mod c

    所以除法真是个恶心人的东西

    为了解决除法取模,我们当然可以把a/b计算出来

    但是误差太大了

    于是乘法逆元应运而生,这玩意能把除法换成乘法,然后取模

    具体就是

    把(a/b) mod c变成(a*(b的逆元)) mod c

    这道题是要求我们用线性时间求出一堆数的逆元

    下附代码

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    long long n,p;
    long long inv[3000050];
    int main()
    {
        scanf("%lld%lld",&n,&p);
        inv[1]=1;
        cout << 1 << endl;
        for(int i=2;i<=n;i++)
        {
            inv[i]=(long long)(p-p/i)*inv[p%i]%p;
            printf("%lld
    ",inv[i]);
        }
        return 0;
    }
  • 相关阅读:
    微服务
    JNDI Tomcat
    JNDI
    依赖倒置原则
    mac下为gdb创建证书赋权其调试其它应用
    sed相关
    关于autoconf
    mac相关
    about gnu bash shell
    关于gcc
  • 原文地址:https://www.cnblogs.com/lujin49/p/13872333.html
Copyright © 2020-2023  润新知