题目链接:
题意:将分数p/q化成小数二进制后,输出循环开始的位置和循环的长度。
思路:
int p,q;int main(){ int num=0; while(scanf("%d/%d",&p,&q)!=-1) { int r=Gcd(p,q); p/=r; q/=r; int x=1; while(q%2==0) x++,q>>=1; int temp=eular(q); int i,ans=INF; for(i=1;i*i<=temp;i++) if(temp%i==0) { if(myPow(2,i,q)==1) ans=min(ans,i); if(myPow(2,temp/i,q)==1) ans=min(ans,temp/i); } printf("Case #%d: %d,%d\n",++num,x,ans); }}