思路:

枚举约数

套个裸的Lucas+CRT就完了...

//By SiriusRen
#include <cmath>
#include <cstdio>
using namespace std;
#define int long long
const int M=,N=;
void exgcd(int a,int b,int &x,int &y){
if(!b){x=,y=;return;}
exgcd(b,a%b,x,y);
int temp=x;x=y;y=temp-a/b*y;
}
int CRT(int *a,int *m,int num){
int ans=;
for(int i=;i<=num;i++){
int x,y;
exgcd(M/m[i],m[i],x,y);
ans=(ans+M/m[i]*x%M*a[i])%M;
}return ans;
}
int power(int x,int y){
int ans=;
while(y){
if(y&)ans=ans*x%(M+);
x=x*x%(M+),y>>=;
}return ans;
}
int m[]={,,,,},n,g,fac[N],inv[N],sqr,s[N],top,ans[],T;
int C(int x,int y){
if(x<y)return ;
if(x<m[T]&&y<m[T])return fac[x]*inv[y]%m[T]*inv[x-y]%m[T];
return C(x/m[T],y/m[T])*C(x%m[T],y%m[T])%m[T];
}
signed main(){
scanf("%lld%lld",&n,&g),sqr=sqrt(n);
for(int i=;i<sqr;i++)if(n%i==)s[++top]=i,s[++top]=n/i;
if(sqr*sqr==n)s[++top]=sqr;
if(n%sqr==&&sqr*sqr!=n)s[++top]=sqr,s[++top]=n/sqr;
fac[]=fac[]=inv[]=inv[]=;
for(T=;T<=;T++){
for(int i=;i<m[T];i++)fac[i]=fac[i-]*i%m[T];
for(int i=;i<m[T];i++)inv[i]=(m[T]-m[T]/i)*inv[m[T]%i]%m[T];
for(int i=;i<m[T];i++)inv[i]=inv[i]*inv[i-]%m[T];
for(int i=;i<=top;i++)ans[T]=(ans[T]+C(n,s[i]))%m[T];
}
printf("%lld\n",power(g,CRT(ans,m,)+M));
}

最新文章

  1. DashPathEffect
  2. 原生js实现放大镜效果
  3. web安全之ssrf
  4. [模板] 2-SAT
  5. SQL Server 建表语句
  6. MyEclipse启动Tomcat服务器时老是跳到Debug调试上
  7. (转载)Htmlparser Filter 简要归纳
  8. 使用TopShelf轻松开发Window服务
  9. php不区分大小写
  10. Palindrome Linked List leetcode
  11. 简单类型对象 String
  12. phpmyadmin设置编码和字符集gbk或utf8_导入中文乱码解决方法
  13. C#删除字符串最后一个字符
  14. Redis快问快答
  15. 通过Erlang构建TCP服务应用案例(最原始方式)
  16. 【洛谷P2860】冗余路径
  17. API 开发平台 dreamfactory,参考SAWAGGER,国外厂家,开源,本地与云部署
  18. hdu 3861 The King’s Problem trajan缩点+二分图匹配
  19. (25)uniGUI for C++ builder之UniHTMLMemo初使用及uniGUI如何调用javaScript
  20. 《Javascript权威指南-第6版》

热门文章

  1. dotnetnuke 中使用ado.net entityframework 如果在程序中动态调用系统的连接字符串信息
  2. OpenCV:OpenCV目标检测Hog+SWindow源代码分析
  3. SLAM:飞行机器人的参数解析-分类
  4. 分布式机器学习框架:MxNet 前言
  5. 【转载】浏览器缓存详解:expires cache-control last-modified
  6. 微信小程序中的iPhone X适配问题
  7. .NET Framework 3.5 安装
  8. 单链表每k个节点为一组进行反转(最后不满k个时不反转)
  9. es 存入失败错误
  10. ADB 常用命令学习