在这战斗的岁月里 » 日志 » POJ 3358 Period of an Infinite Binary Expansion
POJ 3358 Period of an Infinite Binary Expansion
acm06060 发表于 2007-08-26 22:12:49
题目意思是给定m,n问你 m/n的二进制数的最大循环节开始位置和长度。
其实很容易就是判定是否存在 b, l 使得: m*2^b = m*2^b*2^l (mod n) 两边消去m *2^b
就是求 2^l=1(mod n)
懂的数论的话就知道这个是在求Dn(2) 而这个是无法直接求的,但我们有一些途径可以使得这个比较好求。
有定理1. Dn(a) = [ Dn1(a), Dn2(a).. ] iff n=n1*n2..证明这里略,这个的应用就是 如果n不是prime的话我们就把它分解成这个样子
当然如果含有2的因子这里都忽略,为什么等等说,然后我们的n就标致为
n=p1^t1 * p2^t2 *..*pk*tk
在根据定理1我们就转成求 Dn(2) n=p^t
这时候我们还有定理二. Dn(a) = d iff d | phi(n)
because x^phi(n)=1(mod n) 【欧拉定理】
所以答案肯定是phi(p^t)的一个因子 对于某个p^t而言。
所以我们要做的就是找出所有 p^t(p-1)/p 的因子。
这个咋搞呢,我的实现是对于每个因子都记录下来,然后dfs到一个因子再判定是不是存在可行因子。
然后在求lcd。。好像很麻烦。。。。
不知道还有没有更好的方法。
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
最新评论
-
2007-08-28 06:09:30 匿名 123.128.*.* http://dt-skyse.blog.sohu.com
话说…………ICPC…………这种东西已经离我甚远了…………现在完全转向控制方向了……
-
2007-08-29 15:16:25 匿名 218.249.*.*

8错.
给你一个点几率
