读了一下题就会很愉快的发现,这个数列是关于p的幂次的斐波那契数列,很愉快,然后就很愉快的发现可以矩阵快速幂一波,然后再一看数据范围就......然后由于上帝与集合对我的正确启示,我就发现这个东西可以用欧拉函数降一下幂,因为两个数一定互质因此不用再加一个phi(m),于是放心的乘吧宝贝!!

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <cmath>
#define r register
using namespace std;
typedef long long LL;
inline LL read()
{
r LL sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
LL prime[];
bool isnot[];
LL T;
LL temp_a[][],a[][],b[],temp_b[];
LL m,p;
inline void Init()
{
for(r LL i=;i<=(<<);i++)
{
if(!isnot[i])
prime[++T]=i;
for(r LL j=;j<=T&&prime[j]*i<=(<<);j++)
{
isnot[prime[j]*i]=;
if(i%prime[j]==)break;
}
}
m=read(),p=read();
}
inline LL Opha(LL x)
{
r LL to=(LL)sqrt(x+0.5);
r LL ans=x;
for(r LL i=;prime[i]<=to;i++)
if(x%prime[i]==)
{
ans=ans/prime[i]*(prime[i]-);
while(x%prime[i]==)x/=prime[i];
}
if(x!=)
ans=ans/x*(x-);
return ans;
}
inline void Multi_One(LL k)
{
memset(temp_b,,sizeof(temp_b));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
temp_b[i]=(temp_b[i]+a[i][j]*b[j]%k)%k;
memcpy(b,temp_b,sizeof(b));
}
inline void Multi_Two(LL K)
{
memset(temp_a,,sizeof(temp_a));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
temp_a[i][j]=(temp_a[i][j]+a[i][k]*a[k][j]%K)%K;
memcpy(a,temp_a,sizeof(a));
}
inline LL POW(LL x,LL k)
{
a[][]=%k,a[][]=%k,a[][]=%k,a[][]=;
b[]=%k,b[]=;
while(x)
{
if(x&)Multi_One(k);
x>>=,Multi_Two(k);
}
b[]%=k;
return b[];
}
inline LL Pow(LL x,LL y,LL k)
{
LL ans=%k;
while(y)
{
if(y&)ans=ans*x%k;
y>>=,x=x*x%k;
}
ans%=k;
return ans;
}
inline void Work()
{
while(m--)
{
r LL n=read(),q=read();
r LL x=Opha(q);
r LL y=POW(n-,x);
printf("%lld\n",Pow(p,y,q));
}
}
int main()
{
Init();
Work();
return ;
}

最新文章

  1. 【PostgreSQL】PostgreSQL的安装
  2. foreach的用法
  3. javascript 操作cookie
  4. VisualStudio2010中创建ASP.Net WebService
  5. xaml的margin和css的margin对比
  6. C#的Main(String[] args)参数输入问题
  7. Codeforces Round #424 Div2 E. Cards Sorting
  8. [UOJ 282]长度测量鸡
  9. Grunt 一个专为JavaScript提供的构建工具
  10. GLSL ES 中的存储变量修饰符(const/attribute/uniform/varying/in/centroid in/out/centroid out)
  11. javascript 关键字高亮显示实现代码
  12. ASP.NET页面之间传值的方式之Session(个人整理)
  13. Mac 上用 Homebrew 安装 .NET Core 1.0 RC4 004771
  14. [转帖] k8s dashboard 的创建 升级 以及 admin token的创建和简单使用.
  15. 使用kubeadm安装Kubernetes v1.10
  16. Java数据结构和算法(一)线性结构之单链表
  17. &lt;Android 基础(二十八)&gt; Fragment (1)
  18. springMVC入门-04
  19. 如何添加ORACLE 的 ODBC
  20. 通过网络仓库建立本地的yum仓库

热门文章

  1. vm 中 centOS 7 固定ip设置
  2. JNI模板
  3. Flask初学者:url_for
  4. Redis缓存数据库的安装与配置(1)
  5. abap&lt;itab&gt;refresh,clear,free
  6. 20145202马超《网络对抗》Exp4 恶意代码分析
  7. gp更新来的太快
  8. LeetCode:18. 4Sum(Medium)
  9. Putty的设置保存
  10. IOException: win32 io returned 267. Path: