实现2^x mod n = 1 关键算法
题目:
给你一个数字n,找到满足2^x mod n = 1 的最小值x,如果x 存在,则输出“2^x mod n = 1”,否则输出“2 ^? mod n = 1”,您需要用真实的x 和n 的值来替代字符串中的变量。
答案:
package cn.swjd.lyx;
import java.util.Scanner;
/**
* Created by admin on 2021/9/17.
*/
//给你一个数字n,找到满足2^x mod n = 1 的最小值x,
// 如果x 存在,则输出“2^x mod n = 1”,否则输出“2 ^? mod n = 1”,
// 您需要用真实的x 和n 的值来替代字符串中的变量。
public class Task3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个正整数:");
int n = scanner.nextInt(); //除数
int x =1; //幂的初始值
int f=1; //定义一个变量,表示被除数
int count=0; //记录计算次数,余数的个数和除数的数值相等,2^x mod 5,他的余数只有五种结果0,1,2,3,4
for (;;x++){
f*=2; //相当于幂
if (f%n==1){
System.out.println("2^"+x+"mod"+n+"=1");
break;
}
count++;
//当余数的结果都出来后,依然未得到结果,表示不可能得到了
if (count ==n ){
System.out.println("2^?mod"+n+"=1");
break;
}
}
}
}