洛谷 P1593 因子和
2024-08-30 01:43:06
https://www.luogu.org/problemnew/show/P1593#sub
利用约数和定理:可以去看一下公式第13条
然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然后给指数乘上$b$.
然后我们就需要计算$(1+p+p^2+....p^k)$因为k可能特别大,所以直接计算是不可能了。
看完公式后,我们当然可以利用等比公式计算了,然而还要求逆元,这题不用那么麻烦啦。
费马小定理可以解决这个问题:公式第14条
$$a^x \equiv a^{\mu(x)}mod p,\mu(x)=x-1 $$
因为模数比较小那么在我们计算的时候显然会有循环节的出现,那么我们只需要计算这个循环节就好了。
然后将每一个质因数的答案想乘就可以得到答案啦。
注意开$long long$
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define mod 9901
#define LL long long
LL a,b,x;
LL pri[],cnt[],ans,tot,pw[];
int main()
{
cin>>a>>b;
x=a;
for(int i=;i*i<=a;i++)
{
if(x%i==)
{
pri[++tot]=i;
while(x%i==)
{
cnt[tot]++;
x/=i;
}
}
}
if(x!=)
{
pri[++tot]=x;
cnt[tot]=;
}
ans=;
for(int i=;i<=tot;i++)cnt[i]*=b;
for(int i=tot;i>=;i--)
{
pw[]=;
LL s=,as=;
for(int j=;j<=&&j<=cnt[i];j++)
{
pw[j]=pw[j-]*pri[i]%mod;
(s=s+pw[j])%=mod;
if(cnt[i]%==j)as=s;
}
ans=(ans*((cnt[i]/)*s+as)%mod)%mod;
}
cout<<ans;
}
最新文章
- 分享一个Visual Studio的背景插件,让堆码更富情趣
- 【转载】Log4j详细使用教程
- 基于HTML5的网络拓扑图
- jetty服务器启动方法总结【备用】
- MFC修改初始窗口大小和窗口名字禁止窗口最大,最小化
- 使用dSYM分析App崩溃日志
- html弹出窗并用遮罩层的实例
- edge.js
- X-Y Problem
- Java中WebService实例
- SQL表连接
- XLink and XPoint
- 基于GCC的openMP学习与测试(2)
- 慕课网视频破解付费分享-前端开发-Python等
- 初学者易上手的SSH-struts2 04值栈与ognl表达式
- 折腾Java设计模式之单例模式
- 代码之髓读后感——容器&;并发
- 记CTC原理
- item 7:当创建对象的时候,区分()和{}的使用
- abp ef codefirst Value cannot be null. Parameter name: connectionString