题目的意思很清楚。求最小的x使2^x mod n = 1。n是输入的。
直接暴力过,用快速幂运算。一开始忘记了n = 1的情况,导致TLE。
下面的是AC的代码:
#include <iostream> using namespace std; int main() { int n, x, i; while(cin >> n) { if(n % 2 == 0 || n == 1) //n为偶数或者1的时候,直接输出下面的,因为不存在 { cout << "2^? mod " << n << " = 1" << endl; continue; } for(i = 1; ; i++) //快速幂运算求解 { x = 2; int ans = 1; int m = i; while(m > 0) { if(m & 1) ans = ans * x % n; x = x * x % n; m >>= 1; } if(ans == 1) //找到,退出 { cout << "2^" << i <<" mod " << n << " = 1" << endl; break; } } } return 0; }
原文地址:http://blog.csdn.net/qq_25425023/article/details/46292747