poj 3358
/**
大意: 给定小数(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的更多相关文章
- 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 ...
- 数学之欧拉函数 &几道poj欧拉题
欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
- POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37427 Accepted: 16288 Descr ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 2739. Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20050 ...
- POJ 2255. Tree Recovery
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11939 Accepted: 7493 De ...
随机推荐
- uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯
题目:跟N皇后问题一样,不考虑对角冲突,但考虑墙的存在,只要中间有墙就不会冲突. N皇后一行只能放一个,而这题不行,所以用全图暴力放棋,回溯dfs即可,题目最多就到4*4,范围很小. 刚开始考虑放一个 ...
- Dreamweaver中打开CodeSmith文件
电脑环境:Windows2008+Dreamweaver 8英文版本 问题描述:Dreamweaver中默认打开文档时不支持打开CodeSmith模板文件对应的.cst后缀名文件,截图如下: 解决步骤 ...
- Ubuntu 14.04安装地里编码软件Nominatim过程
一.必须软件: 在Ubuntu系统编译执行Nominatim软件系统必须安装的软件有: 1.GCC 编译器 2.postgresql 数据库 3.proj4 4.geos 5.postgis 6.PH ...
- IdeasToComeTrue
灵感这玩意,果真是有的吧.不考虑什么架构和盈利模式,就只是想到的有趣,随便写写,以飨流年. 我的头脑风暴:爱玩儿aiWaner 2015/08/22 换书: 每个人可能有很多闲置图书,自己看完了觉得好 ...
- [转]spring 监听器 IntrospectorCleanupListener简介
"在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用Introspe ...
- lab4 Cache Geometries 深入理解计算机系统——高速缓存
这个实验主要是将高速缓存命中的一点东西,意在告诉我们平常多注意这方面的东西. 不懂java的,所以只管C的部分. You will do this several times, making smal ...
- 小鱼提问2 属性访问器中get,set再用public修饰行吗,private呢?
/// <summary> /// 是否有一个用户正在连接服务器中 /// </summary> public bool IsConnectting { get { retur ...
- Android常用工具类封装---SharedPreferencesUtil
SharedPreferences常用于保存一些简单的数据,如记录用户操作的配置等,使用简单. public class SharedPreferencesUtil { // ...
- CSS3里面的高级属性
-webkit-tap-highlight-color 这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色 ...
- java下拉框,滚动条
package com.soft.test; /** * 下拉列表.下拉框.滚动条的使用 */ import javax.swing.*; import java.awt.*; public clas ...