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;
}

最新文章

  1. 分享一个Visual Studio的背景插件,让堆码更富情趣
  2. 【转载】Log4j详细使用教程
  3. 基于HTML5的网络拓扑图
  4. jetty服务器启动方法总结【备用】
  5. MFC修改初始窗口大小和窗口名字禁止窗口最大,最小化
  6. 使用dSYM分析App崩溃日志
  7. html弹出窗并用遮罩层的实例
  8. edge.js
  9. X-Y Problem
  10. Java中WebService实例
  11. SQL表连接
  12. XLink and XPoint
  13. 基于GCC的openMP学习与测试(2)
  14. 慕课网视频破解付费分享-前端开发-Python等
  15. 初学者易上手的SSH-struts2 04值栈与ognl表达式
  16. 折腾Java设计模式之单例模式
  17. 代码之髓读后感——容器&amp;并发
  18. 记CTC原理
  19. item 7:当创建对象的时候,区分()和{}的使用
  20. abp ef codefirst Value cannot be null. Parameter name: connectionString

热门文章

  1. C# 数据库连接字符串拼接
  2. Visiual Studio CLR20r3问题
  3. Memcache未授权访问漏洞利用及修复
  4. SQL server 游标,随机数使用
  5. 微服务实践分享(2)api网关
  6. Mysql一个表编码的坑,mark一下
  7. ruby 字符串常用方法学习
  8. 有关在python中使用Redis(一)
  9. git-gui:使用终端打开以后出现错误提示 Spell checking is unavable
  10. Java面向对象(接口、多态)