列表

详情


NC207192. 寻找X的值

描述

已知一个数n,找到最小的x使2x次幂对n取余等于12^x mod n = 1)。

输入描述

每行一个正整数,作为n的值。

输出描述

如果最小的x存在,则打印一行结果形如2^x mod n = 1否则打印2^? mod n = 1。你需要用具体的数字代替上式中的x和n。

示例1

输入:

2

输出:

2^? mod 2 = 1

示例2

输入:

31

输出:

2^5 mod 31 = 1

示例3

输入:

123

输出:

2^20 mod 123 = 1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2020-06-03 15:44:18

#include <stdio.h>
 
int main() {
	int n,x,y;
 
 
	while(scanf("%d",&n)!=EOF) {
		if(n<=1||n%2==0) {
			printf("2^? mod %d = 1\n",n);
			continue;
		}
 
		int w=2,x=1;
		while(w!=1) {
			x++;
			w+=w;
			w%=n;
		}
 
		printf("2^%d mod %d = 1\n",x,n);
 
	}
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-06-03 15:52:13

#include <stdio.h>
 int main() {
	int n,x,y;
	while(scanf("%d",&n)!=EOF) {
		if(n<=1||n%2==0) {
			printf("2^? mod %d = 1\n",n);
			continue;
		}
		int w=2,x=1;
		while(w!=1) {
			x++;
			w+=w;
			w%=n;
		}
		printf("2^%d mod %d = 1\n",x,n);
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 484K, 提交时间: 2020-06-03 15:36:16

#include<stdio.h>
int main()
{
int n,t,s;
while(~scanf("%d",&n))
{
if(n==1||n%2==0)
{
printf("2^? mod %d = 1\n",n);
}
else
{
t=2;
s=1;
while(t%n!=1)//暴力
{
t=(t*2)%n;
s++;
}
printf("2^%d mod %d = 1\n",s,n);
}
}
return 0;
}

上一题