随笔 - 68  文章 - 57  trackbacks - 0
<2010年4月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿(8)

随笔分类(74)

随笔档案(68)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  去年合肥网络赛的题目,今天终于给搞定了。确切的说不是完全独立想出来的,看了网上的一点提示(用欧拉定理),然后想了好几次终于想出来了。
  题目大意是给定一个L(L不大于2000000000),求最小长度的能整除L的都是8的数,输出长度,如果没有输出0。设长度为n的话,那么这个全为8的数可以表示成8 + 80 + 800 + ...是一个等比数列,变换后得到8 * (10 ^ n - 1) / 9 = k * L。如果L中2的因子数不大于3个,那么可以除掉。之后等式可以写成10 ^ n - 1 = 9 * k * L,也就可以转换成一个模方程:10 ^ n = 1 mod 9L。根据欧拉定理,一定要10和9 * L互素才能有解,这样就可以判定出无解的情况了。之后相当于求一个原根,求出9L的欧拉函数,设其为phi,那么n一定是phi的约数才可以满足条件,枚举phi的约数就可以了。
  这个题目变态的一个地方在于9L和phi都可能很大,int表示不下,要用long long,这么大的模简单的乘法会溢出,也要写成二分的形式。中间有好几个地方我都用了int,结果导致溢出,超时了2次。总的来说这是个很好的数论题目,以后这种题目应该多练习一些。
posted on 2009-06-10 09:16 sdfond 阅读(289) 评论(0)  编辑 收藏 引用 所属分类: Algorithm - Number Theory

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理