/**
大意: 给定小数(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. Day01

    1.@Test函数,执行后控制台没有输出结果? 1)  不能用静态方法,控制台会没有结果. 2)  不能把类名命名为Test,@Test不识别. 2.遍历Map集合的entrySet方法不会? 3.使 ...

  2. 662 - Fast Food

    描述:状态方程p[i][j]=dp[i-1][k]+dist(k+1,j),由于没搞懂距离dist是怎么计算的,以为是num[j]-num[k+1],结果wa了一次,在状态转移的时候,采用一个数组sc ...

  3. dataset 用法(1)

    DataSet是表和列结构在内存中的表示方式,DataSet支持多表.表间关系.数据约束等,和关系数据库的模型基本一致.(本质上是微型的数据库.包含一组DataTable对象和DataTable之间的 ...

  4. English - 定冠词和不定冠词(a an the) 的区别

    不定冠词表示泛指,定冠词表示特指. 不定冠词a (an)与数词one 同源,是"一个"的意思.a用于辅音音素前,一般读作[e],而an则用于元音音素前,一般读做[en]. 1) 表 ...

  5. CRM需要注意的一些事,修改字段类型

    crm字段类型如果变了,比如文本类型变为查找类型,要新建命名跟原来不一样,千万不能删除以前的字段再建原来的一样的,那样如果导到正式系统会造成无法导入,执行sql失败, 切记切记.可以字段名后加2,或者 ...

  6. validate 表单验证

    转自博客园:http://www.cnblogs.com/easyinsc/archive/2009/02/27/1407826.html (1)required:true               ...

  7. 计算Date间的分钟数

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); Date date_begin = simpl ...

  8. leetcode Longest Palindromic Substring python

    class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str ...

  9. Android webViewj简单处理apk的下载链接

    最近在开发二维码扫一扫的功能,需要分多种情况处理外部的url.遇到一个问题是,一些程序包(比如一些android应用)的下载不好处理.如果不做任何处理的话,webView会打开一个空白页.比如这个链接 ...

  10. PyCrpyto windows安装使用方法

    PyCrypto - The Python Cryptography Toolkit PyCrypto是一个免费的加密算法库,支持常见的DES.AES加密以及MD5.SHA各种HASH运算. ---- ...