2870 - 【验证型】第11章:指针和数组 2^? mod = 1

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 20 MB

给你一个正整数n,要求你找到最小的x(x>0)满足2^x mod n = 1。

题目输入

第一行输入N,表示测试数据的组数,接下来N行输入测试数据n。

题目输出

如果最小的x存在,则输出2^x mod n = 1(注意x和n要用具体的值代替),否则输出2^? mod n = 1,若x > 99998也只需输出 2^? mod n = 1。

输入/输出样例

输入格式

2
2
5

输出格式

2^? mod 2 = 1
2^4 mod 5 = 1

C语言解答

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
	int n;
	scanf("%d", &n);
	int nTwo;
	int j;
	int *a = (int *)malloc(n*sizeof(int));
	int *x = (int *)malloc(n*sizeof(int));
	int i;
	for(i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
	for(i = 0; i < n; i++)
	{
		if(a[i] == 1)
		{
			x[i] = 1;
			continue;
		}
		if(!(a[i]%2))
		{
			x[i] = 0;
			continue;
		}
		for(j = 2; j < 99999; j++)
		{
			nTwo = pow(2, j);
			if(nTwo % a[i] == 1)
			{
				x[i] = j;
				break;
			}
		}
	}
	for(i = 0; i < n; i++)
	{
		if(!x[i])
		{
			printf("2^? mod %d = 1\n", a[i]);
		}
		else
		{
			printf("2^%d mod %d = 1\n", x[i], a[i]);
		}
	}
	return 0;
}