摘要: 去年省赛教练会汝哥讲过一个结论,至多两个数字就可以拼出任何数的倍数。证明可以这样,AAAA...AAA若干个A,模X,能得到的余数种类是有限的,至多是1~X-1,那么总会有n个A和m个A这两个数模X余数相等,他们相减就得到了X的倍数,而相减得到的数就是两个数组成的。这样就可以对一个数先枚举一下,对两个数再枚举一下,找组成的那个数,可以BFS。一个数用来拼数字的时候超过一定长度就可以停下了,一步步模会出现循环。枚举得到的答案比较一下更新,最后输出。比赛时候思维乱,代码不太工整,见谅。 1 #include<stdio.h> 2 #include<string.h> 3 # 阅读全文
posted @ 2012-09-16 19:25 CSGrandeur 阅读(1397) 评论(2) 推荐(0) 编辑
摘要: 求通项和斐波那契数列的方法一样,矩阵快速幂。这道题麻烦在套了三层。但其实取模这种操作肯定会出现循环的,可以先本地暴出循环节,1000000007对应的循环节是222222224,222222224对应的循环节是183120。最外层的结果是对1000000007取模,它的内层对222222224取模,可以得到相等的答案,那么222222224的内层对183120取模,也能得到相等的答案,这样就是分别对三个模数做矩阵快速幂,内层得到的结果返回给外层作为指数。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<str 阅读全文
posted @ 2012-09-16 19:18 CSGrandeur 阅读(1869) 评论(2) 推荐(0) 编辑