hdu 1395 2^x mod n = 1给定n值 求x
2012-12-06 20:32
197 查看
//用数学公式 为什么超时? 感觉不爽啊 //思路:2^? mod n = 1 //2^?一定为偶数 所以如果n为偶数时,一定没有解 相反的是 如果n为奇数的话 一定有解 /* 2^k%n=(2^a*2^b)%n=((2^a%n)*(2^b%n))%n,(a+b)=k; 求lnx为log(x) 求log 10 x是log10(x) 没有专门的求任意底数对数的函数,不过可以用 log(x)/log(y)表示log y x */ #include<stdio.h> #include<math.h> int main() { int num,nu; int ans; int step; int judge; while(scanf("%d",&num)!=EOF) { ans=1; step=2; if(num%2==0||num==1) printf("2^? mod %d = 1\n",num); else { // if(pow(2.0,(int)(log(num+1.0)/log(2*1.0)))==num+1) // printf("2^%d mod %d = 1\n",(int)(log(num+1.0)/log(2*1.0)),num); // else // for(int i=1;;i++) // { // test=i*num+1; // int a=(int)(log(test*1.0)/log(2.0)); // if((int)pow(2.0,a*1.0)==test) // { // printf("2^%d mod %d = 1\n",a,num); // break; while(step!=1) { step=step*2%num; ans++; } printf("2^%d mod %d = 1\n",ans,num); } } return 0; }
相关文章推荐
- hdu 1395 2^x mod n = 1 暴力过~~最好学下欧拉定理~~~
- HDU 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1 暴力过~~最好学下欧拉定理~~~
- hdu 4529 郑厂长系列故事――N骑士问题(状压DP+滚动数组->求给定棋子的所有方法数)
- hdu 1395 2^x mod n = 1
- HDU 2133 What day is it(给定日期求星期几)
- hdu 1806 Frequent values(给定一个非降序数组,求任意区间内出现次数最多的数的次数)
- HDU 2795 Billboard(线段树:找到线段树中>=给定值的第一个元素位置 并 更新该点)
- Hdu 4804 Campus Design(给定一个图,0是不能放的,然后现在有1X1和1X2方块,要求铺满该图,使得1X1使用次数在C到D之间,1X2次数随便,问有几种放法)
- Hdu 3336 Count the string(求给定字符串含前缀的数量)
- hdu 1395 2^x mod n = 1
- HDU 1395 2^x mod n = 1
- hdu 1395 2^x mod n = 1
- hdu 1395
- hdu 1395 2^x mod n = 1
- HDU 1395 2^x mod n = 1(快速幂取模)
- HDU 1559 最大子矩阵 (给定大小) DP
- HDU-1395 2^x mod n = 1
- hdu 2529 数论好题 给定一个速度v 水平距离一定问能上升的最大高度
- hdu 1395 2^x mod n = 1