ZOJ 3707 Calculate Prime S 数论
思路:容易得到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 数论的更多相关文章
- 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S
题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...
- 【HDU】2866:Special Prime【数论】
Special Prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- ZOJ - 3483 - Gaussian Prime
先上题目: Gaussian Prime Time Limit: 3 Seconds Memory Limit: 65536 KB In number theory, a Gaussian ...
- 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function
Calculate the Function Problem's Link: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCod ...
- 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 ...
- UVA 10140 - Prime Distance(数论)
10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...
- HDOJ 1319 Prime Cuts<数论>
学会了不难.通过这道题学习了两点: 1:筛选法求素数. 2:在写比较长的程序的时候,给每个功能部分加上注释,思路会更清晰. 题意: 1.题目中所说的素数并不是真正的素数,包括1: 2.需要读懂题意,对 ...
- hdu 2114 Calculate S(n) 数论(简单题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2114 自己对数论一窍不通啊现在,做了一道水题,贴出来吧...主要是让自己记住这个公式: 前n项和的立方 ...
- 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 所以对 ...
随机推荐
- 【洛谷 P1502】 窗口的星星(扫描线)
题目链接 把每个星星作为左下角,做出长为\(w-0.5\),宽为\(h-0.5\)的矩形. \(-0.5\)是因为边框上的不算. 离散化\(y\)坐标. 记录\(2n\)个\(4\)元组\((x,y1 ...
- stanfordCorenlp在python3中的安装使用+词性学习
1 安装 前言 Stanford CoreNLP的源代码是使用Java写的,提供了Server方式进行交互.stanfordcorenlp是一个对Stanford CoreNLP进行了封装的Pytho ...
- Linux内存高,触发oom-killer问题解决
最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂 1. 首先确认该系统的版本是32位 ? #uname -a Linux alarm 2.6.9-67.ELsmp #1 S ...
- Machine Learning系列--归一化方法总结
一.数据的标准化(normalization)和归一化 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限 ...
- vsftpd.conf 详解
//不允许匿名访问 anonymous_enable=NO //设定本地用户可以访问.注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问 local_enable=YES // ...
- web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示
这个可以说是很多初学Springmvc的人都会碰到一个令人头痛的问题 那就是为什么我配置好web.xml中的dispatchservlet后,js,css,甚至gif都不能正常显示了 我们来看看我们配 ...
- 一张图总结html5新特性
- Weblogic常用监控指标以及监控工具小结
https://blog.csdn.net/hualusiyu/article/details/39583549
- 【PAT】1006. 换个格式输出整数 (15)
1006. 换个格式输出整数 (15) 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为 ...
- Python库导入错误:ImportError: No module named matplotlib.pyplot
在Python中导入matplotlib.pyplot时出现如下错误: 在Windows操作系统下解决办法为: 打开命令提示符(按快捷键Win+r ,输入“cmd",回车),输入以下指令即可 ...