/**
大意: 给定小数(p/q),求其循环节的大小和循环节开始的位置
解法: 若出现循环 ai*2^m= aj%p;
即 2^m %p =1
若2与p 互素,则可由欧拉函数的,
不互素,需将其转化为互素的情况,,也就出现了循环节开始位置的差异; 值得学习的地方:
1、
首先,先对该分数 n/m 化简。
temp = gcd(n,m);
// n = n / temp
// m = m / temp
// n = n mod m
// 接下来就是需要知道一个分数化成k进制小数的方法:
// for i = 0 to 需要的位数
// n = n * k;
// bit[i] = n / m;
// 2、
a ^ x % q = 1,对于其任意一个解x ,它的最小解x0 | x 。
在a 与 q 互质的条件下,ψ(q) 是它的一个解。
所以有x0 | ψ(q)这样一个条件,可以先求出q的欧拉函数值ψ(q),再在它的因子中找最小解。
注意中间过程int可能溢出。 **/ #include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
long long fn[];
long long gcd(long long a,long long b){
if(b==)
return a;
return gcd(b,a%b);
} long long pow(long long a,long long b,long long m){
if(b==)
return ;
long long c =;
a =a%m;
while(b){
if(b&)
c = (long long )c*a%m;
a =(long long )a*a%m;
b>>=;
}
return c;
} long long eular(long long n){
long long m = (long long )sqrt(n+0.5);
long long ans = n;
for(long long i=;i<=m;i++) if(n%i==){
ans = ans/i*(i-);
while(n%i==)
n/=i;
}
if(n>)
ans = ans/n*(n-);
return ans;
} int main()
{
long long n,m;
char c; long long cur =;
while(cin>>n>>c>>m){
int temp = gcd(n,m); // 注意:一上午自己就是因为这个图省劲没有先将gcd(n,m)存起来,,导致后边的m/gcd(n,m) 一直是n与m的最大公约数是1的情况,即m没有得化简。。。
n = n/temp;
m = m/temp;
n = n%m;
long long ans1,ans2;
long long t=;
while(m%==){
m = m/;
t++;
}
ans1 = t+; long long res = eular(m);
if(res==){
ans2 = ;
}else{
long long cnt =;
// cout<<res<<endl;
for(long long i=;i*i<=res;i++)if(res%i==){
fn[cnt++] = i;
fn[cnt++] = res/i;
}
sort(fn,fn+cnt);
for(long long i=;i<cnt;i++){
if(pow(,fn[i],m)==){
ans2 = fn[i];
break;
}
}
}
cout<<"Case #"<<cur++<<": "<<ans1<<","<<ans2<<endl;
}
return ;
}

poj 3358的更多相关文章

  1. 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 ...

  2. 数学之欧拉函数 &几道poj欧拉题

    欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...

  3. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  4. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  5. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  6. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

  7. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  8. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  9. POJ 2255. Tree Recovery

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11939   Accepted: 7493 De ...

随机推荐

  1. ubuntu14.04 Markdown编辑器推荐之Remarkable

    如今已经习惯了用Markdown编辑器写博文的习惯,那么ubuntu以下有什么好用的呢?搜索中发现了这个叫Remarkable的免费Markdown编辑器.为什么推荐这个呢?说说它的特点: 实时预览 ...

  2. 差一本CSS 3的书,有兴趣的作者来写

    最近出版了一套CSS图书,但是缺一个CSS 3作者,是要独立写一本书的,所以要求作者务必有2年以上的经验,有写作时间和写作爱好 平时写BLOG者优先 有兴趣的可以联系Q:1602943293,验证:写 ...

  3. 三维CAD塑造——基于所述基本数据结构一半欧拉操作模型

    三维CAD塑造--基于所述基本数据结构一半欧拉操作模型(elar, B_REP) (欧拉操作  三维CAD建模课程 三维CAD塑造 高曙明老师  渲染框架 brep 带洞 带柄 B_REP brep ...

  4. PostMessage和SendMessage的区别

    1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数.而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息 ...

  5. linq中的cast<T>()及OfType<T>()

    DataTable dt=...........//获取从数据库中取出的数据(假设只有一条记录) //Cast<T>()用来将非泛型的序列转换为泛型的序列 DataRow row=dt.R ...

  6. Nancy 搭建

    Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE ,   GET ,   HEAD ,   OPTIONS ,   ...

  7. 单例模式java实现

    package Counter; public class Counter {     private int counter;     private static Counter instance ...

  8. PHP无法获取Referer问题排查

    测试结果: 同一个页面,2次打开,第一次能获取到Referer第二次获取不到,很好奇原因所在. test1.php代码是: <?php echo '测试来源:直接载入页面<br/>' ...

  9. KNN算法[分类算法]

    kNN(k-近邻)分类算法的实现 (1) 简介: (2)算法描述: (3) <?php /* *KNN K-近邻方法(分类算法的实现) */ /* *把.txt中的内容读到数组中保存,$file ...

  10. mysql 字段注释

    create table student3(id int(30) primary key comment 'ID',name varchar(255) comment '姓名',address var ...