又是一道用欧拉定理解的题。。嗯,关键还是要建好方程,注意一些化简技巧

题目大意:

给定一个由 p / q 生成的循环小数,求此循环小数在二进制表示下的最小循环节以及不是循环节的前缀

思路:

小数化为二进制,应该乘2取余, 设从小数的第x位开始有长度为y的循环节,

先把 p/q 化为最简分数,此时p,q互质

则应该满足 同余方程 p*2^x=p*2^(x+y) mod q

整理一下可得  q | p*2^x*(2^y - 1) 由于 p,q互质,则q | 2^x*(2^y - 1)

此时 由于 2^y-1是奇数,则有次整除式可知 q中2的因数个数即为 x,因此可以处理 q 得到 x,同时将q变为 q/(2^x);

最终得到同余方程   2^y=1 (mod q)

利用欧拉定理解此同余方程即可

代码如下

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long phi(long long n)
{
long long res=n;
for(int i=;i*i<=n;i++)
{
if(n%i==)
{
res=res-res/i;
while(n%i==)
{
n/=i;
}
}
}
if(n>)
res=res-res/n;
return res;
}
long long multi(long long a,long long b,long long m)//a*b%m
{
long long res=;
while(b>)
{
if(b&)
res=(res+a)%m;
b>>=;
a=(a<<)%m;
}
return res;
}
long long quickmod(long long a,long long b,long long m) //a^b%m
{
long long res=;
while(b>)
{
if(b&)
res=multi(res,a,m);
b>>=;
a=multi(a,a,m);
}
return res;
} int main()
{ long long p,q,x,y;
int cas=;
while(scanf("%I64d/%I64d",&p,&q)!=EOF)
{
if(p==)
{
puts("1,1");
continue;
}
cas++;
long long t=gcd(p,q);
x=;
p/=t;q/=t;
while(q%==)
{
q/=;x++;
}
long long m=phi(q);
y=m;
for(long long i=;i*i<=m;i++)
{
if(m%i==)
{
while(m%i==)
m/=i;
while(y%i==)
{
y/=i;
if(quickmod(,y,q)!=)
{
y*=i;
break;
}
}
}
}
printf("Case #%d: %I64d,%I64d\n",cas,x,y);
} return ;
}

poj3358:欧拉定理的更多相关文章

  1. 【poj3358】消因子+BSGS 或 消因子+欧拉定理 两种方法

    题意:给你一个分数,求它在二进制下的循环节的长度,还有第一个循环节从哪一位开始. For example, x = 1/10 = 0.0001100110011(00110011)w and 0001 ...

  2. poj3358数论(欧拉定理)

    http://poj.org/problem?id=3358 (初始状态为分数形式)小数点进制转换原理:n / m ; n /= gcd( n , m ) ; m/= gcd( n , m ) ; n ...

  3. poj3696:同余方程,欧拉定理

    感觉很不错的数学题,可惜又是看了题解才做出来的 题目大意:给定一个数n,找到8888....(x个8)这样的数中,满足能整除n的最小的x,若永远无法整除n 则输出0 做了这个题和后面的poj3358给 ...

  4. 2^x mod n = 1(欧拉定理,欧拉函数,快速幂乘)

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  6. 【POJ3358】

    题目描述: 题意: 就是给定一个a/b,求a/b的结果变成二进制之后的小数.这个小数后面会有一段循环节,只要求输出循环节开始循环的位置和循环长度. 分析: 这题我是这么想的,比如说样例中的1/5,我们 ...

  7. LA 3263 (平面图的欧拉定理) That Nice Euler Circuit

    题意: 平面上有n个端点的一笔画,最后一个端点与第一个端点重合,即所给图案是闭合曲线.求这些线段将平面分成多少部分. 分析: 平面图中欧拉定理:设平面的顶点数.边数和面数分别为V.E和F.则 V+F- ...

  8. 【欧拉定理】计算(a^(b^c))%1000000007

    欧拉定理(称费马-欧拉定理或欧拉 函数定理) 欧拉定理表明,若n,a为正整数,且n,a互素(即gcd(a,n)=1),则 这个定理可以用来简化幂的模运算.比如计算7222的个位数,实际是求7222被1 ...

  9. LA_3263_That_Nice_Euler_Circuits_(欧拉定理+计算几何基础)

    描述 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=15& ...

随机推荐

  1. 第一个ServiceStack程序

    1. https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice 2. http://tech.pro ...

  2. zookeeper[6] zookeeper FAQ(转)

    转自:http://www.cnblogs.com/zhengran/p/4601855.html 1. 如何处理CONNECTION_LOSS?在Zookeeper中,服务器和客户端之间维持一个长连 ...

  3. android启动优化

    ############################################## # power on till android lock screen comes up # # get ...

  4. java\C#\php主流语言实现FMS流媒体传输协议RTMP的开源组件

    java:bladeDS http://sourceforge.net/adobe/blazeds/wiki/Home/ .net:FlourinceFX http://www.fluorinefx. ...

  5. HDU 5067-Harry And Dig Machine(DFS)

    Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  6. 打开新窗口(window.open)

    open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选参数,在窗口中要显示网页的网址或路 ...

  7. box-shadow全面解析

    一.box-shadow语法: box-shadow: none | inset(可选值,不设置,为外投影,设置,为内投影) x-offset(阴影水平偏移量,正方向为right) y-offset( ...

  8. 1:环境安装与介绍:canopy

    <利用python进行数据分析>这本书推荐用的的环境为EPDFree版本,但实际现在大概已经抛弃它改用Canopy了,下面将介绍Canopy相关: 一:下载:https://store.e ...

  9. sqlserver中的序列

    序列是由用户定义的绑定到架构的对象.序列依据定义的间隔按升序或降序生成,并可配置为用尽时重新启动(循环).序列不与特定表关联.序列与表之间的关系由应用程序进行控制. 创建序列的语法: CREATE S ...

  10. 使用Alcatraz为Xcode安装XActivatePowerMode插件, 从此敲代码逼格大大滴~

    Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 关于Alcatraz的安装,这里有一篇不错的博文,请参考安装:http://www.cnb ...