码迷,mamicode.com
首页 > 其他好文 > 详细

杭电ACM1395——2^x mod n = 1~~水题

时间:2015-06-01 09:48:43      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:acm   杭电   

题目的意思很清楚。求最小的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;
}


杭电ACM1395——2^x mod n = 1~~水题

标签:acm   杭电   

原文地址:http://blog.csdn.net/qq_25425023/article/details/46292747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!