要解决这个问题,我们需要找到一个不以5结尾的奇数s,使得x乘以s是一个光棍,并且s尽可能小。光棍是由1组成的数字,例如1, 11, 111, 1111等。
```java
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个不以5结尾的正奇数x:");
int x = scanner.nextInt();
scanner.close();
BigInteger s = findSmallestS(x);
int n = s.toString().length();
System.out.println(s + " " + n);
}
private static BigInteger findSmallestS(int x) {
BigInteger result = BigInteger.ONE;
for (int i = 3; ; i += 2) {
if (x % i == 0) {
result = result.multiply(BigInteger.valueOf(i));
break;
}
}
return result;
}
}
```
解释
输入读取 :程序首先读取一个不以5结尾的正奇数x。寻找最小的s
使用一个循环从3开始,每次增加2(即只考虑奇数),检查x是否能被这些数整除。
如果找到一个能整除x的数,则将其作为s,并退出循环。
输出结果:
输出s和s的位数n。
示例
输入:31
输出:3584229390681 15
这个程序通过逐渐增加光棍的位数,直到找到一个能整除x的数,从而找到最小的s。