随笔分类 -  数论中的算法

摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3117解题思路:很显然费波纳数的后四位存在周期,通过测试可以发现后四位的周期为15000,所以后四位可以打表得出,前四位是参考了别人的思路才做出来的。因为费波纳数f[n] = 1/sqrt(5)(((1+sqrt(5))/2)^n+((1-sqrt(5))/2)^n).很显然当n非常大的时候(1-sqrt(5))/2)^n非常的小以至于可以忽略,假设F[n]可以表示成 t * 10^k(t是一个小数),那么对于F[n]取对数log10,答案就为log10 t + K,此时很明显log10 t#inc 阅读全文
posted @ 2012-09-05 10:24 一生挚爱 阅读(143) 评论(0) 推荐(0)
摘要:__int64 mod(__int64 a, __int64 b, __int64 n){ __int64 arr[500],z = -1,y; for( ; b != 1 ; b >>= 1)//分解b为二进制,记录下分解成的位数z构造栈arr { z++; if( b % 2 == 0) arr[z] = 0; else arr[z] = 1; } //a %= n如果一开始数很大,先模一次,防止过大,求逆 y = a * a % n;//第一次去模 for(; z > 0; z--) { if(arr[z]) y = (y*a%n) * (y*a%n); else... 阅读全文
posted @ 2012-08-07 10:08 一生挚爱 阅读(1045) 评论(0) 推荐(0)