Period of an Infinite Binary Expansion-----欧拉函数,欧拉定理
2012-07-11 18:52
405 查看
题目:http://poj.org/problem?id=3358
这一题很经典。
题解:源于http://www.cnblogs.com/ACKOKO/articles/2119216.html
这里讲一下2^i*(2^(j-i)-1)%q==0,为什么将q中的2的个数是i,因为2^i中的i要尽量小(i是循环的前一位,题目要求i要小),并且要满足去除q中所有的2,所以i要等于q中的2的个数。
源代码:
这一题很经典。
题解:源于http://www.cnblogs.com/ACKOKO/articles/2119216.html
这里讲一下2^i*(2^(j-i)-1)%q==0,为什么将q中的2的个数是i,因为2^i中的i要尽量小(i是循环的前一位,题目要求i要小),并且要满足去除q中所有的2,所以i要等于q中的2的个数。
源代码:
#include <stdio.h> #include <algorithm> using namespace std; typedef long long ll; int cnt; int m,n,d; int factor[1000000]; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int euler(int m) { int s=m; for(int i=2;i*i<=m;i++) { if(m%i==0) { while(m%i==0) {m=m/i;} s=s/i*(i-1); } } if(m>1) s=s/m*(m-1); return s; } ll quickPow(int b,int m) { ll s=1,a=2; while(b>0) { if(b%2==1) s=s*a%m; a=a*a%m; b=b/2; } return s; } int solve(int m) { int flag=0,y,k=0; int sum,x=euler(m); if(x==1) return 1; for(int i=2;i*i<=x;i++) if(x%i==0) { factor[k++]=i; factor[k++]=x/i; } sort(factor,factor+k); for(int i=0;i<k;i++) { sum=quickPow(factor[i],m); if(sum==1) { y=factor[i]; flag=1; break; } } if(!flag) y=x; return y; } int main(){ int cas=1; while(scanf("%d/%d",&n,&m)!=EOF) { cnt=1; d=gcd(n,m); n=n/d; m=m/d; while(m%2==0) { m=m/2; cnt++; } printf("Case #%d: %d,%d\n",cas++,cnt,solve(m)); } return 0; }
相关文章推荐
- POJ 3358 Period of an Infinite Binary Expansion 欧拉函数+欧拉定理
- poj 3358 Period of an Infinite Binary Expansion(数论:欧拉函数+快速幂取模)
- poj 3358 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(欧拉定理)
- Period of an Infinite Binary Expansion POJ - 3358 欧拉函数
- poj 3358 Period of an Infinite Binary Expansion 欧拉定理
- POJ 3358 Period of an Infinite Binary Expansion ★ (数论好题:欧拉函数)
- Period of an Infinite Binary Expansion+POJ+欧拉函数+好题
- POJ 3358 Period of an Infinite Binary Expansion ★ (数论好题:欧拉函数)
- HDU 3358 Period of an Infinite Binary Expansion 推荐!!(欧拉函数,费马小定理)
- poj 3358 Period of an Infinite Binary Expansion (费马小定理+分数化二进制小数)
- poj 2462 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
- poj3358 Period of an Infinite Binary Expansion