题意很简单,就是给出p,q,求p/q的循环节长度。

由循环小数的循环部分的值等于等比数列求和的值S,列公式得到最简分数分母的值。最终得10^x%q==1(其中q为经过modify之后的值)。搞清这些之后,套kuangbin大神的BSGS模板就可以了。

题目链接: http://202.117.120.247/problem.php?id=1077

 #include<bits/stdc++.h>
 using namespace std;
 //baby_step giant_step
 // a^x = b (mod n) n为素数,a,b < n
 // 求解上式 0<=x < n的解
 #define MOD 76543
 #define next nxt
 int hs[MOD],head[MOD],next[MOD],id[MOD],top;
 void insert(int x,int y)
 {
     int k = x%MOD;
     hs[top] = x, id[top] = y, next[top] = head[k], head[k] = top++;
 }
 int find(int x)
 {
     int k = x%MOD;
     ; i = next[i])
         if(hs[i] == x)
             return id[i];
     ;
 }
 int gcd(int a,int b)
 {
     return b? gcd(b,a%b):a;
 }
 int BSGS(int a,int b,int n)
 {
     memset(head,-,sizeof(head));
     top = ;
     ) ;
     int m = sqrt(n*1.0), j;
     , p = ;
     ; i < m; ++i, p = p*a%n)insert(p*b%n,i);
     for(long long i = m; ; i += m)
     {
          && i != j )
         {
 //            cout<<i<<"=="<<j<<endl;
             return i-j;
         }
         if(i > n)break;
     }
     ;
 }
 int main()
 {
     //freopen("in.txt","r",stdin);
     //freopen("out.txt","w",stdout);
     ,b=,n;
     int p,q;
     while(~scanf("%d%d",&p,&q))
     {
         n=q/gcd(p,q);
 //        while(n%2==0) n/=2;
 //        while(n%5==0) n/=5;
         int ans = BSGS(a,b,n);
         printf("%d\n",ans);
     }
 }

xdu_1077:循环节长度的更多相关文章

  1. HDU3977(斐波那契数列模n的循环节长度)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3977 题意:求斐波那契数列模p的循环节长度,注意p最大是2*10^9,但是它的素因子小于10^6. 分析过 ...

  2. xdoj--1077: (循环节长度)

    1077: 循环节长度 时间限制: 1 Sec  内存限制: 128 MB提交: 103  解决: 37[提交][状态][讨论版] 题目描述 数一有很多的有理数,然而有的是有限小数,如1/2=0.5, ...

  3. AC日记——计算循环节长度 51nod 1035

    最长的循环节 思路: 我们尝试一种最简单的方法,模拟: 如何模拟呢? 每个数,对它模k取余,如果它的余数没有出现过,就补0继续模: 所以,当一个余数出现两次时,当前的长度即为循环节长度: 来,上代码: ...

  4. 1/n循环节长度

    /* * 求1/i的循环节长度的最大值,i<=n */ ; int res[MAXN]; // 循环节长度 int main() { memset(res, , sizeof(res)); in ...

  5. java 循环节长度

    循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153- 其循环节为[846153] 共有6位. 下面的方法,可以求出循环 ...

  6. java实现第六届蓝桥杯循环节长度

    循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位. 下面的方法,可以 ...

  7. 蓝桥杯-循环节长度-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  8. Java求循环节长度

    两个整数做除法,有时会产生循环小数,其循环部分称为:循环节.比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位.下面的方法,可以求出循环节的长 ...

  9. ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。

    主要思路: 通过模拟除法运算过程,来判断循环节结束的位置,不断将余数*10再对除数取余得到新的余数,并记录下来,知道出现的余数之前出现过,此时小数开始循环. 例如: 假设   ->     a ...

随机推荐

  1. Asp.Net Core-----简介与安装

    Asp.Net Core简介 ASP.NET Core 是一个全新的开源.跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联 ...

  2. unity3D:游戏分解之角色移动和相机跟随

          游戏中,我们经常会有这样的操作,点击场景中某个位置,角色自动移动到那个位置,同时角色一直是朝向那个位置移动的,而且相机也会一直跟着角色移动.有些游戏,鼠标滑动屏幕,相机就会围绕角色旋转. ...

  3. 谈谈this对象

    通过平常的使用简单总结了一下不同形式的函数调用下this的指向,函数的调用形式决定了this的指向.就简单分析一下以下几种情况: 情况一:纯粹的函数调用 eg: var x=1; function f ...

  4. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  5. [转]以新浪为例浅谈XSS

    随着网络时代的飞速发展,网络安全问题越来越受大家的关注,而SQL注入的攻击也随着各种防注入的出现开始慢慢的离我们而去,从而XSS跨站脚本攻击也慢慢的开始在最近几年崛起,也应对了’没有绝对的安全’这句话 ...

  6. 同是办公软件,wps和office有什么区别?

    今天完美小编为大家带来的是wps和office有什么区别教程,那么到底有什么区别呢?相信很多朋友都模棱两可,说不出所以然,看看下面的教程,相信你会选择更适合你的那一款软件.一起来看看吧! 1.两者特点 ...

  7. Chapter 1:Introduction

    作者:桂. 时间:2017-05-24  08:06:45 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 1. ...

  8. epclise设置tomcat方法(步骤)(菜鸟巧记二)

    epclise设置tomcat 1.打开epclise→window→preferences 2.输入server,打开server→runtime environments→选择add新建 3.打开 ...

  9. [转] 传说中的WCF

    这个解决方案中包含两个项目,一个叫Server,另一个叫Client,天生一对. 1.启动VS 2010,推荐用2010以上版本(2012 RC版也行),因为越高版本越好用,最好Express的,不要 ...

  10. DataTables warning (table id = 'DataTables_Table_0');错误解决办法!

    这个错误是table表格引起的,我是将条件语句和<td>标签做了调整后,消除的,个人认为是数据缺失引起的.