思路:容易得到s[n]=s[n-1]+s[n-2],也就是fib数。

求第k小的fib质数的也就是第k个质数数-2,当k>2时。

在就是s[n]/x%m=s[n]%(x*m)/x.

代码如下:

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define M 1000005
using namespace std;
ll k,x,m;
int prime[M],cnt;
bool f[*M];
struct mat
{
ll m[][];
};
mat mul(mat a,mat b,ll mod)
{
mat ans;
for(int i=;i<;i++)
for(int j=;j<;j++){
ans.m[i][j]=;
for(int z=;z<;z++)
ans.m[i][j]=(ans.m[i][j]+a.m[i][z]*b.m[z][j])%mod;
}
return ans;
}
ll pw(ll n,ll mod)
{
mat ans,a;
for(int i=;i<;i++)
for(int j=;j<;j++){
ans.m[i][j]=;
a.m[i][j]=;
}
ans.m[][]=;ans.m[][]=;a.m[][]=;
while(n){
if(n&) ans=mul(ans,a,mod);
n>>=;
a=mul(a,a,mod);
}
ll aa=ans.m[][];
ll bb=ans.m[][];
while(){
if(bb%x==) break;
ll t=(aa+bb)%mod;
aa=bb;
bb=t;
}
return bb;
}
void init()
{
cnt=;
for(int i=;i<*M;i++){
if(cnt>=) break;
if(!f[i]) prime[cnt++]=i;
for(int j=;j<cnt&&i*prime[j]<*M;j++){
f[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
}
ll gcd(ll a,ll b)
{
if(a<b) swap(a,b);
while(b){
ll t=a;
a=b;
b=t%b;
}
return a;
}
ll cal(ll mod)
{
ll a=,b=,c;
if(k==) c=;
else c=;
while(){
if(a>=c&&a%x==) break;
ll t=(a+b)%mod;
a=b;
b=t;
}
return a;
}
int main()
{
int t;
init();
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld",&k,&x,&m);
ll ans,g=x*m;
if(k<=) ans=cal(g);
else ans=pw(prime[k]-,g);
printf("%lld\n",ans/x);
}
return ;
}

ZOJ 3707 Calculate Prime S 数论的更多相关文章

  1. 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S

    题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...

  2. 【HDU】2866:Special Prime【数论】

    Special Prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. ZOJ - 3483 - Gaussian Prime

    先上题目: Gaussian Prime Time Limit: 3 Seconds      Memory Limit: 65536 KB In number theory, a Gaussian ...

  4. 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function

    Calculate the Function Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCod ...

  5. codeforces 680C C. Bear and Prime 100(数论)

    题目链接: C. Bear and Prime 100 time limit per test 1 second memory limit per test 256 megabytes input s ...

  6. UVA 10140 - Prime Distance(数论)

    10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...

  7. HDOJ 1319 Prime Cuts<数论>

    学会了不难.通过这道题学习了两点: 1:筛选法求素数. 2:在写比较长的程序的时候,给每个功能部分加上注释,思路会更清晰. 题意: 1.题目中所说的素数并不是真正的素数,包括1: 2.需要读懂题意,对 ...

  8. hdu 2114 Calculate S(n) 数论(简单题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2114 自己对数论一窍不通啊现在,做了一道水题,贴出来吧...主要是让自己记住这个公式: 前n项和的立方 ...

  9. zoj3707(Calculate Prime S)解题报告

    1.计算(a/b)%c,其中b能整除a 设a=b*r=(bc)*s+b*t 则(b*t)为a除以bc的余数 r=c*s+t 而 (a/b)%c=r%c=t (a%bc)/b=(b*t)/b=t 所以对 ...

随机推荐

  1. 2017中国大学生程序设计竞赛 - 网络选拔赛 1003 HDU 6152 Friend-Graph (模拟)

    题目链接 Problem Description It is well known that small groups are not conducive of the development of ...

  2. NYOJ 117 求逆序数 (树状数组)

    题目链接 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出 ...

  3. zedboard学习记录.2.PS+PL 流水灯与uart

    1.建立一个工程. 硬件设计 2.IP integrator -> create block desgin;Run Block Automation. 3.add IP -> AXI GP ...

  4. 仿360影视网站模板html

    链接:http://pan.baidu.com/s/1mhIkV4s 密码:9wgq

  5. elk系列8之logstash+redis+es的架构来收集apache的日志【转】

    preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的,架构图如下: 解释下这个架构图的流程 首先前端log ...

  6. 003_循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate)的区别

    表示“重复”这个含义的词有很多, 比如循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称 ...

  7. mui app页面刷新问题 plus.webview.getWebviewById("").reload()

    /** * 放回指定页面,并且刷新指定页面 * @param {Object} pageId 指定页面ID */ mui.app_refresh=function(pageId){ if(!mui.i ...

  8. ssh使两台机器建立连接

    ssh利用口令建立连接过程: 客户端--> 发送连接请求 --> 远程主机 --> 返回远程主机的公钥 --> 公钥加密客户端私钥+客户端公钥返回远程主机 --> 远程主 ...

  9. pandas安装及使用

    一. 安装pandas1. Anaconda        安装pandas.Python和SciPy最简单的方式是用Anaconda.Anaconda是关于Python数据分析和科学计算的分发包.2 ...

  10. 进程自我保护 适用于WIN7 X64

    //进程自我保护,注意只有X64 WIN7可用 #include <ntddk.h> #define PROCESS_TERMINATE 1 typedef struct _LDR_DAT ...