poj 3358——Period of an Infinite Binary Expansion
来源:互联网 发布:sqlserver增加值 编辑:程序博客网 时间:2024/05/29 06:34
题意:给出一个分数,求出这个分数用二进制表示的时候的循环节长度还有第一个开始循环的位置
思路:同余方程,欧拉定理
错误:快速幂的时候溢出了,输出少加了一个逗号。
代码如下:
#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<vector>using namespace std;int ans[30000];bool valid[100000];int tot=0;;void getPrime(){ memset(valid,true,sizeof(valid)); valid[1]=false; valid[0]=false; for(int i=2;i<=99999;++i) { if(valid[i]) { tot++; ans[tot]=i; } for(int j=1;((j<=tot)&&(i*ans[j]<=99999));j++) { valid[i*ans[j]]=false; if(i%ans[j]==0)break; } }}int gcd(int a,int b){ int c=a%b; for(;c!=0;c=a%b) { a=b;b=c; } return b;}int mul_pow(int a,int b,int m){ a%=m; int ret=1; while(b) { if(b&1) ret=(long long)ret*a%m; b>>=1; a=(long long)a*a%m; } return ret;}int phi(int n){ int tmp=(sqrt(n)+1); int rea=n; for(int i=1;ans[i]<=tmp;++i) { if(n%ans[i]==0) { rea=rea-rea/ans[i]; while(n%ans[i]==0) { n/=ans[i]; } } } if(n>1)rea=rea-rea/n; return rea;}vector<int> a;void factor(int n){ int tmp=sqrt(n)+1; for(int i=1;ans[i]<=tmp;++i) { if(n%ans[i]==0) { a.push_back(ans[i]); while(n%ans[i]==0)n/=ans[i]; } } if(n!=1){ a.push_back(n); }}int main(){ // freopen("data.txt","r",stdin); int kase=0; int p,q; getPrime(); while(scanf("%d/%d",&p,&q)!=EOF) { if(p==0) { printf("Case #%d: 1,1\n",++kase); continue; } // cout<<p<<' '<<q<<endl; a.clear(); int d=gcd(p,q); p=p/d; q=q/d; int qq=q; int first=0; while(qq%2==0) { first++; qq>>=1; } int period=phi(qq); factor(period); for(int i=0;i<a.size();++i) { while(period%a[i]==0&&mul_pow(2,period/a[i],qq)==1) { period/=a[i]; } } printf("Case #%d: ",++kase); printf("%d,%d\n",first+1,period); } return 0;}
0 0
- poj 3358——Period of an Infinite Binary Expansion
- Period of an Infinite Binary Expansion POJ
- POJ 3358 Period of an Infinite Binary Expansion
- POJ-3358-Period of an Infinite Binary Expansion 解题报告
- POJ-3358Period of an Infinite Binary Expansion
- POJ 3358Period of an Infinite Binary Expansion
- poj 2462 Period of an Infinite Binary Expansion
- POJ_3358 Period of an Infinite Binary Expansion
- pku3358 Period of an Infinite Binary Expansion
- poj3358 Period of an Infinite Binary Expansion
- POJ3358 Period of an Infinite Binary Expansion
- poj3358 Period of an Infinite Binary Expansion
- POJ3358 Period of an Infinite Binary Expansion
- POJ 3358 Period of an Infinite Binary Expansion 欧拉函数+欧拉定理
- POJ 3358 Period of an Infinite Binary Expansion(欧拉定理)
- poj 3358 Period of an Infinite Binary Expansion 欧拉定理
- poj 3358 Period of an Infinite Binary Expansion (费马小定理+分数化二进制小数)
- poj 3358 Period of an Infinite Binary Expansion(欧拉函数+欧拉定理)
- C++编程学习之贺利坚老师的C++第一周项目1
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
- 学习笔记 Java_静态_继承 2014.7.12
- 监听报错 TNS-00525: Insufficient privilege for operation 11gR2 + 连接报错ORA-12537: TNS:connection closed
- Oracle查询各个部门工资小于各个部门平均工资的员工
- poj 3358——Period of an Infinite Binary Expansion
- http://travel.tianya.cn/travelPlan/showPlan?planId=938761
- http://travel.tianya.cn/travelPlan/showPlan?planId=938761
- [FPGA][硬件课设]基于Nexys 4的智能小车系统
- oracle事务与锁
- POJ-3155-Hard Life
- BFS模板
- cocos2d-x 3.x中各种平台的创建项目命令,运行项目命令、运行testcpp命令
- UVA 340 (暑假-排序、检索 -A - Master-Mind Hints)