hdoj 1395 2^x mod n = 1 【暴力】

策略 : 观察可知,1 或者是能被2整除的数都不会求余等于1, 仅仅须要推断一下是不是除1之外的奇数,在依次查找2^x(mod(n)) ?

= 1就能够了

难点:假设每次都是在原来的基础上×2 再推断 会超时。这时候,要用一下同余定理就能够了

AC by SWS;

题目链接:http://acm.hdu.edu.cn/showproblem.php?

pid=1395

代码:

#include<stdio.h>
int main()
{
	int n;
	while(scanf("%d", &n) == 1){
		if(n ==1||n%2==0){
		printf("2^? mod %d = 1\n", n);
		continue;
	}
	else{
		int sum = 2, i, dc = 1;
		for(i = 1; ; i ++)
		if(sum%n != 1){
			sum = sum%n*2; //同余定理 sum×2%n == (sum%n) ×(2%n) == (2<n) => sum%n*2
		}
		else
		break;
		printf("2^%d mod %d = 1\n", i, n);
	}
	}
	return 0;
}
时间: 2024-11-22 16:35:18

hdoj 1395 2^x mod n = 1 【暴力】的相关文章

hdu 1395 2^x mod n = 1 暴力过~~最好学下欧拉定理~~~

2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13341    Accepted Submission(s): 4143 Problem Description Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1. In

hdu 1395 2^x mod n = 1(暴力题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1395 2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12146    Accepted Submission(s): 3797 Problem Description Give a number n, find

hdu 1395 2^x mod n = 1 (简单数论)

题目大意: 求出一个最小的x 使得 2的x次方对n取模为1 思路分析: 若要 a*b%p=1  要使得b存在 则 gcd (a,p)=1. 那么我们应用到这个题目上来. 当n为偶数 2^x 也是偶数,那么gcd 肯定不是1.故这个是不存在的. 那么n为奇数的时候,也就一定是1了. 所以直接暴力找. #include <iostream> #include <cstdio> using namespace std; int main() { int n; while(scanf(&q

HDU 1395 2^x mod n = 1

/* 中文题意: 中文翻译: 题目大意:求出最小的 n 使得2的 I 次方对 n 的值为1. 解题思路:如下: 难点详解:先用费马小定理了解2的 i 次方对偶数取余都不可能是一,还有就是排除 1 .之后要用中国剩余定理让 t 的值不超出 int 范围.不用这个定理我错了n次,都是超时.我猜测可能是 t 的值超出了int 的范围了,之后的数都是随机的,所以一直运行不出来,才会超时的.(不知道我的猜测对不对,欢迎大家指正) 关键点:理解费马小定理(我到现在还是不理解),只是用到了一点点这个东西.还有

HDU1395 2^x mod n = 1 暴力题

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1395 可以用欧拉定理证明其存在性. 欧拉定理是这样的: 如果a和m互质且a<m,设x为欧拉函数的值,则a^x%m=1 因此在本题中,只要所给的数为奇数,即和2互质,则一定存在解,再暴力就可以了 1 #include<cstdio> 2 int main() 3 { 4 int n; 5 while (scanf("%d", &n) != EOF){ 6 if (n %

hdoj 4932 Miaomiao&amp;#39;s Geometry 【暴力枚举】

题意:在一条直线上有n个点.取一长度差为x的区间. 规定点必须是区间的端点. 让你找出来最大的x 策略:rt 分析可得:两个相邻点之间的区间要么是两个点的差,要么就是两个点的差的一半,那我们就简单枚举一下就好了 排好序之后再枚举 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define M 200 using namespace std; do

(HDU)1395 -- 2^x mod n = 1

题目链接:http://vjudge.net/problem/HDU-1395 分析可知,n为偶数或者1的时候输出'?' 自己设置一个循环周期. 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <iostream> 5 #include <algorithm> 6 #include <string> 7 #include <cstdli

杭电 HDU ACM 1395 2^x mod n = 1

2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13610    Accepted Submission(s): 4208 Problem Description Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1. In

hdu 1395 2^x mod n = 1(欧拉函数)

2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18742    Accepted Submission(s): 5860 Problem Description Give a number n, find the minimum x(x>0) that satisfies 2^x mod n = 1. Inp