鹿我所录的博客

记录我在学习C#中的点点滴滴,记录下以备后来人借鉴。

 

洛谷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\n",inv[i]);
    }
    return 0;
}
复制代码

 

posted on   鹿我所录  阅读(67)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

统计

点击右上角即可分享
微信分享提示