NC207192. 寻找X的值
描述
输入描述
每行一个正整数,作为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; }