Period of an Infinite Binary Expansion

    题目大意:给你一个分数,求这个分数二进制表示下从第几位开始循环,并求出最小循环节长度。

    注释:int范围内。

      想法:这题说实话,是一道神题!我们思考一下,如何将一个小数换成二进制?连续的乘2,然后取首位。这样的比较简洁的转换方式注定了这题其实是可做的。我们可以抓住循环节的在这样的方法下是怎样形成的?显然,存在一个x,使得每多乘$2^x$都会使得所形成的答案相同。第二点,我们知道,一个分数的循环节开始之前是不参与循环的。这样,我们思考,多次反复的乘以2,它的整数部分modb是相同的对吧!?!我们在此就有一个式子,就是说

    $2^i\cdot a\equiv 2^j\cdot a(mod\ b)$。其中j>i

    可以变形为$2^j\cdot a-2^i\cdot a\equiv 0(mod\ b)$

    $\Rightarrow 2^i\cdot a\cdot(2^{j-i}-1)$首先,我们在此之前不妨现将a,b弄成互质。现在,gcd(a,b)=1,所以,我们有

    $2^i\cdot (2^{j-i}-1)\equiv 0(mod\ b)$

    显然,我们想求最小值,我们发现,如果i的值增加,循环节的长度是不会改变的,所以,我们必须求出最小的且满足题意的i,而这个i,就是b中2的个数。剩下的,就是另一道题了。参考博主博客The Luckiest Number(The Luckiest Number?猛戳)。

    最后,附上丑陋的代码......

 #include <iostream>
 #include <cstdio>
 typedef long long ll;
 using namespace std;
 ll gcd(ll a,ll b)
 {
     return b?gcd(b,a%b):a;
 }
 ll quick_multiply(ll a,ll b,ll mod)
 {
     ll ans=;
     a%=mod;
     b%=mod;
     while(b)
     {
         ) ans=(ans+a)%mod;
         b>>=;
         a=(a+a)%mod;
     }
     return ans;
 }
 ll quick_power(ll a,ll b,ll mod)
 {
     ll ans=;
     a%=mod;
     while(b)
     {
         ) ans=quick_multiply(ans,a,mod);
         b>>=;
         a=quick_multiply(a,a,mod);
     }
     return ans;
 }
 int main()
 {
     ll a,b;
     ll cnt=;
     while(~scanf("%I64d/%I64d",&a,&b))
     {
         ll k=a,r=b;
         a/=gcd(k,r);
         b/=gcd(k,r);
         ll sum=;
         ==) b/=,sum++;
         printf();
         ll phi=b;
         ll m=b;
         ;i*i<=m;++i)
         {
             )
             {
                 phi=phi/i*(i-);
                 )
                 {
                     m/=i;
                 }
             }
         }
         ) phi=phi/m*(m-);
         ll minn=phi;
         ;i*i<=phi;++i)
         {
             )
             {
                 ,i,b)==) minn=min(minn,i);
                 ,phi/i,b)==) minn=min(minn,phi/i);
             }
         }
         printf("%I64d\n",minn);
     }
 }

    小结,我们发现,这题对于a的取值并没有什么要求,证明是显然的。

poj3358 Period of an Infinite Binary Expansion的更多相关文章

  1. poj3358 Period of an Infinite Binary Expansion 数论有难度

    这道题目感觉好难,根本就是无从下手的感觉,尝试了以前的所有方法,都没有思路,毫无进展,参考了一下别人的思路,感觉学到了新的知识 接下来开始分析 观察1/10这组数据,按照二进制转化法可以得到: 1/1 ...

  2. poj 3358 Period of an Infinite Binary Expansion

    由乘2取整得到分数的小数位,可以找到规律!!! 例如:1/10,2/10,4/10,8/10,16/10,32/10,64/10…… 取整后:1/10,2/10,4/10,8/10,6/10,2/10 ...

  3. poj 2462 Period of an Infinite Binary Expansion

    欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Eule ...

  4. Period of an Infinite Binary Expansion 题解

    Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \per ...

  5. acm数学(转)

    这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法    这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...

  6. [转] POJ数学问题

    转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...

  7. ACM数学

     1.burnside定理,polya计数法 这个专题我单独写了个小结,大家可以简单参考一下:polya 计数法,burnside定理小结 2.置换,置换的运算 置换的概念还是比较好理解的,< ...

  8. ACM数学知识体系

    在盛情收到学弟邀请给他们整理ACM数学方面的知识体系,作为学长非常认真的弄了好久,希望各学弟不辜负学长厚爱!!!非常抱歉因为电脑全盘格式化好多word.PPT都丢失,我尽量具体地给大家找到各知识点学习 ...

  9. Binary Tree 分类: POJ 2015-06-12 20:34 17人阅读 评论(0) 收藏

    Binary Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6355   Accepted: 2922 Descr ...

随机推荐

  1. 泛型集合、datatable常用数据类型转换Json帮助类

    泛型集合.datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.Configuration; using Sys ...

  2. javaWeb学习之Listener监听

    ] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filt ...

  3. 加深try catch Finnly的理解

    上代码 public String twoGetFeeInfoByWithUnit(JSONArray jsonArray,String key1,String key2){ String Debit ...

  4. 十年Java开发程序员回答,自学Java,培训Java的利和弊

    最近有一个朋友在群里面问我:是应该去培训Java还是应该自学Java,我想的说的是我并不是想给他一个去培训或者不去培训,我用自己多年对于行业的了解去分析这个问题,然后让他自己去思考,哪种更加适合他.他 ...

  5. java基础:内存分配(上)

    java执行中的内存分区: 1.代码域:存放代码 2.数据域:存放静态的数据 3.栈:存放局部变量 4.堆:存放成员变量 (ps:局部变量是类中方法体中申明的变量,只在这个方法中有效:成员变量是类中方 ...

  6. jsoup.parse 的一个坑

    那天,写好一个爬虫 爬取某个网站的数据. 当时调用了公司不知道某个人写的 一个方法 logger.info(joururl); doc= util.getDocument(joururl.toStri ...

  7. 小程序wx.navigateTo和wx.redirectTo 都无效

    最近在写小程序,遇到页面跳转时,发现有几次失败.查询资料已解决,总结一下知识点: 一.如下,第5层到到6层时失败(评论页⑤-->返回商品详情页⑥) 登陆①-->主页②-->商品列表页 ...

  8. PHP随机函数-集锦

    1 PHP随机函数收藏 function random_string($len = 6) { $chars = array( "a", "b", "c ...

  9. 常用表单验证&&常用正则

    ### 表单验证&&常用正则 ;(function(ELF){ ELF = ELF || (window.ELF = {}); var reg = {}, pattern = { /* ...

  10. Java高并发秒杀系统【观后总结】

    项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并 ...