hdu 5451 Best Solver(2015沈阳赛区网赛)
来源:互联网 发布:梁洛施双胞胎脑瘫知乎 编辑:程序博客网 时间:2024/04/29 10:03
Best Solver
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)Total Submission(s): 78 Accepted Submission(s): 26
Problem Description
The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart.
It is known thaty=(5+26√)1+2x .
For a given integerx (0≤x<232) and a given prime number M (M≤46337) , print [y]%M . ([y] means the integer part of y )
It is known that
For a given integer
Input
An integer T (1<T≤1000) , indicating there are T test cases.
Following areT lines, each containing two integers x and M , as introduced above.
Following are
Output
The output contains exactly T lines.
Each line contains an integer representing[y]%M .
Each line contains an integer representing
Sample Input
70 463371 463373 463371 4633721 46337321 463374321 46337
Sample Output
Case #1: 97Case #2: 969Case #3: 16537Case #4: 969Case #5: 40453Case #6: 10211Case #7: 17947
解题思路:
这道题跟斐波拉契数列有关,斐波拉契数列通项公式an=((1+√5)/2)^n+(1-√5)/2)^n,这题也可以转化为an=(5+2*sqrt(6))^n+(5-2*sqrt(6))^n的形式,则an一定是整数的形式,
因为an=((5+sqrt(6))+(5-sqrt(6))^n-2*(5+sqrt(6))*(5-sqrt(6)),(5+sqrt(6)+5-sqrt(6))^n=10^n,2*(5+sqrt(6))*(5-sqrt(6))=2,
所以an一定为整数,0<(5-2*sqrt(6)<1,所以0<(5-2*sqrt(6))^n<1,所以这题的y值是an-1。
就那现在问题就是,怎么来快速的求an?再参考菲波那契数列,通式怎么表达的。a[n]=a[n-1]+a[n-2]。那这里也
可以用类似的表达式,a[n]=p*a[n-1]+q*a[n-2]。带入几个数求得p=10,q=-1,于是通项公式为即a[n]=10*a[n-1]-*a[n-2]。
由于本题的x比较大,且m比较小,于是可以找循环节,由于是递推关系,后一个只与它前2个有关,于是循环节最大
为m方,另外,循环节肯定从序列开头开始(打表发现的)。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>using namespace std;const int maxn=47337;bool vis[maxn];int prim[maxn];int a[maxn];int judge(int m){ a[0]=10%m; a[1]=98%m; for(int j=2;; j++) { a[j]=(a[j-1]*10-a[j-2]+m)%m; //int sign=0; if(a[j-1]==a[0]&&a[j]==a[1]) return j-1; }}int pow_mod(int x,int mod){ long long ans=1,cur=2; while(x) { if(x&1) ans=(ans*cur)%mod; cur=(cur*cur)%mod; x=(x>>1); } return ans;}int main(){ int t,ca=1; scanf("%d",&t); while(t--) { int m; long long x; scanf("%I64d%d",&x,&m); int cmr=judge(m); int cwt=pow_mod(x,cmr); printf("Case #%d: ",ca++); printf("%d\n",(a[cwt]-1+m)%m); } return 0;}
0 0
- hdu 5451 Best Solver(2015沈阳赛区网赛)
- HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
- Hdu 5451 Best Solver(快速幂取模+循环节) -2015 ACM-ICPC沈阳网赛1002
- HDU 5451 Best Solver
- HDU 5455 Fang Fang(2015沈阳赛区网络赛)
- HDU-5512-Pagodas【2015沈阳赛区】
- HDU-5510-Bazinga【2015沈阳赛区】【KMP】
- 【HDU】5451 Best Solver(2015 ACM/ICPC Shenyang Online)
- HDU 5451 Best Solver(数学)
- HDU 5461 Largest Point(2015沈阳赛区网络赛+技巧水题)
- 2015沈阳赛区网络赛 HDU 5457 Hold Your Hand 字典树+最小割
- HDU 5452 Minimum Cut (2015年沈阳赛区网络赛C题)
- HDU 5462 Manors (2015年沈阳赛区网络赛M题)
- HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)
- HDU 5510 2015ACM-ICPC沈阳赛区现场赛B题
- HDU 5512 2015ACM-ICPC沈阳赛区现场赛D题
- HDU 5521 2015ACM-ICPC沈阳赛区现场赛M题
- HDU-5521-Meeting【2015沈阳赛区】【最短路】
- 自定义View构造函数参数理解
- Android SDK Manager中各个文件的作用-总结
- 亿级Web系统搭建——单机到分布式集群
- 在MyEclipse中快捷键的使用
- MBR&GPT
- hdu 5451 Best Solver(2015沈阳赛区网赛)
- 三分生意七分做人
- 解决安卓中软键盘覆盖activity的方案
- java的动态绑定与静态绑定
- SIP路由机制解析
- Sql server 实现增删改查
- 煎饼侠
- struts2项目web.xml里加filter后,jsp页面不显示问题
- 如果overflowbutton 没出现的话解决